Added Java port of the NuHash algorithm.
This commit is contained in:
parent
c97d09c8de
commit
513409f895
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,6 +1,8 @@
|
||||
*.o
|
||||
*.user
|
||||
/_release
|
||||
/**/.settings
|
||||
/**/.vs
|
||||
/**/bin
|
||||
/**/obj
|
||||
/.vs
|
||||
/bin
|
||||
/out
|
||||
/**/out
|
||||
|
8
Makefile
8
Makefile
@ -21,7 +21,7 @@ ifneq ($(CPU),)
|
||||
CFLAGS += -m$(CPU)
|
||||
endif
|
||||
|
||||
CFLAGS += -std=gnu99 -Wall -pedantic -Wno-deprecated-declarations -Ilibnuhash/include -D_FILE_OFFSET_BITS=64
|
||||
CFLAGS += -std=gnu99 -Wall -pedantic -Wno-deprecated-declarations -Ilibnuhash/c99/include -D_FILE_OFFSET_BITS=64
|
||||
|
||||
ifneq ($(DEBUG),1)
|
||||
CFLAGS += -Ofast -DNDEBUG
|
||||
@ -53,11 +53,13 @@ ifneq ($(filter %w64-mingw32 %w64-windows-gnu,$(OS_TYPE)),)
|
||||
LDFLAGS += -municode
|
||||
endif
|
||||
|
||||
RCFLAGS += -Ilibnuhash/c99/src
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
INFILES = $(patsubst %.c,%.o,$(wildcard libnuhash/src/*.c)) $(patsubst %.c,%.o,$(wildcard tool/src/*.c))
|
||||
INFILES = $(patsubst %.c,%.o,$(wildcard libnuhash/c99/src/*.c)) $(patsubst %.c,%.o,$(wildcard tool/src/*.c))
|
||||
OUTFILE = bin/nuhash
|
||||
OUTPATH = $(patsubst %/,%,$(dir $(OUTFILE)))
|
||||
|
||||
@ -87,7 +89,7 @@ $(OUTPATH):
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.rc
|
||||
windres -o $@ $<
|
||||
windres $(RCFLAGS) -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -vrf $(OUTPATH)
|
||||
|
@ -43,7 +43,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\nuhash.h" />
|
||||
<ClInclude Include="src\version.h" />
|
||||
<ClInclude Include="src\nuhash_version.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
@ -23,7 +23,7 @@
|
||||
<ClInclude Include="include\nuhash.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\version.h">
|
||||
<ClInclude Include="src\nuhash_version.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
@ -4,7 +4,7 @@
|
||||
/******************************************************************************/
|
||||
|
||||
#include "nuhash.h"
|
||||
#include "version.h"
|
||||
#include "nuhash_version.h"
|
||||
#include <string.h>
|
||||
|
||||
#define COUNT_OF(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
|
8
libnuhash/java/.classpath
Normal file
8
libnuhash/java/.classpath
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="test"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
17
libnuhash/java/.project
Normal file
17
libnuhash/java/.project
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>NuHash</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
36
libnuhash/java/build.xml
Normal file
36
libnuhash/java/build.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<project default="all">
|
||||
<property name="outname" value="nuhash-1.jar"/>
|
||||
<property name="dir.bin" location="bin"/>
|
||||
<property name="dir.out" location="out"/>
|
||||
<property name="dir.src" location="src"/>
|
||||
<property name="file.license" location="../../LICENSE.txt"/>
|
||||
|
||||
<tstamp>
|
||||
<format property="today" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
</tstamp>
|
||||
|
||||
<target name="all" depends="clean,jar"/>
|
||||
|
||||
<target name="mkdir">
|
||||
<mkdir dir="${dir.bin}"/>
|
||||
<mkdir dir="${dir.out}"/>
|
||||
</target>
|
||||
|
||||
<target name="clean" depends="mkdir">
|
||||
<delete verbose="true" includeEmptyDirs="true"><fileset dir="${dir.bin}" includes="**/*"/></delete>
|
||||
<delete verbose="true" includeEmptyDirs="true"><fileset dir="${dir.out}" includes="**/*"/></delete>
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="mkdir">
|
||||
<javac srcdir="${dir.src}" destdir="${dir.bin}" target="1.8" source="1.8" includeantruntime="false"/>
|
||||
</target>
|
||||
|
||||
<target name="jar" depends="compile">
|
||||
<jar destfile="${dir.out}/${outname}" basedir="${dir.bin}">
|
||||
<fileset file="${file.license}"/>
|
||||
<manifest>
|
||||
<attribute name="Build-Date" value="${today}"/>
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
504
libnuhash/java/src/com/muldersoft/nuhash/NuHash.java
Normal file
504
libnuhash/java/src/com/muldersoft/nuhash/NuHash.java
Normal file
@ -0,0 +1,504 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
package com.muldersoft.nuhash;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.security.auth.Destroyable;
|
||||
|
||||
public final class NuHash implements Destroyable {
|
||||
|
||||
public static final int NUHASH_WORDS = 6;
|
||||
|
||||
public static final int NUHASH_BYTES = NUHASH_WORDS * Long.BYTES;
|
||||
|
||||
public static final List<Integer> VERSION = Collections.unmodifiableList(Arrays.asList(1, 0, 0));
|
||||
|
||||
private static final int ROUNDS = 5;
|
||||
|
||||
private final long[] m_hash = new long[NUHASH_WORDS];
|
||||
|
||||
private boolean m_finished = false;
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* CONSTRUCTOR */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
public NuHash() {
|
||||
reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
Arrays.fill(m_hash, 0L);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* CONST TABLES */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private static final long[] NUHASH_INI = new long[] {
|
||||
0x243F6A8885A308D3L, 0x13198A2E03707344L, 0xA4093822299F31D0L,
|
||||
0x082EFA98EC4E6C89L, 0x452821E638D01377L, 0xBE5466CF34E90C6CL
|
||||
};
|
||||
|
||||
private static final long[][] NUHASH_XOR = new long[][] {
|
||||
new long[] { 0x01DCDF00414B3037L, 0xB1B3AF661B8E96F8L, 0x944D2873DB393121L, 0x73DA9A36662AE755L, 0x1F4F318C4ECB56B1L, 0xF09743D99C2AA5BCL }, /*00*/
|
||||
new long[] { 0xA81FBBC6CBBFC954L, 0x39DE43648959EDDBL, 0x1A641A0BDA01822FL, 0xB52E607266932658L, 0x2C5B1731AC802084L, 0xC2EF10671FC79DD4L }, /*01*/
|
||||
new long[] { 0xCF2A8D8E08810046L, 0x8B7E9B2089E268F6L, 0x930461652C5D2DECL, 0xF096E42223BFC8B9L, 0x8DD338964CFE0970L, 0x269C342F7CEC60BDL }, /*02*/
|
||||
new long[] { 0xB970A920D2ED0552L, 0x010F894A254DA7E1L, 0x8D5F205F9D1A40D8L, 0x50C33DCCC3FD5F58L, 0xB49F31BDE7D82C57L, 0x7CDE04F62A959033L }, /*03*/
|
||||
new long[] { 0x49FAB2822B9C84ACL, 0x34B8648CD68CBEF1L, 0xE5121147BB4126DEL, 0xC0B31F54B2FFE00FL, 0x2F193DA38E8CC632L, 0x058C984B429B8AFCL }, /*04*/
|
||||
new long[] { 0xE07F9DA44D8C9942L, 0xBE2AF9B39ACA65F2L, 0x5D3D8FB1466DC295L, 0xC0051E3EC3F962C7L, 0xF8FDC3CCD4CE2BB6L, 0x9024C0EFC6199937L }, /*05*/
|
||||
new long[] { 0xA3111377EF01F5EFL, 0x31F59B366C02A3FFL, 0x61B82949760D16DCL, 0xF6B958AF92BD3BDFL, 0x7297AAEFEC69C0B2L, 0xFE8A50AD9E8684CDL }, /*06*/
|
||||
new long[] { 0x3D3DD0C829EA9AA0L, 0x3E77597EEC96C7A3L, 0x8FD038231E7F1684L, 0x64617B131FB7EDE0L, 0x85C99CE4C5405874L, 0xA58735D41F19C5E3L }, /*07*/
|
||||
new long[] { 0x8028628ACAF91B9AL, 0x194A640538C97064L, 0x04A15E018A4F1680L, 0xF4BE1B04C2360955L, 0xDFB24D4CEF581A20L, 0x3C59D0A0FD15879DL }, /*08*/
|
||||
new long[] { 0x88F8E2ECE78AF1BCL, 0xB46B6E22297364C2L, 0x9339F17F926B99F3L, 0x31293489B3B8F07CL, 0x3909CE1649C9BCF1L, 0x0C46103BFA31BCE9L }, /*09*/
|
||||
new long[] { 0x4D1A0B8CC7EFE2A9L, 0xAFD7878CAD55E871L, 0xC89CFBC858CF4153L, 0xC4739486C74F75D6L, 0x0BF7192C130AC9F2L, 0x0084F2BC5E81BD9AL }, /*0A*/
|
||||
new long[] { 0x4AFBE975014FCACFL, 0x41DEAF8CFACC41E4L, 0x3C1EC23B53ED16E9L, 0x78B06EB30F1C3248L, 0xDD11165D04285C72L, 0x6546D9B5609491E4L }, /*0B*/
|
||||
new long[] { 0xFFD1E2E04DC8D260L, 0x07B186948A74ECCEL, 0xB5120E45121AC531L, 0xBD0BC86330810C85L, 0xDE93AFDDDB487730L, 0x78DEB0DE6EB99196L }, /*0C*/
|
||||
new long[] { 0x79BAA2AC3FDEBA55L, 0xB1B7E3E1C92A567EL, 0xA53F69AB4A5B0794L, 0xF0DA7499954F6DDDL, 0x58117C89E1132248L, 0xD95DF5F794C51A6EL }, /*0D*/
|
||||
new long[] { 0x89BC8A0C65091C33L, 0xB04EEAEE063135C2L, 0xF53267E04AB6E689L, 0xB4C579B7207E8BF2L, 0x3FD31E51343CD2DFL, 0x119E523E2F8197FEL }, /*0E*/
|
||||
new long[] { 0x2E10CB1C6060F32DL, 0xBC92E732A94E6B63L, 0xF3220D831FD04267L, 0x502C5F7414BCE87FL, 0x89E0651DE91D2457L, 0x759E56B04482D915L }, /*0F*/
|
||||
new long[] { 0x43AEE32C6A84E803L, 0x0C5007202C0BD7E3L, 0xB4F464474205D32AL, 0x7D17FC95DE386C06L, 0xE8DFBF64567AA545L, 0x55BD889D5853046FL }, /*10*/
|
||||
new long[] { 0x687ABE14EAB8DA27L, 0x397B3AB50D72C344L, 0x505EAA6D1FDE618DL, 0x61BE79865DA13F69L, 0x17BBAB29B5E90E2DL, 0x010C921972FA8B2FL }, /*11*/
|
||||
new long[] { 0x8B7223A4F56FF453L, 0x291B7B5CB98B6FE1L, 0xFD421625786FBF7DL, 0xE33D1020D0E8CDC8L, 0xCA530C708B739E87L, 0x878AF1F304B8A12FL }, /*12*/
|
||||
new long[] { 0x7ECE1F24E56DD711L, 0x2E0869241B2FA6DFL, 0x84B834DCC459B2FDL, 0xE022EDA6319E7D3BL, 0x59839D8CA03C9928L, 0x644790F491BBC774L }, /*13*/
|
||||
new long[] { 0xCBDC6F49E6B0DD0DL, 0x44BA2F8D00346732L, 0x86BCC821586AE61CL, 0xC7B7491285CEE55BL, 0xED3912FFD97F3851L, 0xF4AF0186BEBEBCBFL }, /*14*/
|
||||
new long[] { 0xCA8A48E54ECCE516L, 0xBEDF1864B7F8F506L, 0xD56A1F60A4B36AA4L, 0x49B25AB5FE0DD9D9L, 0x21377DBB5E49FCE1L, 0x708F64F5D59D99E7L }, /*15*/
|
||||
new long[] { 0xE9F873A569AFE02CL, 0xDA66BC05CA997390L, 0x8C88174756D35385L, 0xEAAAF16CF4FDA730L, 0xB39F7A55653A3512L, 0xF10AB727BC23E852L }, /*16*/
|
||||
new long[] { 0x93E96FF8C5BBE2AFL, 0xA47785420253E97CL, 0x704B25D1F77D074CL, 0xC0B2093F1470559CL, 0x8D5BFDD4E364AACFL, 0x550518673F5B1BF7L }, /*17*/
|
||||
new long[] { 0x8DAC832E5BE81ACBL, 0x588BFB202B7583D8L, 0xA34D8A70DFD1D7E4L, 0xD03B0627B687033EL, 0xE3D0BE7EDBDC75CFL, 0x818EE8C5B09F8BEAL }, /*18*/
|
||||
new long[] { 0x8E3B02E1489D7D31L, 0x5336752B64E3B532L, 0xE4D4CC795C580A65L, 0x6DAB08F313ED767EL, 0x8E567E88FDBA36BFL, 0x259490F1D8E933D0L }, /*19*/
|
||||
new long[] { 0xEAB437D0D62CAA62L, 0xC090AD28B982B003L, 0xE255D768D25704ECL, 0xA048511AF6256A43L, 0xE79F078F4D498B5FL, 0xC41735FB75B357FEL }, /*1A*/
|
||||
new long[] { 0x70DA9FC3504FF29DL, 0xB9AB1F388673FF25L, 0x36922F4CD17357BAL, 0xF09C3AB292E7E04AL, 0x90CE0BC3D9BA13ECL, 0x647C4CA63C918DE3L }, /*1B*/
|
||||
new long[] { 0xD834A38DD1ECD688L, 0xA97A0020DE46AB6AL, 0x9CDEC7F6E62EA71FL, 0x288A5A6FD74DC47EL, 0xD44A2E2765CE50F1L, 0xBB9B50B5DB9E4F3CL }, /*1C*/
|
||||
new long[] { 0xC66DA90E41DDF2E6L, 0x5A3FE86F160C5C09L, 0x6F6AF0405108CCBEL, 0xF938382EB627FC7FL, 0x163DD634617F006CL, 0x5184B1FEDC908497L }, /*1D*/
|
||||
new long[] { 0xC95719ED07FCB21CL, 0x5112DF043F6EE7EBL, 0x50F9FD60012334CEL, 0x589FA85104D96579L, 0xB7129E44D71905A7L, 0x3314766E0733528DL }, /*1E*/
|
||||
new long[] { 0xDC6C8014C5457CB8L, 0xD635FDCD286A69B6L, 0xD66F232CE27D01BFL, 0x56AF4AC0F682EC0FL, 0x57DF1D55B64328F5L, 0x651ED4C52A87CACAL }, /*1F*/
|
||||
new long[] { 0x26D9D1CC79EEC502L, 0x69BF340A34B1EBFEL, 0xFAA5AAAC8E397174L, 0xD0A8F9BD426BCF6FL, 0x5B131F464D6D2452L, 0x122DD15660D0D6DAL }, /*20*/
|
||||
new long[] { 0x6E389AEC5F51A22FL, 0x7EF68F1C54C127FBL, 0x986D4D46E0485C30L, 0xF0A47B39E7CF8A31L, 0x1D398DFDB7F2A78FL, 0x2FC651D1FBB10D2EL }, /*21*/
|
||||
new long[] { 0xA44E4E8D1B49DCB0L, 0x07A4822049C2F343L, 0xC40AC04A8D6505BAL, 0xD9B91D3F0729B16CL, 0xAAF39951B50F9015L, 0x966EF5D3AD3F9076L }, /*22*/
|
||||
new long[] { 0xEA78CBAC0EB6D009L, 0xA0FEA6725A23DEABL, 0xCE729C7444CB94D9L, 0x40A994626627AA0DL, 0x37F738CDE3D018D5L, 0x4C29491C01CDB3C5L }, /*23*/
|
||||
new long[] { 0x7C9792AEA745C87AL, 0xD1FF5620C5BD8FD4L, 0x9ECA84E3004B56B9L, 0x5AFD3923C228B1D6L, 0xE5DBF79EB3FD283BL, 0x441712E354084B9FL }, /*24*/
|
||||
new long[] { 0xE35D288BD8E249BCL, 0x91776C1453A366E5L, 0xF5D1E1684E95EFECL, 0x9108E117D7DDF606L, 0x81B30F9DA2CE7C8CL, 0x6497DBD786818C0DL }, /*25*/
|
||||
new long[] { 0xC2F891FF45044BE0L, 0x75A1A76D2B87E2EBL, 0x85CE65798AF3C2BFL, 0x213F532B4EFD09DCL, 0x0DAA1DF5A53A6C88L, 0x3028606A50D826B2L }, /*26*/
|
||||
new long[] { 0x609A62616379F33AL, 0xA339A3BC53E4516DL, 0xD7AD92616A5ADBECL, 0xD043726D86E924AAL, 0x8555B564F4C29865L, 0x56AA12AB31C1D6B0L }, /*27*/
|
||||
new long[] { 0xCED9ED85C1C17BFFL, 0xEB522325ACBAFFC2L, 0x04D3D8F4B2D15394L, 0xD271504C04756EEAL, 0x2DDBA4A91AF827F1L, 0x1F67D5C28F8002E4L }, /*28*/
|
||||
new long[] { 0x8B9C08AD432DC08FL, 0x5A7543E29796BBC7L, 0x34A6DB5B3C1967DEL, 0x016E3BC2A2804EE4L, 0x5B9BCACCE5172F75L, 0x7549598B80ADBDBAL }, /*29*/
|
||||
new long[] { 0x6F3FB117C5CDD155L, 0x16C3B0A59CD6EEC5L, 0xD9A1A411DE538769L, 0x938C54979F4AC37CL, 0x3737BCC1D55284DBL, 0x6CAD9F8AF9156BB7L }, /*2A*/
|
||||
new long[] { 0xEBBF284F9C75EBDFL, 0xB383EBB406753DE8L, 0xAA86127AEE7C403CL, 0x10BFDD10523DE027L, 0x138BF6C4EB4A8A13L, 0xB1EFF67DDB78B067L }, /*2B*/
|
||||
new long[] { 0xF6D1138D7AA3DA5EL, 0xBAA8098D8FB66371L, 0xDAE76D1B8B6CAAF2L, 0x400F1034368D1EDCL, 0x7C937F5172E8D277L, 0x7D05BBF83CADE6EFL }, /*2C*/
|
||||
new long[] { 0x0E9C2EA6CF34B081L, 0x9036B30D58F60BA0L, 0xDB3A2C5848F08BCAL, 0xC87AD1B94250D564L, 0x7C892E09EEF96166L, 0x26DB85CF571085F3L }, /*2D*/
|
||||
new long[] { 0x251EE3F58718C12AL, 0xF9438D81178A2AE4L, 0xF0929A889039A8A8L, 0xF06B65225EBDCCFDL, 0x2E4D14EDF7BF73C6L, 0xA9369895BC1DFACFL }, /*2E*/
|
||||
new long[] { 0xCAE302B41D6979CBL, 0xBBFA5A58B51EE623L, 0x5113B99DC81AB52FL, 0x6093795BEC17A056L, 0x8F71FB4D2E5E355EL, 0x762F92EDBA34A2F2L }, /*2F*/
|
||||
new long[] { 0xD130015265A4D9FFL, 0x09BEA253D71F26C8L, 0x81B6EAEDC46521E6L, 0xFAE268165682B8A9L, 0xA89C3EC4774AB623L, 0x0D2E45E055219DB2L }, /*30*/
|
||||
new long[] { 0x2B560284C3A692ABL, 0x37008AD0B379A7B8L, 0xAF11CD2C30F90BFCL, 0x7FE87A250F2762EDL, 0xC3FBD711647242C3L, 0x74ED8264F6B322BDL }, /*31*/
|
||||
new long[] { 0x28195CC8A7AD3943L, 0x53CBE808464C4FC4L, 0xD58E3D7A765F8726L, 0xD83052F60185AA4FL, 0xEFCB0D85223BB4E7L, 0x5A31305E787FAC28L }, /*32*/
|
||||
new long[] { 0x725D0EE230F19543L, 0x9091D2C6BDDF34E0L, 0xE3BE49C6C2754601L, 0x61BE300BA4AD566BL, 0x02D79D7551FA7CC1L, 0x6543910F5F1CDA58L }, /*33*/
|
||||
new long[] { 0x4099ADC44481B43FL, 0xFE1361922FD9EB81L, 0xA989C09E441FCEACL, 0x449B3A13D3CB9019L, 0x45A9BE396F201134L, 0xDC1AD05A046633FEL }, /*34*/
|
||||
new long[] { 0x1A563A6D522F3E69L, 0xBE589E079F475A9EL, 0x75A2A9638E4C0038L, 0xDA3B6202577A0362L, 0x211D3F1E0D727AF6L, 0x5E1FFC529AD99233L }, /*35*/
|
||||
new long[] { 0x47B61E86C6D6D01BL, 0x437D6F83ADADC318L, 0xD5A361028DED738CL, 0xA00D4C630425164BL, 0x1A69AFA5AF4C9DD2L, 0xF99E1C67F951B582L }, /*36*/
|
||||
new long[] { 0xA66A7740B6BDEA79L, 0xFEF7FF1496AF80A3L, 0x05AFD43EEACD898CL, 0xB00C78ED31AD7134L, 0x0ED31A1AD7846673L, 0x74B96844161499BEL }, /*37*/
|
||||
new long[] { 0x46FA8D6CCBF6D12EL, 0x31C2FC147F303956L, 0x707F4401DE5F067FL, 0x3AE5FEC7E33594E9L, 0x28E39F8A63531714L, 0xB7B329EA1E9FCAB2L }, /*38*/
|
||||
new long[] { 0xEFD8F755825C7804L, 0x1F5A93870BD30CD1L, 0xEFBF894671FF8716L, 0x28ED617FF22BDA58L, 0x411289CCAE5CB62EL, 0x95DD42F41801F2F9L }, /*39*/
|
||||
new long[] { 0xA8525B8645FC59E1L, 0x75E62DC00A5F7F0CL, 0x09C56785210416ACL, 0x50EF76E9B30D7626L, 0x2B3B2CDC19F5D665L, 0xA41297CD11D8F4FFL }, /*3A*/
|
||||
new long[] { 0xEAC99A649EEE5039L, 0xA593C92F143C0065L, 0xB314735203071206L, 0xEA2761A0C764A4ECL, 0x02AA7FD46CAC25B3L, 0xC68CC182A96D03BFL }, /*3B*/
|
||||
new long[] { 0xB2873F024EC83CA8L, 0x97470AB8FD8853EBL, 0x18FE15C159B305BDL, 0xB0AB08F687EAEAFDL, 0x510A3FDE73602E43L, 0x03E1B84DCCF0FCF0L }, /*3C*/
|
||||
new long[] { 0xD85BBBDC8033C0D8L, 0x9223D9C39CA9F34FL, 0x7D3BCB6D5B63C3FDL, 0x1C30F974DA0C0FB5L, 0x8B24BC9EBEFB5143L, 0xC58954925B7B84FCL }, /*3D*/
|
||||
new long[] { 0x6ABD7C2E0844D7A7L, 0xCCF2EA456CDF530DL, 0xE8938CF52B3921B8L, 0xBA023CA2F281657CL, 0xEC635DA675D1EDAEL, 0xB4AA52F22EE1BE6CL }, /*3E*/
|
||||
new long[] { 0x981C3AC677CB5904L, 0x6A92B54C84877B49L, 0x745BA6BB40C55815L, 0xB7AF550D22A371EDL, 0xD5E8BD87C65F5374L, 0x67874A37F0F538F5L }, /*3F*/
|
||||
new long[] { 0xC23BBA2A9DECC021L, 0x4E610E930B0E3450L, 0x1A681AA91477577EL, 0x38A3209714EDC376L, 0x0FD15563EEEB4AB6L, 0x7D57668A01D42178L }, /*40*/
|
||||
new long[] { 0x6AF88CE145A098B5L, 0x1AEB858CD88B8B46L, 0xE8B733AFB8E2D6E8L, 0x313FAA8C10A7EBFAL, 0x127D375E77557CEAL, 0x96BDA2F70B2F2155L }, /*41*/
|
||||
new long[] { 0xEC8903978FAFB636L, 0xC7213C425C079763L, 0x760384036AB6D17CL, 0xE0C63A26385F1F49L, 0x299877D6811A6DF5L, 0x876F90FC5304B88DL }, /*42*/
|
||||
new long[] { 0xA6FABBC2D6E0BA16L, 0x9B70C9640080E6BCL, 0x29B2D5265598B27BL, 0x4A9657C726E4397EL, 0xA801CCC6766678D5L, 0x800EF7CC72619998L }, /*43*/
|
||||
new long[] { 0x235931A8CF5490BFL, 0xE798F98E0E8F879FL, 0xC6EEE29C38F30CA7L, 0x929A79F2D53E0024L, 0x88F2E12749587A45L, 0x0B85B28F38891965L }, /*44*/
|
||||
new long[] { 0x165E0303E4A4D827L, 0x67994F42D1E8436AL, 0xE6CC8BCF6E130D1BL, 0x50101711709DDEFCL, 0x373BDEC40CD05328L, 0x40B274A4AA5109F6L }, /*45*/
|
||||
new long[] { 0xA9F88BA008FDF8C8L, 0xECC897E3476EE05AL, 0xBCE290AB69D57A74L, 0xFA44DB1811E3115DL, 0x6267AEFD64480C88L, 0x2697D04A2D3AECEBL }, /*46*/
|
||||
new long[] { 0xC0782AF2ABCD3313L, 0x02BA1290F2F96273L, 0x63C82F1A56ADC2B9L, 0x10F8E8C03EFE51C4L, 0xE3EB348625CCAFFDL, 0x93D607969CB8E7AEL }, /*47*/
|
||||
new long[] { 0xCC6E179443E58FBCL, 0xD21C93C655A7B8EEL, 0x2B9834A31F2B8BA4L, 0xC83B69516025ECEEL, 0x9176EB7B427AAE94L, 0x8CB65B9E30B7A76EL }, /*48*/
|
||||
new long[] { 0xC1A33A0AD6EDD989L, 0x18B3C5D95813B5F7L, 0xB024BD263B359A8BL, 0xC8C17C2216A99B50L, 0x71F9A11D58237729L, 0x3AA67C7618284290L }, /*49*/
|
||||
new long[] { 0x99B7465E09201C7BL, 0x9AF89FA01CA4FA81L, 0xFC2EC63E761AD123L, 0xE2A9A39585B17D14L, 0x08394DE529F94E81L, 0x479448E69794FAA4L }, /*4A*/
|
||||
new long[] { 0x23CA3D1C4CBDCABBL, 0xE3265436CE1A37E4L, 0x1BBF10F69E8A4CC9L, 0x05A66708048F5C4DL, 0xE259DCDD9C5BFEFEL, 0x439E65FAFD936EFDL }, /*4B*/
|
||||
new long[] { 0xA24D73B6978F719CL, 0x3F53F343CCB0BB8EL, 0xBE3C72769EE07C6AL, 0xFACB9E539CF558DDL, 0x67B91D4E30DE986AL, 0x1DB913D11698913AL }, /*4C*/
|
||||
new long[] { 0x98BD4E140DC3C3C6L, 0x142B1592BF3263E8L, 0xCDBEAC59ED095B0EL, 0x900763F0F625896AL, 0xE213550F30324E39L, 0x8A13A4417A803195L }, /*4D*/
|
||||
new long[] { 0x2ACD98ED8C626073L, 0x1CAAA6B4C4CF3238L, 0x04DCB41EB677EB5DL, 0xF88B5844A8105B68L, 0x981D9E951A061A4DL, 0xBC9471894C878EDBL }, /*4E*/
|
||||
new long[] { 0x4959FEAD5D6C2DBDL, 0x6ABD59E28C503049L, 0x06D2C5494CAF8B34L, 0x70E4541304A4293CL, 0x520F3416CAF2F503L, 0xB23D09D92613DB85L }, /*4F*/
|
||||
new long[] { 0x26B5A815C32D1791L, 0x2C99E7555BB033C6L, 0x09CE9D6A0002514FL, 0xD485282B2B8D7997L, 0x9C5B792F4A4A14C6L, 0x851D9D02DC0BB4E7L }, /*50*/
|
||||
new long[] { 0x62FEB6CACFB060ECL, 0x9D977D69D5C661EAL, 0xBF08EFD806D81556L, 0x25F1EEA460EA5718L, 0xA25346B51F5A9665L, 0xD92F9ADC358CA274L }, /*51*/
|
||||
new long[] { 0x27E63DFC63E8FFA6L, 0xCDB9CCE2CE99FDA3L, 0x979D5B754974830DL, 0x3298C8407D6693BEL, 0x629D5FADA39B42B7L, 0x2654D31271CD84E1L }, /*52*/
|
||||
new long[] { 0xAB1FA4DAF66E583CL, 0xEEB6B7A236D24766L, 0xA90738CDFDF5C6B3L, 0x28CBA9E5648E2D4CL, 0xFDE5BF6C0CFE0DA3L, 0x9D00B863D7D78485L }, /*53*/
|
||||
new long[] { 0x75FBBF094EEA16AAL, 0x48931F027CD729F2L, 0x5D360679009B2E7FL, 0xDDFCD148BD3DE21AL, 0x4DBFF544B094D0E1L, 0x9C0E5C6294352C22L }, /*54*/
|
||||
new long[] { 0x283A27FF968853D2L, 0xB0960C6CEA0D03F2L, 0x172BBA07A473DB38L, 0x688C87D296E6F4BBL, 0x5CB7E9BC5D68CF0FL, 0x57A5D71B0E47BFB4L }, /*55*/
|
||||
new long[] { 0xDE0108AAC1E4FF2FL, 0xD346CFABEAC62B99L, 0xB72E203F98B5F608L, 0x81853D8CA54B29BEL, 0xA6AED7C89FAA1680L, 0xD2093B155C39D7EDL }, /*56*/
|
||||
new long[] { 0x0BAEAC99D4974B84L, 0xC7F258A699C9B4DAL, 0x6F622C5E4ACCF5C1L, 0x58AB397D9781BEAAL, 0xBF811F67E101FFE3L, 0xAFBCC2881C3C0EF3L }, /*57*/
|
||||
new long[] { 0x26B211FB518D6C3EL, 0x64BADAD51A10784AL, 0xE6BE4E06A587186CL, 0xD471F5C61343CD5CL, 0x8389BB0DD6AAED5DL, 0xC88112678914A17DL }, /*58*/
|
||||
new long[] { 0x2B2D0BC3BB88D27DL, 0xC5A7D1FAFF517AD2L, 0x96F39056A09F82ADL, 0xFB38A61A6CED4D4EL, 0x9D308E4EA6F9B264L, 0x9097CE294AECC6B3L }, /*59*/
|
||||
new long[] { 0x8FCA2B950690B1A2L, 0x293EFCBF03D422DFL, 0x8C9125B3E76353ABL, 0x3D402092A1A70173L, 0x9BAB974CAB9BF676L, 0x5EA8FCC55D8C586EL }, /*5A*/
|
||||
new long[] { 0x408C92E8C2E1EC8CL, 0x4AF4C914B71B4350L, 0x5186AEE0CDFB1069L, 0x2385EAFAB9657C67L, 0xF708E4D3C898CA80L, 0x1EC8B9F89884907EL }, /*5B*/
|
||||
new long[] { 0x46E8958B6A2C1878L, 0x2172FD410F78A647L, 0x9D8E9DD83A299004L, 0x390913C3265AD025L, 0xD231F1E23077CBF1L, 0xE7EE3E574E80D7F3L }, /*5C*/
|
||||
new long[] { 0x5A8567A3D85E40B2L, 0x16ECF161133FCF73L, 0x52DA5C6FBA3C0DD7L, 0x56E57983DEB34BFBL, 0x83254FDCB768D153L, 0x9A14F95F35C6B82DL }, /*5D*/
|
||||
new long[] { 0x498A29C6E19D4AE6L, 0x2EF4AAF46027BA11L, 0xBDBA7DAA84F39505L, 0x940B2A04F6DC944DL, 0x4E7ED35610FC0D53L, 0xBADD94C2907E59E1L }, /*5E*/
|
||||
new long[] { 0x14DF0FC43F475F80L, 0x17E2AA8D264BF82FL, 0x92625BDFE58B934DL, 0x8384F415A4ACEA81L, 0x8E9C5EAEC5D8642BL, 0x4D8EF55F1C826687L }, /*5F*/
|
||||
new long[] { 0x4A2335C4F77128D9L, 0x544E1476D29ABA94L, 0x654EC86321785044L, 0xB04AD9B02F80445AL, 0xB0E01B6480C8D020L, 0x596E325E88A3CBBFL }, /*60*/
|
||||
new long[] { 0x896955157448D062L, 0x0DB08C4C0F236D68L, 0x3BA8FC5B3CD1C4A2L, 0x04F57C53E144535BL, 0xB7D04DCC7BE46840L, 0x4BBE993192334646L }, /*61*/
|
||||
new long[] { 0x1D7837E6AB02CE27L, 0x3EA35BAED4493EA4L, 0xD1CAFDB5DF94FABEL, 0x98B580BB62170C4FL, 0xC3C57A6CA9421C43L, 0x68D65FC2C1201634L }, /*62*/
|
||||
new long[] { 0xFAEABABC48717536L, 0x454251E8F62F7315L, 0xB318E8A7FDCDC523L, 0x7C2E832013C91344L, 0x4D9E5DAFD1699052L, 0x12262E8C870537A7L }, /*63*/
|
||||
new long[] { 0x8A3E5D0BEF8402A2L, 0xA33BC5FAFA019909L, 0x63CBE8ACD00762F5L, 0xEA26A3F181984178L, 0x6EEB78D1BB4AF6BBL, 0x7ECF9671300E845FL }, /*64*/
|
||||
new long[] { 0x0811B67CCCF5D0FCL, 0x9F8CAB3F3496BD6BL, 0x57CB7D24F1355C2DL, 0x58218594165BDE80L, 0xFAF3368A653A78F8L, 0xC04CD80176267762L }, /*65*/
|
||||
new long[] { 0xE6417CE75AAA23B0L, 0x34A7BFE3CBA61761L, 0x8C13E396F8C9B6EDL, 0x5C9066464B09ED63L, 0x76CB6A642C5CE283L, 0x498E082A3EB449C6L }, /*66*/
|
||||
new long[] { 0x6F2ADEA6357B5AA0L, 0x54DA382B15557B69L, 0x302BD81946237AAEL, 0x8F0CBB82111EFEDCL, 0x45DD2DADCE20F2D3L, 0x8A77A5E9E8A2D1D8L }, /*67*/
|
||||
new long[] { 0xE1EC332735862A28L, 0x92B68B1A7E9C7C44L, 0xF45618DC99E963E3L, 0x7CAC984502DD1A73L, 0xC8650598CD70840DL, 0x9A5DA584A26D4EFDL }, /*68*/
|
||||
new long[] { 0x16B19B010740C15CL, 0xB4544AC01016439AL, 0x221F749C9E2F99A5L, 0xA63E8A279A65570FL, 0xC7231669ADD072ADL, 0xC5BC35BA740BC801L }, /*69*/
|
||||
new long[] { 0x6C44E75A4F378694L, 0xD27ACE108A577647L, 0x17C487FAFA7E15D6L, 0x6A3654D5C8E29EDFL, 0x0CE35EEDCC611FFAL, 0xD88A8C03C0095093L }, /*6A*/
|
||||
new long[] { 0xCF106948BC4B1F2CL, 0x91C0DC9990B99712L, 0x193B21E3E109AB32L, 0x3340DE0608DD1666L, 0x8A5BB677BF602828L, 0x402C410B1197B771L }, /*6B*/
|
||||
new long[] { 0xEB080FF49CA5543EL, 0xB4B9429542D6CA27L, 0x5999D45DC1533205L, 0xF7EA9E398A1BEF3EL, 0xBE8817775476DEC6L, 0x17064D7790C84100L }, /*6C*/
|
||||
new long[] { 0xF3328E9150A7F8D6L, 0x52E3E61B04ACFDF8L, 0x51D82010F3CEB015L, 0x59D673336676D5D8L, 0x4CB3BCEF1D91C342L, 0x0C589AB58033BE49L }, /*6D*/
|
||||
new long[] { 0x54B8E70EDCE03855L, 0x7BB590E99687FD57L, 0x6CFF08688D2B1FDDL, 0xFD0F6D068BFE994FL, 0xEB9BCE302489AE44L, 0x66B21F200661E3E4L }, /*6E*/
|
||||
new long[] { 0x2F5E0060189669ADL, 0x473AF1D03C00CAE4L, 0x0278299268D1F3B4L, 0x888714BC3A7EC9D2L, 0x9FF9C7F071EBD2D9L, 0x875A5DC25DFFDB10L }, /*6F*/
|
||||
new long[] { 0xE2A97A3E468399D8L, 0x3BF7EACA32C80DA1L, 0x13DCAC8EB6C2231DL, 0x227EC90E1102EE97L, 0xB2344832F0381434L, 0x8613888303B190EBL }, /*70*/
|
||||
new long[] { 0x3A3D3B6CE026BFFEL, 0x18D4953B9A68ED59L, 0x24BB7B574AB777A0L, 0xE0CB7DD64983DCB1L, 0xCF768C439869AC97L, 0x8062BC7A900E6033L }, /*71*/
|
||||
new long[] { 0x39D4C3B78A7A33C7L, 0x43D72EF22AB0B4EBL, 0x54AE8184DDA50394L, 0x0C2A7DA083C38536L, 0x9DBC6F921D4AD822L, 0x2CBB61FE182EAA42L }, /*72*/
|
||||
new long[] { 0xD8CE9A806C0BD24DL, 0xF69D65A65845727CL, 0xC3FF81CC76F2B048L, 0x76B1FDC3CA67CE58L, 0xCED0970AFBCBE78AL, 0x57502941B726F5F3L }, /*73*/
|
||||
new long[] { 0xE006AEC17FCEFCF9L, 0x05CAA1629E003591L, 0xB7050CC99F585312L, 0x669260401E159490L, 0x8442D25AA757CC5AL, 0x228655CD4038770CL }, /*74*/
|
||||
new long[] { 0x93EE8D67D3F1F3A1L, 0xBEA46D48DBF8D7F4L, 0x3C91F02B8646453CL, 0x6C3D7C1F04188A58L, 0xEFA97287F89CEF84L, 0xCB40364E108BFF4BL }, /*75*/
|
||||
new long[] { 0xC6DCE3730D4FF825L, 0x02AF54F87D972790L, 0x7D69D20F6F4F788FL, 0x90C255C64C166E8FL, 0xA3529FBF4BF9C9A2L, 0x3ECEC41136694F6BL }, /*76*/
|
||||
new long[] { 0x3DE10A5EC6CA7B3FL, 0x7E196081D085ACAAL, 0xDF5F0DE3705D60F7L, 0x393E7C83DCC57075L, 0xA5F33BC2DCB98F97L, 0x0AEB7F050D1204C0L }, /*77*/
|
||||
new long[] { 0x6F3B3B3D11A8BC05L, 0xB52269AB2B95B8DCL, 0x12EDE24EB1385F13L, 0x202BBA6B5836B5E1L, 0xEE3636C5925ACC49L, 0x42224CF6EEB509BFL }, /*78*/
|
||||
new long[] { 0x5F0CC3BBC4BE9A92L, 0x584313FCCC54DD2EL, 0xC11FE90F00394036L, 0x3371667C72FC9723L, 0x9611990B62AC8D9FL, 0x4CFCB9EB3C317FADL }, /*79*/
|
||||
new long[] { 0xCA8E520A894A3FBAL, 0xBD9ED1B80098CC40L, 0xBDF24507DFF3757CL, 0x47AEC572E68D35ECL, 0xF3D4523D27B373E4L, 0x1AB11E16973A05ABL }, /*7A*/
|
||||
new long[] { 0xFFC293A6C26B817DL, 0x2C9E9D134959D828L, 0x7FA5216408199BBFL, 0xA6F002DE0DCCD861L, 0xBE8F9DC57F2CF35DL, 0x1352E2DF86A47647L }, /*7B*/
|
||||
new long[] { 0x84B55BE101708E74L, 0x3ADEC53721209F3EL, 0xB18F9A1E68DFADBDL, 0x09A050819774CF2DL, 0xE4AB295D380A8762L, 0xA3605B0C689C239FL }, /*7C*/
|
||||
new long[] { 0xDDC7031FBFDFFE8FL, 0x0B175DE65B832F0AL, 0x31162ABC65719685L, 0x51215E534BBC36B1L, 0x9F2F7D3B5D01AE44L, 0xCF43A2426E83B61BL }, /*7D*/
|
||||
new long[] { 0x7E32DB672B16F04AL, 0xCE6F45DE0E6AB788L, 0x25718548B8E70B41L, 0xD7368BCF39A0FAC4L, 0x956863EC49880C47L, 0x720E335796341674L }, /*7E*/
|
||||
new long[] { 0x06707A8E33D9D6C6L, 0xB684BFE26CD576C6L, 0x44F47E5ECD5FC46CL, 0xAF1B23A856D844B7L, 0x98A627916AC5657EL, 0x040C3964A1127E19L }, /*7F*/
|
||||
new long[] { 0xA5DAEC3134C0A39BL, 0x0CA04160BD5ADB1FL, 0xB50EC5A9F29E1ACBL, 0xBE2FA1126AF7BFAFL, 0xBEFC0AC4C9C5A4B3L, 0x994739C71FB1EB29L }, /*80*/
|
||||
new long[] { 0x6FEC2D343E83A763L, 0x5BDBA5715757F50CL, 0xD6F6282EE46A11B3L, 0xA8B501F5922A5524L, 0xA782A21006B605CAL, 0xA10BD2E896975C81L }, /*81*/
|
||||
new long[] { 0xB8AAE0532226D0EDL, 0x891831C0470E84B7L, 0x74C824D648E8FF28L, 0xB5E4E02EAD3906EBL, 0x5ABB086ADA60A713L, 0xA80C57666A9E29F1L }, /*82*/
|
||||
new long[] { 0x529E3E52B1E7230AL, 0x0C148861C9F08E26L, 0x0CFC8A131BAD803DL, 0x8C09F324902FAA9FL, 0x0231EE4987999848L, 0x3B0688492E2B5457L }, /*83*/
|
||||
new long[] { 0xEFA6EAC5036814CDL, 0x02773C1F8DAA5DF5L, 0x0E4EEDBD0702DE31L, 0xBA7FD757D0D740EFL, 0xA8805F0C74005F8BL, 0x1448467BFF3E1EF8L }, /*84*/
|
||||
new long[] { 0x2A07B766016AC70DL, 0x64215C35364219E9L, 0xCD6F7EFE35FCF6F1L, 0xF05CC06084C29267L, 0xAB3BF2F32579A444L, 0xAC75F42D9A25B9C9L }, /*85*/
|
||||
new long[] { 0xEF3A14B5EDDB8464L, 0x2314E0802D2DD0E9L, 0x14DEAEA9F928762AL, 0x5763EBB480E15A02L, 0x25F7CA14E8CDF5E6L, 0x8E594510DC61E6BCL }, /*86*/
|
||||
new long[] { 0xE62C38DCFD21000BL, 0x7BB32AE917EE3DA7L, 0xE49F15E24CC9B656L, 0x56E28259DCA361D8L, 0xB43B8008A9285F48L, 0x0DC6B4AF7E4AE61BL }, /*87*/
|
||||
new long[] { 0x703C64241142DCAEL, 0x732D33342C45063AL, 0x37877EA1624567CBL, 0x2871D534614DD114L, 0xE748092A1D94F5D1L, 0x4524056F0C6D1CB7L }, /*88*/
|
||||
new long[] { 0xE325B1823A595DF9L, 0x742D0DD5C96F397CL, 0x44361C9540A9F451L, 0x02382F9BF6331FB9L, 0x8ECBAFBBE91A0467L, 0x528EBF3811F904A8L }, /*89*/
|
||||
new long[] { 0xFD2BC6534631FB0DL, 0x27A5F036FEEB9A6CL, 0xD0F876D7911D0775L, 0x12EFB3A29C6E0B72L, 0xDC4BCA3D5E871DA1L, 0x028FB6E6E608F46FL }, /*8A*/
|
||||
new long[] { 0xEF17ECC8930A7B4AL, 0x9D97B34672FB273DL, 0xC6AE835F35A25D8FL, 0x6C27469530C21F5BL, 0x2FBC16A26150E795L, 0x02AD93AAE0B5C71AL }, /*8B*/
|
||||
new long[] { 0x6D24BE43CF07DD56L, 0x63681D62A38D2A2FL, 0x9872C9B411724AA0L, 0xB882B4857C19690AL, 0x87B1BA8D2804C6F4L, 0xD7B199CC36F40B49L }, /*8C*/
|
||||
new long[] { 0xEEFB8D8573FD9E0FL, 0x933403199B91560AL, 0xFF0DB41665D5248CL, 0x322EE105EA984196L, 0xDB8CE0F83890D89BL, 0x3A32F8983C901F80L }, /*8D*/
|
||||
new long[] { 0x082CDAF93F215BACL, 0x67C118A1B9274FACL, 0xAF74501CFB93198AL, 0x53525CABA0E812D3L, 0xC9AF3A005EFE8A6EL, 0xF242DCB60DA7B2FEL }, /*8E*/
|
||||
new long[] { 0xD3887FBFBB7314DFL, 0xDDDCCCF0F720C342L, 0xB2C4331C33C8C415L, 0x1666010767F4785BL, 0x8455B7C1FD5DE487L, 0xA821C5EA181875F2L }, /*8F*/
|
||||
new long[] { 0x7E289831418562F0L, 0x2AD12E3042B185C3L, 0x7C20D0D735A6AE96L, 0xA68BEF98E22CBD41L, 0xA1411D22F8D93243L, 0xD813FB404F3D2F38L }, /*90*/
|
||||
new long[] { 0xE13FC0A76F664294L, 0x7E21C9D9F7FDDDCBL, 0x161E68B366D6B1F8L, 0x55BF957EB5743874L, 0xB23213EF8364D766L, 0x529BB98AF96643D4L }, /*91*/
|
||||
new long[] { 0x036D7ADDAADB5C33L, 0x0525835F802D032EL, 0x7DF7D0D8D7A2BEF2L, 0x84927644B27696B7L, 0x215E21E4D1F9B5B9L, 0x77743669C40EB7FDL }, /*92*/
|
||||
new long[] { 0xA9B3534BE8897784L, 0x5BFD4283541A5090L, 0x97AFFCCD121C9778L, 0xC146C4C9637989C7L, 0x0820E72FCBDA59C7L, 0x5526E2F4A0AE4F4FL }, /*93*/
|
||||
new long[] { 0xA4739E20FD72BDC2L, 0x6D6EE5A5C1A54CA6L, 0x70A97A6FCB884E5CL, 0x2B6108339E979C48L, 0x93A63730D6BB23A7L, 0x5B1DCEAB00045EE5L }, /*94*/
|
||||
new long[] { 0x427C14E4F88C8BDBL, 0x1D8630868E039BC2L, 0x33DB40A251502D1BL, 0xE043C9CCB45D2B3DL, 0x292B67B6EE077B2DL, 0x1C3A2FBDE24C742AL }, /*95*/
|
||||
new long[] { 0x3DED69F37016D86AL, 0x9A947B13AC66D7C3L, 0x822D8645DF4CB39CL, 0x2BA20F98F19E10DAL, 0x6703138D422AC4C4L, 0x8D34D6138FA04A1DL }, /*96*/
|
||||
new long[] { 0x28E59C8B257D112CL, 0x8747068CC5499FCFL, 0xD6C16EB780F9191AL, 0xB416151633F7AF08L, 0xA230E00D6BA1A1C3L, 0xFD066FB9965B83D2L }, /*97*/
|
||||
new long[] { 0x70F4BC1B7F8FFC37L, 0x38DC0331E56B0FDCL, 0xA9AB7290AD2B0BBDL, 0xB307973C3D0783C6L, 0xBDC455F6CDCA111FL, 0x23F0E08317B8F0DCL }, /*98*/
|
||||
new long[] { 0x0AEEC24E9285C50FL, 0x3BCDA47833B61ACEL, 0x839986F959EE0723L, 0xC959034A8D7F5EB9L, 0xD4AD7E05B05C4FB5L, 0x6C37A3D39F7A0EC4L }, /*99*/
|
||||
new long[] { 0x0227B7230FBF2D07L, 0x28D7D2AD632BED47L, 0x07BD8F8B5012EFD0L, 0x48A0D43AE0403442L, 0x9B8939207F1449A1L, 0x351EAD01B9FDF219L }, /*9A*/
|
||||
new long[] { 0xA7119D2E311CEF25L, 0x1E532CD0C4ED0479L, 0x2272F878D8D30A0BL, 0x769C412CED9C4C42L, 0x262FFBFA65CBDDF5L, 0xDB73D86721EA368EL }, /*9B*/
|
||||
new long[] { 0x4BDBE90B3FBADCB2L, 0x1324EC3A8D6FEA57L, 0x6D9EFBE530850D00L, 0x401A88AFF8A4C8F4L, 0x655CB76B8A2E271CL, 0x35505B6DBDE16F43L }, /*9C*/
|
||||
new long[] { 0x6E15E57E23F57037L, 0x4962737362C1FA26L, 0xC962372D1829B80BL, 0xA1FE6832EA4D6211L, 0x6726E307F96E7763L, 0x04C761081677505BL }, /*9D*/
|
||||
new long[] { 0x42E2FF3A8A6FC164L, 0xFB85B2BC9D28B268L, 0xC559CFF024533A28L, 0x2EC83F3911DAB3CEL, 0xAE0FC74A9D736A27L, 0xDB9CDD048BAB4CCFL }, /*9E*/
|
||||
new long[] { 0xD79C52221D20E765L, 0x499EDD73903CE704L, 0x9B016D987DF48349L, 0xFCFAB44AD12FC5C1L, 0x811293F3B800FDF9L, 0x511DC619CA53CEBEL }, /*9F*/
|
||||
new long[] { 0xA059EE78B826EDDFL, 0x4673AF294D17C85AL, 0x5E527D4E4DF282B5L, 0xDB5B9A2693F95CE3L, 0x6551D304FB54F296L, 0xAB3EB70D65912FCCL }, /*A0*/
|
||||
new long[] { 0x7D0C4F67B6C78135L, 0x390CAEA7DE304D37L, 0x49E19FABC8D494FEL, 0x1A9E1B6437A04516L, 0x886CC4BDAB6AF35AL, 0x0529217344F502FEL }, /*A1*/
|
||||
new long[] { 0x3CEDF34141B52CEEL, 0x8133BA924753573FL, 0xCB32BE22BC66025AL, 0x0C480183DE403CB3L, 0xBF5B84B427DFCF31L, 0x7251428DB0232156L }, /*A2*/
|
||||
new long[] { 0x86FCE831C58E25CBL, 0x5CC43FFE45CBFC75L, 0x33877CC042F199BEL, 0x1212FA7F0CC22E1CL, 0x448EAB4B7D1F9823L, 0xA7B1363A9FA7599EL }, /*A3*/
|
||||
new long[] { 0x2D8C2FEDA0E5106DL, 0x192E366838BBEB3FL, 0x36226AA60ACEA0AFL, 0xE7E1285DC1F3926AL, 0x900371FA1883D9ECL, 0xBAC33B1AF360EB66L }, /*A4*/
|
||||
new long[] { 0xD4A2A11612BDE0E3L, 0x82AB0DA614CB4CB8L, 0x189A4D50AC01F4C6L, 0xE36A5DA1D9F6A647L, 0xE43120D6B16B11B6L, 0x7D395F4236E75378L }, /*A5*/
|
||||
new long[] { 0xC0C155CD47F3877FL, 0x4B03BFE5C334CA71L, 0x77710F1F4B844FF7L, 0x3443BBAB720E8DC5L, 0xF03F8868C5863406L, 0x0FD60511C872EB50L }, /*A6*/
|
||||
new long[] { 0x8C253DAAB5286306L, 0x9AA438F54A6196ACL, 0x181D08C723A22C5EL, 0x633C49C88E3910A1L, 0xC9F54A67992675B0L, 0x1FDD98ACBD38D976L }, /*A7*/
|
||||
new long[] { 0xA10893DA7575A9F7L, 0x8F5F4A025AB2A018L, 0xD80538F0336BFFC0L, 0x0F9751D33889626FL, 0x30383EB925BF911AL, 0xE6149F68CE19CC60L }, /*A8*/
|
||||
new long[] { 0xB9081DBAC6BE0598L, 0x785DD9BC69C71492L, 0x8B035A0CA56E172BL, 0x8946783500724888L, 0xAF1E57C958650569L, 0xE1DE4E944FF22261L }, /*A9*/
|
||||
new long[] { 0xEA5EDC4D2718C0D2L, 0xCB1C5D4DA15A8AE4L, 0xC6272382F8163015L, 0x94A934E5057B54CEL, 0x658E481A3D68D10DL, 0xE8F24929E50A46A0L }, /*AA*/
|
||||
new long[] { 0x7DF146281AF482CDL, 0x014B68E726407B06L, 0x6CE564938C70DDBCL, 0x36DAD2DE72A5DAA2L, 0x6D573BF69C0B2980L, 0x684DAB14B4AA0329L }, /*AB*/
|
||||
new long[] { 0x9C69DC064E738B5FL, 0x83CC16BD5A1C36F5L, 0xA99B365E6E141B12L, 0x2748FA5AD0FACCE8L, 0x26D073A047D99C49L, 0xB005B182505B0C0CL }, /*AC*/
|
||||
new long[] { 0x15B6A2A20ED0FD1CL, 0x9333AF729BD65A25L, 0x22CC333293BD2C1BL, 0xD724D949B15E8BE1L, 0x69D0DB0512B97117L, 0x85ACA8980DD7653CL }, /*AD*/
|
||||
new long[] { 0x230EC629D77BB3F2L, 0x43115B991D297CB2L, 0xA2F955792C53C76FL, 0x48A76728EBE25BA7L, 0x7CE662A405384400L, 0xDDC06B7E6BF49D66L }, /*AE*/
|
||||
new long[] { 0x20DDB9BD7644410BL, 0x056391B1FA2E8C06L, 0xCA4EDE51CF167C00L, 0x46602B550536F870L, 0x5040672597C21FF4L, 0x0AF8EC6E8AFB844BL }, /*AF*/
|
||||
new long[] { 0x0023C5749251B883L, 0x335A4F86D66B7E00L, 0xAE353DED3EFACE8FL, 0x3FC80526D67B35DEL, 0x0D9078FBDA80BC53L, 0x467900DFF3FE4C14L }, /*B0*/
|
||||
new long[] { 0x0F9CB2BE6A448113L, 0xE38D541B6A9A5829L, 0x673953DAF354FC0EL, 0x3C818A277F8569E9L, 0x8D16EA77DB122A3BL, 0xE40A860318B6EA84L }, /*B1*/
|
||||
new long[] { 0x78CE11F42D7D5E50L, 0x84F76DFF199C998DL, 0x999B578E3AE935CBL, 0xD9FD092C1BE63212L, 0x31F33C63ACD316D8L, 0x5AA08030B8D65C0CL }, /*B2*/
|
||||
new long[] { 0x0098DBE19CA84FE9L, 0xE2426617D1142137L, 0x63C3C4166A78E21BL, 0x74B145353E03B0E4L, 0xF43C0824EAE508C4L, 0x58C1E6622528602AL }, /*B3*/
|
||||
new long[] { 0x9E27EBE6D1426A6FL, 0x2A6A600A6B5FA342L, 0x8FF7E2306BA90370L, 0xDF83D91A683EDDDDL, 0x29572442F0225388L, 0xE9CC0F1B6437320AL }, /*B4*/
|
||||
new long[] { 0x054DF380E896064EL, 0xFAB81A4AA3AD88A4L, 0xF87426486CCA156FL, 0xBB1B3C8237472960L, 0x7EC0B87CF73F960AL, 0x5C57D7E6470F7808L }, /*B5*/
|
||||
new long[] { 0x5758E103AC614A1AL, 0x766AEE86F81358DFL, 0x203FBA51DC74396AL, 0x78C93DF969C5721FL, 0xE69E32E230196597L, 0xE287C6CECD8AB95BL }, /*B6*/
|
||||
new long[] { 0x2A06A7C10C0DCC97L, 0x99D5298268A6745FL, 0xF2D818BB774858B3L, 0xD52A820D4F64D886L, 0x2F808EF87A263981L, 0xBB91206E6347C676L }, /*B7*/
|
||||
new long[] { 0x0847C6D71CE0C746L, 0x86FD451B447C1E11L, 0xC20623B0E2856FCCL, 0x3ADDFA2D0398181EL, 0x6736A0A06B336B46L, 0xD1C70AEEB2B1257DL }, /*B8*/
|
||||
new long[] { 0x5633260D141A9776L, 0xD530805F596CA3DBL, 0x8CE33EF69437CE46L, 0xF62D54E97E747088L, 0xDF5C9318489B45EAL, 0xA4AAD29F0BA850CAL }, /*B9*/
|
||||
new long[] { 0xBDBD7B16767F6D9FL, 0xF7968427F1B7B6DDL, 0x58C76599B35276EEL, 0x286F4C7F6CADD791L, 0x8188C0401742117BL, 0xCEC4F1964266D163L }, /*BA*/
|
||||
new long[] { 0x97E4E8A6B5135B24L, 0x8A8BD785E5297977L, 0x4545C1A0975BC5BBL, 0x13FAE3BD9F59E37DL, 0xAFD5627C0E91DE2BL, 0xA223AC778474E1A9L }, /*BB*/
|
||||
new long[] { 0xDE1BF1EAF86C6B3BL, 0xA246A3ACD50035FEL, 0x6F80179DD96A21CDL, 0x3F8DB7CB17300D03L, 0x497A798B5D94506CL, 0xAD52DCC6F61AE841L }, /*BC*/
|
||||
new long[] { 0xF4A4E1D08E1F440BL, 0x5E27633CD56422E0L, 0x1465C14F1DB41420L, 0x9A939043988D37C2L, 0xCBE65CFA245DB368L, 0x6340AEDE28DDA855L }, /*BD*/
|
||||
new long[] { 0x1F7AB65A3F892454L, 0xD70AB4167EBEB5A1L, 0x9B2631E824C2028DL, 0xD5D97BDEE31519BCL, 0xEA2DC77449E4058CL, 0xEB204F2D6D2FBAFFL }, /*BE*/
|
||||
new long[] { 0x6537E69171A2665DL, 0x3FD2F835435A3F23L, 0xADD5DD3E622D6C8AL, 0xC522CDD5E5E243F8L, 0x5AEC27F3DBFDA8A2L, 0x477A65ED570E1445L }, /*BF*/
|
||||
new long[] { 0x3BA7CB01D32E9D63L, 0x9E335734E7B5416BL, 0x0ED96A84F94539F6L, 0x45CEE2E46DF5A70DL, 0xDE142EE1E9AFEC1CL, 0x78D6121C4FDC72DDL }, /*C0*/
|
||||
new long[] { 0x7BB30AF653390B77L, 0x2D394F2B7F8F7BB6L, 0x0277A3C213AF3489L, 0x7DF6E674DD56D084L, 0x5643CD3073C42451L, 0xFAB15F8BD1A1DC18L }, /*C1*/
|
||||
new long[] { 0x42B453ABF5150D8BL, 0x913F109C1188E18CL, 0xC27BB7631FB43BF9L, 0xEBDDE685EF108419L, 0x76D67C87C56D33EAL, 0x95EC73C0AF40F084L }, /*C2*/
|
||||
new long[] { 0xBCE43D59A1F50BFBL, 0xBA7027CA04D84600L, 0xFB6FDB98A2BE644BL, 0xD5DE777E993DED4AL, 0xFCA39F1EDF710F3AL, 0xA5E5893C858D8841L }, /*C3*/
|
||||
new long[] { 0xC68AC776E6AEACFCL, 0x538067C7866106EBL, 0xD27B4A352F4EFDE3L, 0x847DA2B3BF01E378L, 0x3C79E3C136926D58L, 0xF957BC8726AA1610L }, /*C4*/
|
||||
new long[] { 0x95492C4203C7C612L, 0x0DD60DB1EE8321FCL, 0xE1D9EBA902F62B42L, 0xEA2DBF7D0E37A4F2L, 0xE11FB9098BF5DA48L, 0xDBFE213F818EA338L }, /*C5*/
|
||||
new long[] { 0x17CB21316D4756DDL, 0xB88952498140146AL, 0x648112F580844288L, 0x4947ADC3F7D58F35L, 0x651CCE28E26A5377L, 0x0B3803DAF337F89BL }, /*C6*/
|
||||
new long[] { 0xBEAB16E2DCE6B6E3L, 0x8F39ECC8E39172DFL, 0x607CC9553FF29C0EL, 0x4BFD15154F4F0BA7L, 0xEE6230B6BD408CE4L, 0x35B654110D164E99L }, /*C7*/
|
||||
new long[] { 0xADDDFF1BD2C11CD4L, 0x2A1A262CBA6E1AA0L, 0x0BF2291D09475A46L, 0x4C93A0ABADF4DE32L, 0x73EE8E1327333E63L, 0xF3AE2031F5D13B28L }, /*C8*/
|
||||
new long[] { 0x246C7CABB2D9A55CL, 0x50E9C7282C1EE0F6L, 0x2FBDA09565A0D3D7L, 0x196552679C04A4EBL, 0x137C66DA29A6DD82L, 0x08A76B6B4BDA56BFL }, /*C9*/
|
||||
new long[] { 0x7CA3C59BE3E28610L, 0x6ADD75CF1F7AE248L, 0x01747450737A6435L, 0xA1F2259CB2B4923BL, 0xE0C8F55E8ECE7210L, 0xD7964398F350B69BL }, /*CA*/
|
||||
new long[] { 0xE045864ED1825101L, 0xAC54969193E1A1C5L, 0x23D85A934D0794C7L, 0xB4FA88CB734A4213L, 0x7C5CBFD6BDA3D5F9L, 0x66607FE938748825L }, /*CB*/
|
||||
new long[] { 0xBAF36FD2A180D481L, 0xEAC440AC1B9598F7L, 0x9AA24D80FFB7B06CL, 0x79601F517358F163L, 0xD1071831418BB63BL, 0x819609A6AE7D3A03L }, /*CC*/
|
||||
new long[] { 0x3E9152D8CDBAE551L, 0x86AD793F203DD016L, 0xBE3AEB778AD4A891L, 0x2810254DD76B6618L, 0x9B5DCDE36636C327L, 0x0A8AAD65868BC58CL }, /*CD*/
|
||||
new long[] { 0x6D0672780D93152AL, 0xEEE705247B828091L, 0x9EBDB976F137463FL, 0xA7DE3E73A2D0C1BFL, 0xF871A00BA0046AC7L, 0x484C96A803F23486L }, /*CE*/
|
||||
new long[] { 0x0FC7BCDABB06BFFBL, 0xF75C3FFB3D6309B3L, 0xECA305D103109162L, 0x373F503B204FFF61L, 0xCE332C9F54963FA2L, 0x9A4420A52242CDB4L }, /*CF*/
|
||||
new long[] { 0xC71D481179D198C1L, 0x505A2845CEE92569L, 0xF339BFF6DD6755B5L, 0x8BEAD52B8DE89245L, 0x4B686E65920DCA2BL, 0x99593FA43EE68A37L }, /*D0*/
|
||||
new long[] { 0xD90A68D717E61501L, 0x9BB920AEA19161A6L, 0x2F3D6F96D90EB1E4L, 0xDF15ECBA10513D7DL, 0xE6E5D539B4F01831L, 0xC7D17A7528FECE36L }, /*D1*/
|
||||
new long[] { 0xA04FF0BEB4EBFBAFL, 0xE5E90A5B3DDAA3CAL, 0x8453542209F4A145L, 0x80A6FFD72BB5A707L, 0x14E0C4705A1ABF6AL, 0xD699EC1FC18A677DL }, /*D2*/
|
||||
new long[] { 0x7021A124E3181575L, 0xDC7AAE2817AD945FL, 0x8BB5521E7F0D565AL, 0x6671D3792F0805EEL, 0xD3888EA394413A1AL, 0xCE4D7E47B55BF9CCL }, /*D3*/
|
||||
new long[] { 0x22F440263CAADE68L, 0xE77BB287772EAC7BL, 0x29493775962A40E9L, 0x1E06A27FA68CB91BL, 0xDDEF02932ABDB9C7L, 0x79F03B88DC175233L }, /*D4*/
|
||||
new long[] { 0x65F6D517B53E2391L, 0x97DB65A2F00B1C39L, 0x1D77AE9B85AA4855L, 0x19133B9B3E9B0771L, 0x6376D9F11A7DB3D4L, 0x949AD02F5AE16184L }, /*D5*/
|
||||
new long[] { 0xFE4434CDE09D923BL, 0x03B0FCFD713B7052L, 0x2D713290D4A67238L, 0x2B56946FF629EE96L, 0x60A15D01B2B3C428L, 0x0B1D5EAF793933A0L }, /*D6*/
|
||||
new long[] { 0xBC40FCFB0E0D494BL, 0xA31C4648C7B3D1DEL, 0xF1113C219A07EC8DL, 0x2378BEB1A5C2BD1CL, 0x190CC3478070A194L, 0x63DAB6E1CCF56329L }, /*D7*/
|
||||
new long[] { 0x901B6B9E82BABF91L, 0x872A234C45D61001L, 0x6CA46A95C1CC6D6CL, 0x22779315E0F02295L, 0x60A59396346BE6ACL, 0xFB67A503CB488846L }, /*D8*/
|
||||
new long[] { 0x50D440F74C97660BL, 0xE71ECABF64EDFE0CL, 0x80201B895718CE22L, 0xA05D89804D35D306L, 0x8F700402A2B0D086L, 0x326FCB334CA4DFC0L }, /*D9*/
|
||||
new long[] { 0xBCFBD02EA005CDD5L, 0xF0225A4675553115L, 0x08E18B3692A7AF62L, 0x05D34A820C8CED0AL, 0x51A8D7CEC33E80EAL, 0x0AC007503FAE879CL }, /*DA*/
|
||||
new long[] { 0xF43EEFB5C83C521AL, 0xE5E9B05FC48841ACL, 0x79C52C38BF85B5F9L, 0x26CD0818AE3BF7A9L, 0x4F385C32CA8F5F74L, 0xF17B22107B954752L }, /*DB*/
|
||||
new long[] { 0x1A48FC969198A4B0L, 0xD9A78940BB0C4E1CL, 0x42781D9BE60E7691L, 0x87D1CAF3680F8A30L, 0xD09FF193606AAF29L, 0x4518DABC60048793L }, /*DC*/
|
||||
new long[] { 0xF05D48134A56A034L, 0x89A65EEB91DC69B9L, 0x8FC7F43960E63C62L, 0xFA1C6B9FF9415E92L, 0x7E219D4E56347935L, 0x2B6A48D6DE0AEF85L }, /*DD*/
|
||||
new long[] { 0x1A7FF9C54B045FFDL, 0x44A0A9562E9468B2L, 0xF11425A22D1EBF92L, 0x208D33120BD28E0EL, 0xF2D74197AF80E162L, 0xCEEDCA73DFE66C93L }, /*DE*/
|
||||
new long[] { 0xD57190439D29C9A4L, 0x44C007DC2B5EAF9DL, 0xEF6DDF48A780CEDCL, 0x61B205E4A96024B1L, 0x1885B6CE84C3FE5DL, 0xB8B56986B6E2CE21L }, /*DF*/
|
||||
new long[] { 0xF36DACFA34237E99L, 0xBE45EB5253BCFED0L, 0x402C6946B8B21AC0L, 0x2460A6FCE7E9CD67L, 0xF89A6D5B162629FCL, 0xF66CCEA374DB821EL }, /*E0*/
|
||||
new long[] { 0x16E06074DCC31A1DL, 0xF172017AC3FA38C3L, 0xBBC1CE4BB784ED60L, 0xDA89A8BCE82AE671L, 0xA6DACFFB8D26C0BBL, 0x185181AE9609F6D6L }, /*E1*/
|
||||
new long[] { 0xF110DBDD94D17661L, 0xF59FBB4CBA69F393L, 0x463B60FB3F3C5E00L, 0x1C60B896FE8E78ACL, 0x5EB3E26795DE5AB6L, 0x997328D4654D6219L }, /*E2*/
|
||||
new long[] { 0x21069118ABE24B61L, 0x811CB8C48FCEFC6AL, 0x483B032CFB56F902L, 0xFB32E848198CC057L, 0xA620815462A04F70L, 0x900038D1894959E2L }, /*E3*/
|
||||
new long[] { 0x5AD509789BFFECD0L, 0xDDCD5E8325F69CA0L, 0x154D8F1ACD9B8C82L, 0xAC7DF75E94CE3CAFL, 0x6D6554D1B38754BEL, 0xB5DB64AF738486E7L }, /*E4*/
|
||||
new long[] { 0x35A308A1AC9A43BFL, 0x2647805AB3E6E492L, 0x4BB74A616F61588FL, 0xFA4602EE5BDBF54EL, 0x3FDD62470A7174DBL, 0x5795433CA808FAACL }, /*E5*/
|
||||
new long[] { 0x51A094B8774CA605L, 0x5F07974C74EEF225L, 0x022AFEF7AD81A953L, 0x0967C44BBA336FD6L, 0x8AA327918AECBA3DL, 0xF70B8436573C3F0AL }, /*E6*/
|
||||
new long[] { 0xCF374F83420766C3L, 0x71F31901A13EF07CL, 0x63AD56C7DEF9DC0FL, 0x9E5BB5E859F5A231L, 0xD0BF453BB9893E4CL, 0xA1E14B66C2719760L }, /*E7*/
|
||||
new long[] { 0xB41861CC73FD3E48L, 0x461D79A138B04BE1L, 0x4010D37D37FBA817L, 0x7D9622AA693225A4L, 0x2204454B8126799AL, 0x33A5D487DCCD6EB6L }, /*E8*/
|
||||
new long[] { 0xD291D0317A053320L, 0xE27678F1E50D1F76L, 0x9A3D663A63159FC7L, 0xAD7B4D3F67BAB452L, 0x269CC05E2B33CE1CL, 0x0FB8261CD734BCC3L }, /*E9*/
|
||||
new long[] { 0xF3D0546D3D4A25EEL, 0xB42874AD28C9B7F2L, 0x73EC788B29962D28L, 0x4AE73A48132B8553L, 0x756C99D7A0910B66L, 0xECA7E2C2712D555CL }, /*EA*/
|
||||
new long[] { 0x559FA5BF24911FDDL, 0xA1DDF5DE3770554BL, 0xC7C3FD139366B946L, 0x6E7ECC0C881D2BA4L, 0x14E76D6A27E54B87L, 0x7352D5FBC4FAB878L }, /*EB*/
|
||||
new long[] { 0xF19A622BED8DAC0AL, 0x35548E5D7EFC5A2EL, 0xCAC84974B4F057B2L, 0xAB317ED03D0335AEL, 0x710FC138F2C51738L, 0x9C90CC495A403416L }, /*EC*/
|
||||
new long[] { 0x9FA7DEB936F10461L, 0xA1529B0B58462F9DL, 0x9F109111C8B9EC65L, 0x23A3EB28444E33EAL, 0x554084CA75118937L, 0x599D58A7C946EAC2L }, /*ED*/
|
||||
new long[] { 0x6EC3AABB7856AC4EL, 0x980E6907C1CBCCAFL, 0x1F8557ADC700CBF5L, 0x7DCB1CE0AF48D9F4L, 0x7FB3DADF8199AB8AL, 0xE6B36DB8FADBF312L }, /*EE*/
|
||||
new long[] { 0xC00F0D3F7A101660L, 0x605B94B12DB6C697L, 0x79944F7BA2B65F38L, 0x40858ADEDD47E2BCL, 0x1E044BDB0E9FB02BL, 0x86C79D01A3109539L }, /*EF*/
|
||||
new long[] { 0x9731893D5B98482AL, 0xFB8DE267F9790326L, 0x8780F407143A505DL, 0xA41CAEFCCCD3A8E3L, 0xA042F0B3D7B7A7FEL, 0x3E3151FEBB19A1ACL }, /*F0*/
|
||||
new long[] { 0xE7EDF679003A6950L, 0xBAFC97D4A8C6AB12L, 0x13C096B49C79559AL, 0xC3052501434B5019L, 0x1280FB23E7ADFB09L, 0x1959905D31BD2FC0L }, /*F1*/
|
||||
new long[] { 0x575C0C46FCFCC65BL, 0xFE625E873F34B419L, 0x1696FDCC7F51B8A3L, 0xC79C56F30E5AE7C0L, 0x14E3461CD27FAD15L, 0x1B7BCCB9CB472859L }, /*F2*/
|
||||
new long[] { 0x3806FE58E5CC8F16L, 0xF8244ED76734C1BFL, 0x4E04940E0F5DDB56L, 0x5BD0AFDDC4158B7BL, 0xA4C6BA949911C5C9L, 0xFF6E2AC155AE9726L }, /*F3*/
|
||||
new long[] { 0x49C7C844B8114144L, 0xB450E41BCA35CB00L, 0x302450EC67BEF97CL, 0xA8662049DB1E0D8BL, 0xDA69C022528EB8FAL, 0x6ABBF16585C1A2F7L }, /*F4*/
|
||||
new long[] { 0x37BB420DF67F044EL, 0xDCC0E9F3E2EF07B3L, 0x4D10088618777841L, 0x0492E5379305DAAEL, 0x3DA4791C37E4128FL, 0x80688445CBA4EA17L }, /*F5*/
|
||||
new long[] { 0x51398A7CE4CF8D9DL, 0x49A5FCD891A69CA5L, 0x3D72A60EC2392DA5L, 0x0E8296B879AB5539L, 0x6BCB00AF2EDC0BDEL, 0xBEB93848E54B3E90L }, /*F6*/
|
||||
new long[] { 0x7AD7C52A18922E19L, 0x29292C57C4F5B8F5L, 0xF0CF1F98A577C10BL, 0x072B9F293BB660CDL, 0x09B8604F5575B6FBL, 0xDECB396A81B9FCDBL }, /*F7*/
|
||||
new long[] { 0x254AD7ADB4C220DEL, 0x6C62E20F95A0070DL, 0xADEB89F339309BD8L, 0xA2F685CC178B289FL, 0x9343905B5DEE95A5L, 0xE0C30F34A2977C86L }, /*F8*/
|
||||
new long[] { 0x669CD51AF7CFBFAAL, 0xE3E0806F6880271DL, 0x6934C259E098BF90L, 0x5DFEEAF0FBCA7249L, 0x89F74B948B4118B6L, 0x53640AEAFB6807C3L }, /*F9*/
|
||||
new long[] { 0xDD3BACDCC04BE120L, 0x6D4949BD64198E51L, 0x31FDB39666598A74L, 0xBBBC6DE9C0C15A81L, 0xF27F201C61C06279L, 0x2738AFE3E84E5CDDL }, /*FA*/
|
||||
new long[] { 0xCDD71FD35A6411DEL, 0x3CC012793E87523FL, 0xB0CFF8720FCA36F3L, 0x93E85FE07300F012L, 0xE894A085263F090BL, 0x2DF60A01DAFA90ECL }, /*FB*/
|
||||
new long[] { 0x9DA50DB1EEB4FADDL, 0xE524E49C9974799AL, 0xDE09FFF26A24CBB9L, 0xAF9D71E9F3ACE7CDL, 0xEB62B1A62566EC9DL, 0x06D02AB1217D3553L }, /*FC*/
|
||||
new long[] { 0xDD31E6391AE03522L, 0x93ACD1065B35E915L, 0xF4EB56CC03E79218L, 0x0717815C850C97F1L, 0xBF4F6A8AC0540A6FL, 0xFCF8AE5DE9507FF0L }, /*FD*/
|
||||
new long[] { 0xAB45B413DC50B207L, 0x40B417369551D8D5L, 0xCA32286A108E7210L, 0x03225E54D8D093AFL, 0x4B6CA5591EA576E9L, 0x4E12AB774DC4E062L }, /*FE*/
|
||||
new long[] { 0xD9F4F850DF6CB96CL, 0x8ABAD81B1667335DL, 0xCB4079CFE79C72E5L, 0xE5542F763E316996L, 0x303E4B79B9D397C4L, 0xE46933038B945111L }, /*FF*/
|
||||
new long[] { 0x75B15CC53B0D2502L, 0xDA1BCA6BA0524358L, 0x9EDA977556C06B7EL, 0x6C57727ECF0A1325L, 0xDC613D5A78E5C3F8L, 0xCE062D94A3B4945AL } /*ZZ*/
|
||||
};
|
||||
|
||||
private static final long[][] NUHASH_RND = new long[][] {
|
||||
new long[] { 0x6A09E667F3BCC908L, 0xB2FB1366EA957D3EL, 0x3ADEC17512775099L, 0xDA2F590B0667322AL, 0x95F9060875714587L, 0x5163FCDFB907B672L }, /*R1*/
|
||||
new long[] { 0x1EE950BC8738F694L, 0xF0090E6C7BF44ED1L, 0xA4405D0E855E3E9CL, 0xA60B38C0237866F7L, 0x956379222D108B14L, 0x8C1578E45EF89C67L }, /*R2*/
|
||||
new long[] { 0x8DAB5147176FD3B9L, 0x9654C68663E7909BL, 0xEA5E241F06DCB05DL, 0xD549411320819495L, 0x0272956DB1FA1DFBL, 0xE9A74059D7927C18L }, /*R3*/
|
||||
new long[] { 0x84C9B579AA516CA3L, 0x719E6836DF046D8EL, 0x0209B803FC646A5EL, 0x6654BD3EF7B43D7FL, 0xED437C7F9444260FL, 0xBD40C483EF550385L }, /*R4*/
|
||||
new long[] { 0x83F97BBD45EFB866L, 0x3107145D5FEBE765L, 0xA49E94EC7F597105L, 0xFBFC2E1FA763EF01L, 0xF3599C82F2FE500BL, 0x848CF0BD252AE046L } /*R5*/
|
||||
};
|
||||
|
||||
private static final byte[] NUHASH_SBX = {
|
||||
(byte)0x63, (byte)0x7C, (byte)0x77, (byte)0x7B, (byte)0xF2, (byte)0x6B, (byte)0x6F, (byte)0xC5, (byte)0x30, (byte)0x01, (byte)0x67, (byte)0x2B, (byte)0xFE, (byte)0xD7, (byte)0xAB, (byte)0x76,
|
||||
(byte)0xCA, (byte)0x82, (byte)0xC9, (byte)0x7D, (byte)0xFA, (byte)0x59, (byte)0x47, (byte)0xF0, (byte)0xAD, (byte)0xD4, (byte)0xA2, (byte)0xAF, (byte)0x9C, (byte)0xA4, (byte)0x72, (byte)0xC0,
|
||||
(byte)0xB7, (byte)0xFD, (byte)0x93, (byte)0x26, (byte)0x36, (byte)0x3F, (byte)0xF7, (byte)0xCC, (byte)0x34, (byte)0xA5, (byte)0xE5, (byte)0xF1, (byte)0x71, (byte)0xD8, (byte)0x31, (byte)0x15,
|
||||
(byte)0x04, (byte)0xC7, (byte)0x23, (byte)0xC3, (byte)0x18, (byte)0x96, (byte)0x05, (byte)0x9A, (byte)0x07, (byte)0x12, (byte)0x80, (byte)0xE2, (byte)0xEB, (byte)0x27, (byte)0xB2, (byte)0x75,
|
||||
(byte)0x09, (byte)0x83, (byte)0x2C, (byte)0x1A, (byte)0x1B, (byte)0x6E, (byte)0x5A, (byte)0xA0, (byte)0x52, (byte)0x3B, (byte)0xD6, (byte)0xB3, (byte)0x29, (byte)0xE3, (byte)0x2F, (byte)0x84,
|
||||
(byte)0x53, (byte)0xD1, (byte)0x00, (byte)0xED, (byte)0x20, (byte)0xFC, (byte)0xB1, (byte)0x5B, (byte)0x6A, (byte)0xCB, (byte)0xBE, (byte)0x39, (byte)0x4A, (byte)0x4C, (byte)0x58, (byte)0xCF,
|
||||
(byte)0xD0, (byte)0xEF, (byte)0xAA, (byte)0xFB, (byte)0x43, (byte)0x4D, (byte)0x33, (byte)0x85, (byte)0x45, (byte)0xF9, (byte)0x02, (byte)0x7F, (byte)0x50, (byte)0x3C, (byte)0x9F, (byte)0xA8,
|
||||
(byte)0x51, (byte)0xA3, (byte)0x40, (byte)0x8F, (byte)0x92, (byte)0x9D, (byte)0x38, (byte)0xF5, (byte)0xBC, (byte)0xB6, (byte)0xDA, (byte)0x21, (byte)0x10, (byte)0xFF, (byte)0xF3, (byte)0xD2,
|
||||
(byte)0xCD, (byte)0x0C, (byte)0x13, (byte)0xEC, (byte)0x5F, (byte)0x97, (byte)0x44, (byte)0x17, (byte)0xC4, (byte)0xA7, (byte)0x7E, (byte)0x3D, (byte)0x64, (byte)0x5D, (byte)0x19, (byte)0x73,
|
||||
(byte)0x60, (byte)0x81, (byte)0x4F, (byte)0xDC, (byte)0x22, (byte)0x2A, (byte)0x90, (byte)0x88, (byte)0x46, (byte)0xEE, (byte)0xB8, (byte)0x14, (byte)0xDE, (byte)0x5E, (byte)0x0B, (byte)0xDB,
|
||||
(byte)0xE0, (byte)0x32, (byte)0x3A, (byte)0x0A, (byte)0x49, (byte)0x06, (byte)0x24, (byte)0x5C, (byte)0xC2, (byte)0xD3, (byte)0xAC, (byte)0x62, (byte)0x91, (byte)0x95, (byte)0xE4, (byte)0x79,
|
||||
(byte)0xE7, (byte)0xC8, (byte)0x37, (byte)0x6D, (byte)0x8D, (byte)0xD5, (byte)0x4E, (byte)0xA9, (byte)0x6C, (byte)0x56, (byte)0xF4, (byte)0xEA, (byte)0x65, (byte)0x7A, (byte)0xAE, (byte)0x08,
|
||||
(byte)0xBA, (byte)0x78, (byte)0x25, (byte)0x2E, (byte)0x1C, (byte)0xA6, (byte)0xB4, (byte)0xC6, (byte)0xE8, (byte)0xDD, (byte)0x74, (byte)0x1F, (byte)0x4B, (byte)0xBD, (byte)0x8B, (byte)0x8A,
|
||||
(byte)0x70, (byte)0x3E, (byte)0xB5, (byte)0x66, (byte)0x48, (byte)0x03, (byte)0xF6, (byte)0x0E, (byte)0x61, (byte)0x35, (byte)0x57, (byte)0xB9, (byte)0x86, (byte)0xC1, (byte)0x1D, (byte)0x9E,
|
||||
(byte)0xE1, (byte)0xF8, (byte)0x98, (byte)0x11, (byte)0x69, (byte)0xD9, (byte)0x8E, (byte)0x94, (byte)0x9B, (byte)0x1E, (byte)0x87, (byte)0xE9, (byte)0xCE, (byte)0x55, (byte)0x28, (byte)0xDF,
|
||||
(byte)0x8C, (byte)0xA1, (byte)0x89, (byte)0x0D, (byte)0xBF, (byte)0xE6, (byte)0x42, (byte)0x68, (byte)0x41, (byte)0x99, (byte)0x2D, (byte)0x0F, (byte)0xB0, (byte)0x54, (byte)0xBB, (byte)0x16
|
||||
};
|
||||
|
||||
private static final byte[] NUHASH_FIN = {
|
||||
(byte)0xB4, (byte)0x98, (byte)0x0C, (byte)0x84, (byte)0x24, (byte)0xF3, (byte)0x27, (byte)0x8F, (byte)0xA6, (byte)0x5E, (byte)0xF0, (byte)0x65, (byte)0x86, (byte)0xBC, (byte)0x09, (byte)0x92,
|
||||
(byte)0x75, (byte)0x21, (byte)0xB9, (byte)0x95, (byte)0x66, (byte)0x8A, (byte)0x2F, (byte)0x13, (byte)0xB5, (byte)0xB7, (byte)0x6B, (byte)0x33, (byte)0x2A, (byte)0xBF, (byte)0xF7, (byte)0x0F,
|
||||
(byte)0x0A, (byte)0xE7, (byte)0x16, (byte)0x30, (byte)0x77, (byte)0x61, (byte)0x48, (byte)0x90, (byte)0xDF, (byte)0xAF, (byte)0x72, (byte)0x79, (byte)0xF6, (byte)0xA5, (byte)0x58, (byte)0xD1,
|
||||
(byte)0xF2, (byte)0x40, (byte)0x9F, (byte)0x41, (byte)0xE8, (byte)0x03, (byte)0xA1, (byte)0x05, (byte)0xC5, (byte)0x35, (byte)0xC7, (byte)0x97, (byte)0x54, (byte)0x7B, (byte)0xB3, (byte)0xF5,
|
||||
(byte)0xB8, (byte)0xA8, (byte)0xD8, (byte)0x68, (byte)0x51, (byte)0xAD, (byte)0xE3, (byte)0xC2, (byte)0x5D, (byte)0xCF, (byte)0xEA, (byte)0x89, (byte)0x37, (byte)0xF1, (byte)0x55, (byte)0x60,
|
||||
(byte)0xA4, (byte)0x26, (byte)0xAC, (byte)0x32, (byte)0x0E, (byte)0xD2, (byte)0x85, (byte)0x6F, (byte)0xC8, (byte)0xDC, (byte)0x36, (byte)0x6D, (byte)0xA3, (byte)0x22, (byte)0x5A, (byte)0xC9,
|
||||
(byte)0x5C, (byte)0x91, (byte)0x1B, (byte)0x5B, (byte)0xE9, (byte)0x78, (byte)0xD7, (byte)0x44, (byte)0xEB, (byte)0x1A, (byte)0xC0, (byte)0xCA, (byte)0x94, (byte)0x53, (byte)0xC4, (byte)0x11,
|
||||
(byte)0x12, (byte)0xCC, (byte)0xFF, (byte)0x88, (byte)0x0D, (byte)0x4E, (byte)0xB2, (byte)0xB1, (byte)0x4A, (byte)0x3A, (byte)0xE1, (byte)0x2E, (byte)0x0B, (byte)0x4C, (byte)0x5F, (byte)0x06,
|
||||
(byte)0x81, (byte)0x31, (byte)0xD9, (byte)0x3D, (byte)0xFD, (byte)0x43, (byte)0x67, (byte)0x62, (byte)0x00, (byte)0x9C, (byte)0x50, (byte)0xCE, (byte)0x6E, (byte)0x15, (byte)0x82, (byte)0x29,
|
||||
(byte)0x96, (byte)0xDA, (byte)0x87, (byte)0xEF, (byte)0x6C, (byte)0xC1, (byte)0x8B, (byte)0x07, (byte)0x8E, (byte)0x17, (byte)0xEC, (byte)0x9A, (byte)0xBA, (byte)0x46, (byte)0x04, (byte)0x73,
|
||||
(byte)0x39, (byte)0xE4, (byte)0x63, (byte)0xBE, (byte)0x64, (byte)0x47, (byte)0xE6, (byte)0x3F, (byte)0x25, (byte)0x52, (byte)0x59, (byte)0xA7, (byte)0x42, (byte)0x38, (byte)0x99, (byte)0x01,
|
||||
(byte)0xE5, (byte)0x1D, (byte)0x28, (byte)0x7A, (byte)0xB0, (byte)0x7C, (byte)0x9D, (byte)0x56, (byte)0xE2, (byte)0xD6, (byte)0xA0, (byte)0xF4, (byte)0x1E, (byte)0xE0, (byte)0xD3, (byte)0x83,
|
||||
(byte)0x6A, (byte)0xBB, (byte)0x18, (byte)0x20, (byte)0xAE, (byte)0x57, (byte)0xAA, (byte)0x8D, (byte)0x71, (byte)0x1F, (byte)0x34, (byte)0x4D, (byte)0x2D, (byte)0x3C, (byte)0x2B, (byte)0xF8,
|
||||
(byte)0x10, (byte)0x7E, (byte)0xCB, (byte)0xFB, (byte)0x49, (byte)0xA2, (byte)0x45, (byte)0x7F, (byte)0x3E, (byte)0xBD, (byte)0xC3, (byte)0xFC, (byte)0x14, (byte)0x74, (byte)0x23, (byte)0x4F,
|
||||
(byte)0x7D, (byte)0x69, (byte)0x93, (byte)0x19, (byte)0xD0, (byte)0x1C, (byte)0x08, (byte)0xF9, (byte)0xDD, (byte)0xC6, (byte)0x2C, (byte)0x9E, (byte)0xA9, (byte)0x4B, (byte)0xFE, (byte)0xED,
|
||||
(byte)0x76, (byte)0xDB, (byte)0xAB, (byte)0xD4, (byte)0x80, (byte)0xCD, (byte)0xB6, (byte)0x8C, (byte)0xDE, (byte)0x70, (byte)0x9B, (byte)0xD5, (byte)0xFA, (byte)0xEE, (byte)0x02, (byte)0x3B
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* MIX FUNCTIONS */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private static long mixFunction1(long key) {
|
||||
key = (key ^ (key >>> 31)) * 0x7FB5D329728EA185L;
|
||||
key = (key ^ (key >>> 27)) * 0x81DADEF4BC2DD44DL;
|
||||
return key ^ (key >>> 33);
|
||||
}
|
||||
|
||||
private static long mixFunction2(long key) {
|
||||
key = (key ^ (key >>> 31)) * 0x99BCF6822B23CA35L;
|
||||
key = (key ^ (key >>> 30)) * 0x14020A57ACCED8B7L;
|
||||
return key ^ (key >>> 33);
|
||||
}
|
||||
|
||||
private static long mixFunction3(long key) {
|
||||
key = (key ^ (key >>> 31)) * 0x69B0BC90BD9A8C49L;
|
||||
key = (key ^ (key >>> 27)) * 0x3D5E661A2A77868DL;
|
||||
return key ^ (key >>> 30);
|
||||
}
|
||||
|
||||
private static long mixFunction4(long key) {
|
||||
key = (key ^ (key >>> 30)) * 0x16A6AC37883AF045L;
|
||||
key = (key ^ (key >>> 26)) * 0xCC9C31A4274686A5L;
|
||||
return key ^ (key >>> 32);
|
||||
}
|
||||
|
||||
private static long mixFunction5(long key) {
|
||||
key = (key ^ (key >>> 30)) * 0xBF58476D1CE4E5B9L;
|
||||
key = (key ^ (key >>> 27)) * 0x94D049BB133111EBL;
|
||||
return key ^ (key >>> 31);
|
||||
}
|
||||
|
||||
private static long mixFunction6(long key) {
|
||||
key = (key ^ (key >>> 30)) * 0x4BE98134A5976FD3L;
|
||||
key = (key ^ (key >>> 29)) * 0x3BC0993A5AD19A13L;
|
||||
return key ^ (key >>> 31);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* SUBSTITUTION FUNCTION */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private static void substituteBytes(final long[] buffer) {
|
||||
for (int pos = 0; pos < buffer.length; ++pos) {
|
||||
final long value = buffer[pos];
|
||||
buffer[pos] =
|
||||
((NUHASH_SBX[(int)(value >>> 0x00) & 0xFF] & 0xFFL) << 0x00) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x08) & 0xFF] & 0xFFL) << 0x08) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x10) & 0xFF] & 0xFFL) << 0x10) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x18) & 0xFF] & 0xFFL) << 0x18) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x20) & 0xFF] & 0xFFL) << 0x20) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x28) & 0xFF] & 0xFFL) << 0x28) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x30) & 0xFF] & 0xFFL) << 0x30) |
|
||||
((NUHASH_SBX[(int)(value >>> 0x38) & 0xFF] & 0xFFL) << 0x38);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* UPDATE FUNCTION */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private void update(final int index) {
|
||||
final long[] rowAddr = NUHASH_XOR[index];
|
||||
for (int round = 0; round < ROUNDS; ++round) {
|
||||
final long key[] = NUHASH_RND[round], initValue = m_hash[0];
|
||||
m_hash[0] = mixFunction1(((m_hash[0] << 32) | (m_hash[1] >>> 32)) ^ rowAddr[0] ^ key[0]);
|
||||
m_hash[1] = mixFunction2(((m_hash[1] << 32) | (m_hash[2] >>> 32)) ^ rowAddr[1] ^ key[1]);
|
||||
m_hash[2] = mixFunction3(((m_hash[2] << 32) | (m_hash[3] >>> 32)) ^ rowAddr[2] ^ key[2]);
|
||||
m_hash[3] = mixFunction4(((m_hash[3] << 32) | (m_hash[4] >>> 32)) ^ rowAddr[3] ^ key[3]);
|
||||
m_hash[4] = mixFunction5(((m_hash[4] << 32) | (m_hash[5] >>> 32)) ^ rowAddr[4] ^ key[4]);
|
||||
m_hash[5] = mixFunction6(((m_hash[5] << 32) | (initValue >>> 32)) ^ rowAddr[5] ^ key[5]);
|
||||
substituteBytes(m_hash);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* STREAM API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
public NuHash reset() {
|
||||
System.arraycopy(NUHASH_INI, 0, m_hash, 0, NUHASH_WORDS);
|
||||
m_finished = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
public NuHash update(final byte[] input) {
|
||||
if (input == null) {
|
||||
throw new IllegalArgumentException("Input must not be null!");
|
||||
}
|
||||
checkState();
|
||||
for (final byte b : input) {
|
||||
update(b & 0xFF);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public byte[] doFinal() {
|
||||
checkState(true);
|
||||
update(256);
|
||||
for (final byte b : NUHASH_FIN) {
|
||||
update(b & 0xFF);
|
||||
}
|
||||
return toByteArray(m_hash);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* SIMPLE API */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
public static byte[] compute(final byte[] input) {
|
||||
if (input == null) {
|
||||
throw new IllegalArgumentException("Input must not be null!");
|
||||
}
|
||||
final NuHash nuhash = new NuHash();
|
||||
try {
|
||||
return nuhash.update(input).doFinal();
|
||||
} finally {
|
||||
nuhash.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* UTILITIES */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private void checkState() {
|
||||
checkState(false);
|
||||
}
|
||||
|
||||
private void checkState(final boolean isFinished) {
|
||||
if (m_finished) {
|
||||
throw new IllegalStateException("Computation is already finished!");
|
||||
}
|
||||
if (isFinished) {
|
||||
m_finished = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] toByteArray(final long[] hash) {
|
||||
final ByteBuffer digest = ByteBuffer.allocate(hash.length * Long.BYTES);
|
||||
for (final long current : hash) {
|
||||
digest.putLong(current);
|
||||
}
|
||||
return digest.array();
|
||||
}
|
||||
}
|
173
libnuhash/java/test/com/muldersoft/nuhash/test/NuHashTest.java
Normal file
173
libnuhash/java/test/com/muldersoft/nuhash/test/NuHashTest.java
Normal file
@ -0,0 +1,173 @@
|
||||
/******************************************************************************/
|
||||
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
|
||||
/* This work has been released under the CC0 1.0 Universal license! */
|
||||
/******************************************************************************/
|
||||
|
||||
package com.muldersoft.nuhash.test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.muldersoft.nuhash.NuHash;
|
||||
|
||||
class NuHashTest {
|
||||
|
||||
@BeforeAll
|
||||
static void init() {
|
||||
final List<Integer> version = NuHash.VERSION;
|
||||
System.out.printf("NuHash v%d.%d.%d\n", version.get(0), version.get(1), version.get(2));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* TEST VECTORS */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
@Test
|
||||
void testCase0() throws Exception {
|
||||
final Field field = NuHash.class.getDeclaredField("NUHASH_XOR");
|
||||
field.setAccessible(true);
|
||||
final long[][] xorTable = (long[][]) field.get(null);
|
||||
for (int i = 0; i < xorTable.length; ++i) {
|
||||
for (int j = 0; j < xorTable.length; ++j) {
|
||||
if (i != j) {
|
||||
assertTrue(computeDistance(xorTable[i], xorTable[j]) >= 182L, "Distance too small !!!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase1() {
|
||||
runTest(
|
||||
"d7964fe1bec2b5ecf21ecc88c86ce4f1e89fb1ef3669d52e34eb049d7fd6c42d4b2bbeeeb70d12c3fcaf43dd2229abc9");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase2() {
|
||||
runTest(
|
||||
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||
"b3f13f534034ae8d645d410e8828673761fe2d697218879f9ea528d976ba2e15a3f7485105e612b9a46cb3988635a70f");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase3() {
|
||||
runTest(
|
||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
|
||||
"63703476f4ffce4a8c758d0d3b91a857b9a2e3433ee864f931ba328fa7247b1b0ac9c2e0279243b83051aafac6a7e710");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase4() {
|
||||
runTest(
|
||||
String.valueOf('a'),
|
||||
1000000,
|
||||
"c6808aeb911c8837cee2e6867e589ab28526a8153494cf35a40c4bd6e20312da33cac4a390cd3b51a2eb4226e60b53e1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase5() {
|
||||
runTest(
|
||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno",
|
||||
16777216,
|
||||
"bcca6bc8d113dd3fc171d743ac7ad2d3e63163ea7107d3c78517cf5b53ee0b2f4a0fe079e6a74df350c667b7cfe3cf09");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase6() {
|
||||
runTest(
|
||||
"g4tB,=[TU%/|8lv_c5Y?F9Sqs1PnV#bNO6DW\\0em~p<ifJhM(2&Qo}`!-*:jrZ{KGX]$zkuLd+)xwC^.\"@AIHR;y'a>3E7",
|
||||
16777216,
|
||||
"56770e133b9eb4205f11824ad7280f5c31bc04dd333d1844b3589ab8b94ab95dc09b77be9a8128d7f155fa73de617597"
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase7() {
|
||||
runTest(
|
||||
decode("pCxVpbBe2DPzGPunIMc01x0tRo3Kiuf8aFtU2vnDdmKpPTm/F7eyjBCiH+N0akpsepLRUuqIumvWZJae5kxHQsVR8lD0e0/ph22USyPwRRqa5JEPO7RxgpnJSeW+KJOYKtlzZVjAg0iPAxRAGyQepj/3Z6s3Bqz2ZrbdHAo1n1YV7PErfFddAu2oYxZ13JtcfQ1f/QWgbpCVhdITYQijAcjThKoJ9XBv3rkEtdswvAeO/olgJk5ZyzaGEXLixq86i3/6QTjf7i8yoSdpMSlDxJx3IUS4edCtl+DhDhkuIr2A6LH4TT7CfgyzgRLMwVPPeM481Vq7nevvzf8LJa7U"),
|
||||
16777216,
|
||||
"9a8579bb88112b2f3285781a61348d7b04a5632fec12a73a7e0e367a556794a24a32ca7bb14da68eaed83e99c2f8f4c0");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCase8() {
|
||||
runTest(
|
||||
decode("tcib0bpmKRnSMO0mW8SRTRT3FjVaaf6ZpUnxlCu83EzdT8obiJyp9nMv/T9AORPas3H03n8CPWR4ehcKk9/rnwcEeYyYuCiArR/ylmu9Rdn6LFbO8IcjIurFJ9NjryTHtwbkdYN7vy6k7/USXWCVp1MRdLSgnuOuu1VyWaad1Yltj0oMHc0q++7Xw/MlYo6wssI4PGpvTjsI1IY2GFzgHoF3+GjbWFT/l35hwFHJbOWCvs8yQwE6XlBHoTTMDXCsxkSaPhAO7APibqr8fTcxS+a2wRWLBYWKZ/mrjeGiSBzLUmV2DxohqKNCQZCS0IQJLTNf2HyxuVfo1gsg50bp"),
|
||||
16777216,
|
||||
"fbf4444b0329f508bfc6cf44920b311a718e5f4c4c1af978e78223ec3579365ff5d15c16bb5a33d69cb36f3d40564757");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* TEST RUNNER */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private static void runTest(final String expected) {
|
||||
runTest("", 0, expected);
|
||||
}
|
||||
|
||||
private static void runTest(final String input, final String expected) {
|
||||
runTest(input, 1, expected);
|
||||
}
|
||||
|
||||
private static void runTest(final String input, final int iterations, final String expected) {
|
||||
assertNotNull(input);
|
||||
runTest(input.getBytes(StandardCharsets.UTF_8), iterations, expected);
|
||||
}
|
||||
|
||||
private static void runTest(final byte[] input, final int iterations, final String expected) {
|
||||
assertNotNull(input);
|
||||
assertTrue((iterations > 0) || (input.length == 0));
|
||||
assertFalse(expected.isEmpty());
|
||||
final NuHash instance = new NuHash();
|
||||
try {
|
||||
for (int i = 0; i < iterations; ++i) {
|
||||
instance.update(input);
|
||||
}
|
||||
assertDigest(expected, instance.doFinal());
|
||||
} finally {
|
||||
instance.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* UTILITIES */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
private static byte[] decode(final String base64data) {
|
||||
return Base64.getDecoder().decode(base64data);
|
||||
}
|
||||
|
||||
private static long computeDistance(final long[] row1, final long[] row2) {
|
||||
assertEquals(row1.length, row2.length, "Length mismatch!");
|
||||
long distance = 0;
|
||||
for (int i = 0; i < row1.length; ++i) {
|
||||
distance += Long.bitCount(row1[i] ^ row2[i]);
|
||||
}
|
||||
return distance;
|
||||
}
|
||||
|
||||
private static String printHexString(final byte[] digest) {
|
||||
final StringBuilder sb = new StringBuilder(2 * digest.length);
|
||||
for(final byte b : digest) {
|
||||
sb.append(String.format("%02x", b));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static void assertDigest(final String expected, final byte[] actual) {
|
||||
final String hexString = printHexString(actual);
|
||||
final boolean success = expected.equalsIgnoreCase(hexString);
|
||||
System.out.println(hexString + " - " + (success ? "OK" : "Failed!"));
|
||||
assertTrue(success, "Hash mismatch detected !!!");
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@ VisualStudioVersion = 17.6.33815.320
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NuHash", "tool\nuhash.vcxproj", "{867A1634-C6AC-4089-B645-A1BE289D597B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnuhash", "libnuhash\libnuhash.vcxproj", "{8FA5C597-887D-46BC-A6C9-2183AEF7B793}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnuhash", "libnuhash\c99\libnuhash.vcxproj", "{8FA5C597-887D-46BC-A6C9-2183AEF7B793}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -206,7 +206,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
@ -224,7 +224,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -257,7 +257,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -288,7 +288,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
@ -304,7 +304,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4706;4996;6031</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
@ -321,7 +321,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -353,7 +353,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_OBSOLETE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -385,7 +385,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -416,7 +416,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>LIBNUHASH_DLL;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libnuhash\c99\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
@ -443,11 +443,6 @@
|
||||
<ClCompile Include="src\main.c" />
|
||||
<ClCompile Include="src\platform.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\libnuhash\libnuhash.vcxproj">
|
||||
<Project>{8fa5c597-887d-46bc-a6c9-2183aef7b793}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="res\version.rc">
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_M_X64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@ -459,6 +454,15 @@
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">_M_IX86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_DLL|ARM64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">$(SolutionDir)libnuhash\c99\src</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@ -467,6 +471,11 @@
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\platform.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\libnuhash\c99\libnuhash.vcxproj">
|
||||
<Project>{8fa5c597-887d-46bc-a6c9-2183aef7b793}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
|
@ -3,10 +3,10 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
#include "WinResrc.h"
|
||||
#include <WinResrc.h>
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
#include "../../libnuhash/src/version.h"
|
||||
#include <nuhash_version.h>
|
||||
|
||||
#define MY_VERSION_NUMBER NUHASH_VERSION_MAJOR, NUHASH_VERSION_MINOR, NUHASH_VERSION_PATCH, 0
|
||||
#define ___MY_VERSION_STRING(X) #X
|
||||
|
Loading…
x
Reference in New Issue
Block a user