summaryrefslogtreecommitdiffstats
path: root/crypto/rijndael
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2000-10-14 20:09:54 +0000
committerRichard Levitte <levitte@openssl.org>2000-10-14 20:09:54 +0000
commit3ab56511120b7a67ed4e4dbac9d60e5d1520a453 (patch)
tree399ad045f57838ba50a40a57f9834d7a98f6af4a /crypto/rijndael
parent82ce0b2308027b337f0d8bea973eca5f818aaceb (diff)
The experimental Rijndael code moved to the main trunk.
make update done.
Diffstat (limited to 'crypto/rijndael')
-rw-r--r--crypto/rijndael/Makefile.ssl86
-rwxr-xr-xcrypto/rijndael/README84
-rw-r--r--crypto/rijndael/boxes-fst-corrected.dat3986
-rwxr-xr-xcrypto/rijndael/rijndael-alg-fst.c476
-rwxr-xr-xcrypto/rijndael/rijndael-alg-fst.h46
-rw-r--r--crypto/rijndael/rijndael.h11
6 files changed, 4689 insertions, 0 deletions
diff --git a/crypto/rijndael/Makefile.ssl b/crypto/rijndael/Makefile.ssl
new file mode 100644
index 0000000000..01da7ac8b3
--- /dev/null
+++ b/crypto/rijndael/Makefile.ssl
@@ -0,0 +1,86 @@
+#
+# SSLeay/crypto/blowfish/Makefile
+#
+
+DIR= rijndael
+TOP= ../..
+CC= cc
+CPP= $(CC) -E
+INCLUDES=
+CFLAG=-g
+INSTALL_PREFIX=
+OPENSSLDIR= /usr/local/ssl
+INSTALLTOP=/usr/local/ssl
+MAKE= make -f Makefile.ssl
+MAKEDEPEND= $(TOP)/util/domd $(TOP)
+MAKEFILE= Makefile.ssl
+AR= ar r
+
+RD_ENC= rd_enc.o
+# or use
+#DES_ENC= bx86-elf.o
+
+CFLAGS= $(INCLUDES) $(CFLAG) -DINTERMEDIATE_VALUE_KAT -DBINARY_KEY_MATERIAL
+
+GENERAL=Makefile
+#TEST=rijndael-test-fst.c table.128 table.192 table.256
+TEST=
+APPS=
+
+LIB=$(TOP)/libcrypto.a
+LIBSRC=rijndael-alg-fst.c
+LIBOBJ=rijndael-alg-fst.o
+
+SRC= $(LIBSRC)
+
+EXHEADER=rijndael-alg-fst.h rijndael.h
+
+top:
+ (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
+
+all: lib
+
+lib: $(LIBOBJ)
+ $(AR) $(LIB) $(LIBOBJ)
+ $(RANLIB) $(LIB)
+ @touch lib
+
+files:
+ $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
+
+links:
+ @$(TOP)/util/point.sh Makefile.ssl Makefile
+ @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
+ @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
+ @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
+
+install: installs
+
+installs:
+ @for i in $(EXHEADER) ; \
+ do \
+ (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
+ done;
+
+tags:
+ ctags $(SRC)
+
+tests:
+
+lint:
+ lint -DLINT $(INCLUDES) $(SRC)>fluff
+
+depend:
+ $(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(LIBSRC)
+
+dclean:
+ $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
+ mv -f Makefile.new $(MAKEFILE)
+
+clean:
+ rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
+
+# DO NOT DELETE THIS LINE
+
+rijndael-alg-fst.o: boxes-fst-corrected.dat rijndael-alg-fst.h
diff --git a/crypto/rijndael/README b/crypto/rijndael/README
new file mode 100755
index 0000000000..6d6f19fa49
--- /dev/null
+++ b/crypto/rijndael/README
@@ -0,0 +1,84 @@
+Rijndael
+Joan Daemen
+
+Optimised ANSI C v2.4
+-----------------------------------------------------------
+
+This archive contains the following files:
+
+Makefile: A file that allows for easy compiling of the code with
+ Unix `make' (tested with GNU make).
+README: This file.
+boxes-fst.dat: Tables that are needed by the reference implementation.
+ The tables implement the S-box and its inverse, and also
+ some temporary tables needed for multiplying in the finite
+ field GF(2^8).
+rijndael-alg-fst.c:
+rijndael-alg-fst.h:
+ Algorithm implementation.
+rijndael-api-fst.c:
+rijndael-api-fst.h:
+ Interface to the C API.
+rijndaeltest-fst.c:
+ Implementation of the KAT and MCT.
+table.128:
+table.192:
+table.256:
+ Files needed for the KAT (for the Table Known Answer Test).
+
+
+
+Instructions for the KAT and MCT software:
+
+1) Compile the C code and put the executable in the same directory as the
+ table.??? files.
+2) Run the executable. It generates all the tables in the NIST format.
+3) Compare the generated tables with the original provided tables, e.g.
+ in Unix, with `diff'.
+4) The code is independent of the ENDIANness of the machine.
+ However, the code casts char pointers to int pointers.
+ On some platforms, this casting can cause problems.
+ This will cause malfunctioning of the CBC Monte Carlo tests.
+ In this case, the compile parameter STRICT_ALIGN should be set to 1.
+ (Of course this results in slower code.)
+
+
+Changes with respect to v1.0 (= round 1 submission)
+---------------------------------------------------
+
+1) Removed the parameter blockLen from makeKey() and cipherInit().
+ The parameter is still present in the structures keyInstance and
+ cipherInstance.
+2) Removed some calls to sscan().
+3) Corrected the CBC decryption Monte Carlo test code.
+4) Provided code for platforms with pointer alignment problems.
+
+----------------------------------------------------------------------
+
+Changes from v2.0 (= round 2 submission)
+----------------------------------------
+
+Various bug fixes in CBC encryption and decryption mode.
+
+----------------------------------------------------------------------
+
+Changes from v2.2
+-----------------
+
+-- Moved number of rounds to the keyInstance structure
+ to make implementation thread-safe
+-- Functions used only to generate the Intermediate Value
+ Known Answer Test are now conditionally compiled
+ via #define INTERMEDIATE_VALUE_KAT
+-- Further optimized for the default 128-bit block size
+-- Fixed CBC decryption bug (chained IV was lost if input
+ and outBuffer were the same)
+-- Added padding capability to CBC mode (allows encryption
+ of any number of octets, not only full blocks)
+
+----------------------------------------------------------------------
+
+Changes from v2.3
+-----------------
+
+Fixed a small bug in CBC mode.
diff --git a/crypto/rijndael/boxes-fst-corrected.dat b/crypto/rijndael/boxes-fst-corrected.dat
new file mode 100644
index 0000000000..d3d01c0397
--- /dev/null
+++ b/crypto/rijndael/boxes-fst-corrected.dat
@@ -0,0 +1,3986 @@
+word8 S[256] = {
+ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
+202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
+183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
+ 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
+ 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
+ 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
+208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168,
+ 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
+205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
+ 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
+224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
+231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
+186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
+112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
+225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
+140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22
+};
+
+#ifdef INTERMEDIATE_VALUE_KAT
+word8 Si[256] = {
+ 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,
+124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,
+ 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,
+ 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,
+114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,
+108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,
+144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
+208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,
+ 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
+150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,
+ 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,
+252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,
+ 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,
+ 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,
+160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
+ 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125
+};
+#endif /* INTERMEDIATE_VALUE_KAT */
+
+word8 T1[256][4] = {
+ {0xc6,0x63,0x63,0xa5},
+ {0xf8,0x7c,0x7c,0x84},
+ {0xee,0x77,0x77,0x99},
+ {0xf6,0x7b,0x7b,0x8d},
+
+ {0xff,0xf2,0xf2,0x0d},
+ {0xd6,0x6b,0x6b,0xbd},
+ {0xde,0x6f,0x6f,0xb1},
+ {0x91,0xc5,0xc5,0x54},
+
+ {0x60,0x30,0x30,0x50},
+ {0x02,0x01,0x01,0x03},
+ {0xce,0x67,0x67,0xa9},
+ {0x56,0x2b,0x2b,0x7d},
+
+ {0xe7,0xfe,0xfe,0x19},
+ {0xb5,0xd7,0xd7,0x62},
+ {0x4d,0xab,0xab,0xe6},
+ {0xec,0x76,0x76,0x9a},
+
+ {0x8f,0xca,0xca,0x45},
+ {0x1f,0x82,0x82,0x9d},
+ {0x89,0xc9,0xc9,0x40},
+ {0xfa,0x7d,0x7d,0x87},
+
+ {0xef,0xfa,0xfa,0x15},
+ {0xb2,0x59,0x59,0xeb},
+ {0x8e,0x47,0x47,0xc9},
+ {0xfb,0xf0,0xf0,0x0b},
+
+ {0x41,0xad,0xad,0xec},
+ {0xb3,0xd4,0xd4,0x67},
+ {0x5f,0xa2,0xa2,0xfd},
+ {0x45,0xaf,0xaf,0xea},
+
+ {0x23,0x9c,0x9c,0xbf},
+ {0x53,0xa4,0xa4,0xf7},
+ {0xe4,0x72,0x72,0x96},
+ {0x9b,0xc0,0xc0,0x5b},
+
+ {0x75,0xb7,0xb7,0xc2},
+ {0xe1,0xfd,0xfd,0x1c},
+ {0x3d,0x93,0x93,0xae},
+ {0x4c,0x26,0x26,0x6a},
+
+ {0x6c,0x36,0x36,0x5a},
+ {0x7e,0x3f,0x3f,0x41},
+ {0xf5,0xf7,0xf7,0x02},
+ {0x83,0xcc,0xcc,0x4f},
+
+ {0x68,0x34,0x34,0x5c},
+ {0x51,0xa5,0xa5,0xf4},
+ {0xd1,0xe5,0xe5,0x34},
+ {0xf9,0xf1,0xf1,0x08},
+
+ {0xe2,0x71,0x71,0x93},
+ {0xab,0xd8,0xd8,0x73},
+ {0x62,0x31,0x31,0x53},
+ {0x2a,0x15,0x15,0x3f},
+
+ {0x08,0x04,0x04,0x0c},
+ {0x95,0xc7,0xc7,0x52},
+ {0x46,0x23,0x23,0x65},
+ {0x9d,0xc3,0xc3,0x5e},
+
+ {0x30,0x18,0x18,0x28},
+ {0x37,0x96,0x96,0xa1},
+ {0x0a,0x05,0x05,0x0f},
+ {0x2f,0x9a,0x9a,0xb5},
+
+ {0x0e,0x07,0x07,0x09},
+ {0x24,0x12,0x12,0x36},
+ {0x1b,0x80,0x80,0x9b},
+ {0xdf,0xe2,0xe2,0x3d},
+
+ {0xcd,0xeb,0xeb,0x26},
+ {0x4e,0x27,0x27,0x69},
+ {0x7f,0xb2,0xb2,0xcd},
+ {0xea,0x75,0x75,0x9f},
+
+ {0x12,0x09,0x09,0x1b},
+ {0x1d,0x83,0x83,0x9e},
+ {0x58,0x2c,0x2c,0x74},
+ {0x34,0x1a,0x1a,0x2e},
+
+ {0x36,0x1b,0x1b,0x2d},
+ {0xdc,0x6e,0x6e,0xb2},
+ {0xb4,0x5a,0x5a,0xee},
+ {0x5b,0xa0,0xa0,0xfb},
+
+ {0xa4,0x52,0x52,0xf6},
+ {0x76,0x3b,0x3b,0x4d},
+ {0xb7,0xd6,0xd6,0x61},
+ {0x7d,0xb3,0xb3,0xce},
+
+ {0x52,0x29,0x29,0x7b},
+ {0xdd,0xe3,0xe3,0x3e},
+ {0x5e,0x2f,0x2f,0x71},
+ {0x13,0x84,0x84,0x97},
+
+ {0xa6,0x53,0x53,0xf5},
+ {0xb9,0xd1,0xd1,0x68},
+ {0x00,0x00,0x00,0x00},
+ {0xc1,0xed,0xed,0x2c},
+
+ {0x40,0x20,0x20,0x60},
+ {0xe3,0xfc,0xfc,0x1f},
+ {0x79,0xb1,0xb1,0xc8},
+ {0xb6,0x5b,0x5b,0xed},
+
+ {0xd4,0x6a,0x6a,0xbe},
+ {0x8d,0xcb,0xcb,0x46},
+ {0x67,0xbe,0xbe,0xd9},
+ {0x72,0x39,0x39,0x4b},
+
+ {0x94,0x4a,0x4a,0xde},
+ {0x98,0x4c,0x4c,0xd4},
+ {0xb0,0x58,0x58,0xe8},
+ {0x85,0xcf,0xcf,0x4a},
+
+ {0xbb,0xd0,0xd0,0x6b},
+ {0xc5,0xef,0xef,0x2a},
+ {0x4f,0xaa,0xaa,0xe5},
+ {0xed,0xfb,0xfb,0x16},
+
+ {0x86,0x43,0x43,0xc5},
+ {0x9a,0x4d,0x4d,0xd7},
+ {0x66,0x33,0x33,0x55},
+ {0x11,0x85,0x85,0x94},
+
+ {0x8a,0x45,0x45,0xcf},
+ {0xe9,0xf9,0xf9,0x10},
+ {0x04,0x02,0x02,0x06},
+ {0xfe,0x7f,0x7f,0x81},
+
+ {0xa0,0x50,0x50,0xf0},
+ {0x78,0x3c,0x3c,0x44},
+ {0x25,0x9f,0x9f,0xba},
+ {0x4b,0xa8,0xa8,0xe3},
+
+ {0xa2,0x51,0x51,0xf3},
+ {0x5d,0xa3,0xa3,0xfe},
+ {0x80,0x40,0x40,0xc0},
+ {0x05,0x8f,0x8f,0x8a},
+
+ {0x3f,0x92,0x92,0xad},
+ {0x21,0x9d,0x9d,0xbc},
+ {0x70,0x38,0x38,0x48},
+ {0xf1,0xf5,0xf5,0x04},
+
+ {0x63,0xbc,0xbc,0xdf},
+ {0x77,0xb6,0xb6,0xc1},
+ {0xaf,0xda,0xda,0x75},
+ {0x42,0x21,0x21,0x63},
+
+ {0x20,0x10,0x10,0x30},
+ {0xe5,0xff,0xff,0x1a},
+ {0xfd,0xf3,0xf3,0x0e},
+ {0xbf,0xd2,0xd2,0x6d},
+
+ {0x81,0xcd,0xcd,0x4c},
+ {0x18,0x0c,0x0c,0x14},
+ {0x26,0x13,0x13,0x35},
+ {0xc3,0xec,0xec,0x2f},
+
+ {0xbe,0x5f,0x5f,0xe1},
+ {0x35,0x97,0x97,0xa2},
+ {0x88,0x44,0x44,0xcc},
+ {0x2e,0x17,0x17,0x39},
+
+ {0x93,0xc4,0xc4,0x57},
+ {0x55,0xa7,0xa7,0xf2},
+ {0xfc,0x7e,0x7e,0x82},
+ {0x7a,0x3d,0x3d,0x47},
+
+ {0xc8,0x64,0x64,0xac},
+ {0xba,0x5d,0x5d,0xe7},
+ {0x32,0x19,0x19,0x2b},
+ {0xe6,0x73,0x73,0x95},
+
+ {0xc0,0x60,0x60,0xa0},
+ {0x19,0x81,0x81,0x98},
+ {0x9e,0x4f,0x4f,0xd1},
+ {0xa3,0xdc,0xdc,0x7f},
+
+ {0x44,0x22,0x22,0x66},
+ {0x54,0x2a,0x2a,0x7e},
+ {0x3b,0x90,0x90,0xab},
+ {0x0b,0x88,0x88,0x83},
+
+ {0x8c,0x46,0x46,0xca},
+ {0xc7,0xee,0xee,0x29},
+ {0x6b,0xb8,0xb8,0xd3},
+ {0x28,0x14,0x14,0x3c},
+
+ {0xa7,0xde,0xde,0x79},
+ {0xbc,0x5e,0x5e,0xe2},
+ {0x16,0x0b,0x0b,0x1d},
+ {0xad,0xdb,0xdb,0x76},
+
+ {0xdb,0xe0,0xe0,0x3b},
+ {0x64,0x32,0x32,0x56},
+ {0x74,0x3a,0x3a,0x4e},
+ {0x14,0x0a,0x0a,0x1e},
+
+ {0x92,0x49,0x49,0xdb},
+ {0x0c,0x06,0x06,0x0a},
+ {0x48,0x24,0x24,0x6c},
+ {0xb8,0x5c,0x5c,0xe4},
+
+ {0x9f,0xc2,0xc2,0x5d},
+ {0xbd,0xd3,0xd3,0x6e},
+ {0x43,0xac,0xac,0xef},
+ {0xc4,0x62,0x62,0xa6},
+
+ {0x39,0x91,0x91,0xa8},
+ {0x31,0x95,0x95,0xa4},
+ {0xd3,0xe4,0xe4,0x37},
+ {0xf2,0x79,0x79,0x8b},
+
+ {0xd5,0xe7,0xe7,0x32},
+ {0x8b,0xc8,0xc8,0x43},
+ {0x6e,0x37,0x37,0x59},
+ {0xda,0x6d,0x6d,0xb7},
+
+ {0x01,0x8d,0x8d,0x8c},
+ {0xb1,0xd5,0xd5,0x64},
+ {0x9c,0x4e,0x4e,0xd2},
+ {0x49,0xa9,0xa9,0xe0},
+
+ {0xd8,0x6c,0x6c,0xb4},
+ {0xac,0x56,0x56,0xfa},
+ {0xf3,0xf4,0xf4,0x07},
+ {0xcf,0xea,0xea,0x25},
+
+ {0xca,0x65,0x65,0xaf},
+ {0xf4,0x7a,0x7a,0x8e},
+ {0x47,0xae,0xae,0xe9},
+ {0x10,0x08,0x08,0x18},
+
+ {0x6f,0xba,0xba,0xd5},
+ {0xf0,0x78,0x78,0x88},
+ {0x4a,0x25,0x25,0x6f},
+ {0x5c,0x2e,0x2e,0x72},
+
+ {0x38,0x1c,0x1c,0x24},
+ {0x57,0xa6,0xa6,0xf1},
+ {0x73,0xb4,0xb4,0xc7},
+ {0x97,0xc6,0xc6,0x51},
+
+ {0xcb,0xe8,0xe8,0x23},
+ {0xa1,0xdd,0xdd,0x7c},
+ {0xe8,0x74,0x74,0x9c},
+ {0x3e,0x1f,0x1f,0x21},
+
+ {0x96,0x4b,0x4b,0xdd},
+ {0x61,0xbd,0xbd,0xdc},
+ {0x0d,0x8b,0x8b,0x86},
+ {0x0f,0x8a,0x8a,0x85},
+
+ {0xe0,0x70,0x70,0x90},
+ {0x7c,0x3e,0x3e,0x42},
+ {0x71,0xb5,0xb5,0xc4},
+ {0xcc,0x66,0x66,0xaa},
+
+ {0x90,0x48,0x48,0xd8},
+ {0x06,0x03,0x03,0x05},
+ {0xf7,0xf6,0xf6,0x01},
+ {0x1c,0x0e,0x0e,0x12},
+
+ {0xc2,0x61,0x61,0xa3},
+ {0x6a,0x35,0x35,0x5f},
+ {0xae,0x57,0x57,0xf9},
+ {0x69,0xb9,0xb9,0xd0},
+
+ {0x17,0x86,0x86,0x91},
+ {0x99,0xc1,0xc1,0x58},
+ {0x3a,0x1d,0x1d,0x27},
+ {0x27,0x9e,0x9e,0xb9},
+
+ {0xd9,0xe1,0xe1,0x38},
+ {0xeb,0xf8,0xf8,0x13},
+ {0x2b,0x98,0x98,0xb3},
+ {0x22,0x11,0x11,0x33},
+
+ {0xd2,0x69,0x69,0xbb},
+ {0xa9,0xd9,0xd9,0x70},
+ {0x07,0x8e,0x8e,0x89},
+ {0x33,0x94,0x94,0xa7},
+
+ {0x2d,0x9b,0x9b,0xb6},
+ {0x3c,0x1e,0x1e,0x22},
+ {0x15,0x87,0x87,0x92},
+ {0xc9,0xe9,0xe9,0x20},
+
+ {0x87,0xce,0xce,0x49},
+ {0xaa,0x55,0x55,0xff},
+ {0x50,0x28,0x28,0x78},
+ {0xa5,0xdf,0xdf,0x7a},
+
+ {0x03,0x8c,0x8c,0x8f},
+ {0x59,0xa1,0xa1,0xf8},
+ {0x09,0x89,0x89,0x80},
+ {0x1a,0x0d,0x0d,0x17},
+
+ {0x65,0xbf,0xbf,0xda},
+ {0xd7,0xe6,0xe6,0x31},
+ {0x84,0x42,0x42,0xc6},
+ {0xd0,0x68,0x68,0xb8},
+
+ {0x82,0x41,0x41,0xc3},
+ {0x29,0x99,0x99,0xb0},
+ {0x5a,0x2d,0x2d,0x77},
+ {0x1e,0x0f,0x0f,0x11},
+
+ {0x7b,0xb0,0xb0,0xcb},
+ {0xa8,0x54,0x54,0xfc},
+ {0x6d,0xbb,0xbb,0xd6},
+ {0x2c,0x16,0x16,0x3a},
+
+};
+
+word8 T2[256][4] = {
+ {0xa5,0xc6,0x63,0x63},
+ {0x84,0xf8,0x7c,0x7c},
+ {0x99,0xee,0x77,0x77},
+ {0x8d,0xf6,0x7b,0x7b},
+
+ {0x0d,0xff,0xf2,0xf2},
+ {0xbd,0xd6,0x6b,0x6b},
+ {0xb1,0xde,0x6f,0x6f},
+ {0x54,0x91,0xc5,0xc5},
+
+ {0x50,0x60,0x30,0x30},
+ {0x03,0x02,0x01,0x01},
+ {0xa9,0xce,0x67,0x67},
+ {0x7d,0x56,0x2b,0x2b},
+
+ {0x19,0xe7,0xfe,0xfe},
+ {0x62,0xb5,0xd7,0xd7},
+ {0xe6,0x4d,0xab,0xab},
+ {0x9a,0xec,0x76,0x76},
+
+ {0x45,0x8f,0xca,0xca},
+ {0x9d,0x1f,0x82,0x82},
+ {0x40,0x89,0xc9,0xc9},
+ {0x87,0xfa,0x7d,0x7d},
+
+ {0x15,0xef,0xfa,0xfa},
+ {0xeb,0xb2,0x59,0x59},
+ {0xc9,0x8e,0x47,0x47},
+ {0x0b,0xfb,0xf0,0xf0},
+
+ {0xec,0x41,0xad,0xad},
+ {0x67,0xb3,0xd4,0xd4},
+ {0xfd,0x5f,0xa2,0xa2},
+ {0xea,0x45,0xaf,0xaf},
+
+ {0xbf,0x23,0x9c,0x9c},
+ {0xf7,0x53,0xa4,0xa4},
+ {0x96,0xe4,0x72,0x72},
+ {0x5b,0x9b,0xc0,0xc0},
+
+ {0xc2,0x75,0xb7,0xb7},
+ {0x1c,0xe1,0xfd,0xfd},
+ {0xae,0x3d,0x93,0x93},
+ {0x6a,0x4c,0x26,0x26},
+
+ {0x5a,0x6c,0x36,0x36},
+ {0x41,0x7e,0x3f,0x3f},
+ {0x02,0xf5,0xf7,0xf7},
+ {0x4f,0x83,0xcc,0xcc},
+
+ {0x5c,0x68,0x34,0x34},
+ {0xf4,0x51,0xa5,0xa5},
+ {0x34,0xd1,0xe5,0xe5},
+ {0x08,0xf9,0xf1,0xf1},
+
+ {0x93,0xe2,0x71,0x71},
+ {0x73,0xab,0xd8,0xd8},
+ {0x53,0x62,0x31,0x31},
+ {0x3f,0x2a,0x15,0x15},
+
+ {0x0c,0x08,0x04,0x04},
+ {0x52,0x95,0xc7,0xc7},
+ {0x65,0x46,0x23,0x23},
+ {0x5e,0x9d,0xc3,0xc3},
+
+ {0x28,0x30,0x18,0x18},
+ {0xa1,0x37,0x96,0x96},
+ {0x0f,0x0a,0x05,0x05},
+ {0xb5,0x2f,0x9a,0x9a},
+
+ {0x09,0x0e,0x07,0x07},
+ {0x36,0x24,0x12,0x12},
+ {0x9b,0x1b,0x80,0x80},
+ {0x3d,0xdf,0xe2,0xe2},
+
+ {0x26,0xcd,0xeb,0xeb},
+ {0x69,0x4e,0x27,0x27},
+ {0xcd,0x7f,0xb2,0xb2},
+ {0x9f,0xea,0x75,0x75},
+
+ {0x1b,0x12,0x09,0x09},
+ {0x9e,0x1d,0x83,0x83},
+ {0x74,0x58,0x2c,0x2c},
+ {0x2e,0x34,0x1a,0x1a},
+
+ {0x2d,0x36,0x1b,0x1b},
+ {0xb2,0xdc,0x6e,0x6e},
+ {0xee,0xb4,0x5a,0x5a},
+ {0xfb,0x5b,0xa0,0xa0},
+
+ {0xf6,0xa4,0x52,0x52},
+ {0x4d,0x76,0x3b,0x3b},
+ {0x61,0xb7,0xd6,0xd6},
+ {0xce,0x7d,0xb3,0xb3},
+
+ {0x7b,0x52,0x29,0x29},
+ {0x3e,0xdd,0xe3,0xe3},
+ {0x71,0x5e,0x2f,0x2f},
+ {0x97,0x13,0x84,0x84},
+
+ {0xf5,0xa6,0x53,0x53},
+ {0x68,0xb9,0xd1,0xd1},
+ {0x00,0x00,0x00,0x00},
+ {0x2c,0xc1,0xed,0xed},
+
+ {0x60,0x40,0x20,0x20},
+ {0x1f,0xe3,0xfc,0xfc},
+ {0xc8,0x79,0xb1,0xb1},
+ {0xed,0xb6,0x5b,0x5b},
+
+ {0xbe,0xd4,0x6a,0x6a},
+ {0x46,0x8d,0xcb,0xcb},
+ {0xd9,0x67,0xbe,0xbe},
+ {0x4b,0x72,0x39,0x39},
+
+ {0xde,0x94,0x4a,0x4a},
+ {0xd4,0x98,0x4c,0x4c},
+ {0xe8,0xb0,0x58,0x58},
+ {0x4a,0x85,0xcf,0xcf},
+
+ {0x6b,0xbb,0xd0,0xd0},
+ {0x2a,0xc5,0xef,0xef},
+ {0xe5,0x4f,0xaa,0xaa},
+ {0x16,0xed,0xfb,0xfb},
+
+ {0xc5,0x86,0x43,0x43},
+ {0xd7,0x9a,0x4d,0x4d},
+ {0x55,0x66,0x33,0x33},
+ {0x94,0x11,0x85,0x85},
+
+ {0xcf,0x8a,0x45,0x45},
+ {0x10,0xe9,0xf9,0xf9},
+ {0x06,0x04,0x02,0x02},
+ {0x81,0xfe,0x7f,0x7f},
+
+ {0xf0,0xa0,0x50,0x50},
+ {0x44,0x78,0x3c,0x3c},
+ {0xba,0x25,0x9f,0x9f},
+ {0xe3,0x4b,0xa8,0xa8},
+
+ {0xf3,0xa2,0x51,0x51},
+ {0xfe,0x5d,0xa3,0xa3},
+ {0xc0,0x80,0x40,0x40},
+ {0x8a,0x05,0x8f,0x8f},
+
+ {0xad,0x3f,0x92,0x92},
+ {0xbc,0x21,0x9d,0x9d},
+ {0x48,0x70,0x38,0x38},
+ {0x04,0xf1,0xf5,0xf5},
+
+ {0xdf,0x63,0xbc,0xbc},
+ {0xc1,0x77,0xb6,0xb6},
+ {0x75,0xaf,0xda,0xda},
+ {0x63,0x42,0x21,0x21},
+
+ {0x30,0x20,0x10,0x10},
+ {0x1a,0xe5,0xff,0xff},
+ {0x0e,0xfd,0xf3,0xf3},
+ {0x6d,0xbf,0xd2,0xd2},
+
+ {0x4c,0x81,0xcd,0xcd},
+ {0x14,0x18,0x0c,0x0c},
+ {0x35,0x26,0x13,0x13},
+ {0x2f,0xc3,0xec,0xec},
+
+ {0xe1,0xbe,0x5f,0x5f},
+ {0xa2,0x35,0x97,0x97},
+ {0xcc,0x88,0x44,0x44},
+ {0x39,0x2e,0x17,0x17},
+
+ {0x57,0x93,0xc4,0xc4},
+ {0xf2,0x55,0xa7,0xa7},
+ {0x82,0xfc,0x7e,0x7e},
+ {0x47,0x7a,0x3d,0x3d},
+
+ {0xac,0xc8,0x64,0x64},
+ {0xe7,0xba,0x5d,0x5d},
+ {0x2b,0x32,0x19,0x19},
+ {0x95,0xe6,0x73,0x73},
+
+ {0xa0,0xc0,0x60,0x60},
+ {0x98,0x19,0x81,0x81},
+ {0xd1,0x9e,0x4f,0x4f},
+ {0x7f,0xa3,0xdc,0xdc},
+
+ {0x66,0x44,0x22,0x22},
+ {0x7e,0x54,0x2a,0x2a},
+ {0xab,0x3b,0x90,0x90},
+ {0x83,0x0b,0x88,0x88},
+
+ {0xca,0x8c,0x46,0x46},
+ {0x29,0xc7,0xee,0xee},
+ {0xd3,0x6b,0xb8,0xb8},
+ {0x3c,0x28,0x14,0x14},
+
+ {0x79,0xa7,0xde,0xde},
+ {0xe2,0xbc,0x5e,0x5e},
+ {0x1d,0x16,0x0b,0x0b},
+ {0x76,0xad,0xdb,0xdb},
+
+ {0x3b,0xdb,0xe0,0xe0},
+ {0x56,0x64,0x32,0x32},
+ {0x4e,0x74,0x3a,0x3a},
+ {0x1e,0x14,0x0a,0x0a},
+
+ {0xdb,0x92,0x49,0x49},
+ {0x0a,0x0c,0x06,0x06},
+ {0x6c,0x48,0x24,0x24},
+ {0xe4,0xb8,0x5c,0x5c},
+
+ {0x5d,0x9f,0xc2,0xc2},
+ {0x6e,0xbd,0xd3,0xd3},
+ {0xef,0x43,0xac,0xac},
+ {0xa6,0xc4,0x62,0x62},
+
+ {0xa8,0x39,0x91,0x91},
+ {0xa4,0x31,0x95,0x95},
+ {0x37,0xd3,0xe4,0xe4},
+ {0x8b,0xf2,0x79,0x79},
+
+ {0x32,0xd5,0xe7,0xe7},
+ {0x43,0x8b,0xc8,0xc8},
+ {0x59,0x6e,0x37,0x37},
+ {0xb7,0xda,0x6d,0x6d},
+
+ {0x8c,0x01,0x8d,0x8d},
+ {0x64,0xb1,0xd5,0xd5},
+ {0xd2,0x9c,0x4e,0x4e},
+ {0xe0,0x49,0xa9,0xa9},
+
+ {0xb4,0xd8,0x6c,0x6c},
+ {0xfa,0xac,0x56,0x56},
+ {0x07,0xf3,0xf4,0xf4},
+ {0x25,0xcf,0xea,0xea},
+
+ {0xaf,0xca,0x65,0x65},
+ {0x8e,0xf4,0x7a,0x7a},
+ {0xe9,0x47,0xae,0xae},
+ {0x18,0x10,0x08,0x08},
+
+ {0xd5,0x6f,0xba,0xba},
+ {0x88,0xf0,0x78,0x78},
+ {0x6f,0x4a,0x25,0x25},
+ {0x72,0x5c,0x2e,0x2e},
+
+ {0x24,0x38,0x1c,0x1c},
+ {0xf1,0x57,0xa6,0xa6},
+ {0xc7,0x73,0xb4,0xb4},
+ {0x51,0x97,0xc6,0xc6},
+
+ {0x23,0xcb,0xe8,0xe8},
+ {0x7c,0xa1,0xdd,0xdd},
+ {0x9c,0xe8,0x74,0x74},
+ {0x21,0x3e,0x1f,0x1f},
+
+ {0xdd,0x96,0x4b,0x4b},
+ {0xdc,0x61,0xbd,0xbd},
+ {0x86,0x0d,0x8b,0x8b},
+ {0x85,0x0f,0x8a,0x8a},
+
+ {0x90,0xe0,0x70,0x70},
+ {0x42,0x7c,0x3e,0x3e},
+ {0xc4,0x71,0xb5,0xb5},
+ {0xaa,0xcc,0x66,0x66},
+
+ {0xd8,0x90,0x48,0x48},
+ {0x05,0x06,0x03,0x03},
+ {0x01,0xf7,0xf6,0xf6},
+ {0x12,0x1c,0x0e,0x0e},
+
+ {0xa3,0xc2,0x61,0x61},
+ {0x5f,0x6a,0x35,0x35},
+ {0xf9,0xae,0x57,0x57},
+ {0xd0,0x69,0xb9,0xb9},
+
+ {0x91,0x17,0x86,0x86},
+ {0x58,0x99,0xc1,0xc1},
+ {0x27,0x3a,0x1d,0x1d},
+ {0xb9,0x27,0x9e,0x9e},
+
+ {0x38,0xd9,0xe1,0xe1},
+ {0x13,0xeb,0xf8,0xf8},
+ {0xb3,0x2b,0x98,0x98},
+ {0x33,0x22,0x11,0x11},
+
+ {0xbb,0xd2,0x69,0x69},
+ {0x70,0xa9,0xd9,0xd9},
+ {0x89,0x07,0x8e,0x8e},
+ {0xa7,0x33,0x94,0x94},
+
+ {0xb6,0x2d,0x9b,0x9b},
+ {0x22,0x3c,0x1e,0x1e},
+ {0x92,0x15,0x87,0x87},
+ {0x20,0xc9,0xe9,0xe9},
+
+ {0x49,0x87,0xce,0xce},
+ {0xff,0xaa,0x55,0x55},
+ {0x78,0x50,0x28,0x28},
+ {0x7a,0xa5,0xdf,0xdf},
+
+ {0x8f,0x03,0x8c,0x8c},
+ {0xf8,0x59,0xa1,0xa1},
+ {0x80,0x09,0x89,0x89},
+ {0x17,0x1a,0x0d,0x0d},
+
+ {0xda,0x65,0xbf,0xbf},
+ {0x31,0xd7,0xe6,0xe6},
+ {0xc6,0x84,0x42,0x42},
+ {0xb8,0xd0,0x68,0x68},
+
+ {0xc3,0x82,0x41,0x41},
+ {0xb0,0x29,0x99,0x99},
+ {0x77,0x5a,0x2d,0x2d},
+ {0x11,0x1e,0x0f,0x0f},
+
+ {0xcb,0x7b,0xb0,0xb0},
+ {0xfc,0xa8,0x54,0x54},
+ {0xd6,0x6d,0xbb,0xbb},
+ {0x3a,0x2c,0x16,0x16},
+
+};
+
+word8 T3[256][4] = {
+ {0x63,0xa5,0xc6,0x63},
+ {0x7c,0x84,0xf8,0x7c},
+ {0x77,0x99,0xee,0x77},
+ {0x7b,0x8d,0xf6,0x7b},
+
+ {0xf2,0x0d,0xff,0xf2},
+ {0x6b,0xbd,0xd6,0x6b},
+ {0x6f,0xb1,0xde,0x6f},
+ {0xc5,0x54,0x91,0xc5},
+
+ {0x30,0x50,0x60,0x30},
+ {0x01,0x03,0x02,0x01},
+ {0x67,0xa9,0xce,0x67},
+ {0x2b,0x7d,0x56,0x2b},
+
+ {0xfe,0x19,0xe7,0xfe},
+ {0xd7,0x62,0xb5,0xd7},
+ {0xab,0xe6,0x4d,0xab},
+ {0x76,0x9a,0xec,0x76},
+
+ {0xca,0x45,0x8f,0xca},
+ {0x82,0x9d,0x1f,0x82},
+ {0xc9,0x40,0x89,0xc9},
+ {0x7d,0x87,0xfa,0x7d},
+
+ {0xfa,0x15,0xef,0xfa},
+ {0x59,0xeb,0xb2,0x59},
+ {0x47,0xc9,0x8e,0x47},
+ {0xf0,0x0b,0xfb,0xf0},
+
+ {0xad,0xec,0x41,0xad},
+ {0xd4,0x67,0xb3,0xd4},
+ {0xa2,0xfd,0x5f,0xa2},
+ {0xaf,0xea,0x45,0xaf},
+
+ {0x9c,0xbf,0x23,0x9c},
+ {0xa4,0xf7,0x53,0xa4},
+ {0x72,0x96,0xe4,0x72},
+ {0xc0,0x5b,0x9b,0xc0},
+
+ {0xb7,0xc2,0x75,0xb7},
+ {0xfd,0x1c,0xe1,0xfd},
+ {0x93,0xae,0x3d,0x93},
+ {0x26,0x6a,0x4c,0x26},
+
+ {0x36,0x5a,0x6c,0x36},
+ {0x3f,0x41,0x7e,0x3f},
+ {0xf7,0x02,0xf5,0xf7},
+ {0xcc,0x4f,0x83,0xcc},
+
+ {0x34,0x5c,0x68,0x34},
+ {0xa5,0xf4,0x51,0xa5},
+ {0xe5,0x34,0xd1,0xe5},
+ {0xf1,0x08,0xf9,0xf1},
+
+ {0x71,0x93,0xe2,0x71},
+ {0xd8,0x73,0xab,0xd8},
+ {0x31,0x53,0x62,0x31},
+ {0x15,0x3f,0x2a,0x15},
+
+ {0x04,0x0c,0x08,0x04},
+ {0xc7,0x52,0x95,0xc7},
+ {0x23,0x65,0x46,0x23},
+ {0xc3,0x5e,0x9d,0xc3},
+
+ {0x18,0x28,0x30,0x18},
+ {0x96,0xa1,0x37,0x96},
+ {0x05,0x0f,0x0a,0x05},
+ {0x9a,0xb5,0x2f,0x9a},
+
+ {0x07,0x09,0x0e,0x07},
+ {0x12,0x36,0x24,0x12},
+ {0x80,0x9b,0x1b,0x80},
+ {0xe2,0x3d,0xdf,0xe2},
+
+ {0xeb,0x26,0xcd,0xeb},
+ {0x27,0x69,0x4e,0x27},
+ {0xb2,0xcd,0x7f,0xb2},
+ {0x75,0x9f,0xea,0x75},
+
+ {0x09,0x1b,0x12,0x09},
+ {0x83,0x9e,0x1d,0x83},
+ {0x2c,0x74,0x58,0x2c},
+ {0x1a,0x2e,0x34,0x1a},
+
+ {0x1b,0x2d,0x36,0x1b},
+ {0x6e,0xb2,0xdc,0x6e},
+ {0x5a,0xee,0xb4,0x5a},
+ {0xa0,0xfb,0x5b,0xa0},
+
+ {0x52,0xf6,0xa4,0x52},
+ {0x3b,0x4d,0x76,0x3b},
+ {0xd6,0x61,0xb7,0xd6},
+ {0xb3,0xce,0x7d,0xb3},
+
+ {0x29,0x7b,0x52,0x29},
+ {0xe3,0x3e,0xdd,0xe3},
+ {0x2f,0x71,0x5e,0x2f},
+ {0x84,0x97,0x13,0x84},
+
+ {0x53,0xf5,0xa6,0x53},
+ {0xd1,0x68,0xb9,0xd1},
+ {0x00,0x00,0x00,0x00},
+ {0xed,0x2c,0xc1,0xed},
+
+ {0x20,0x60,0x40,0x20},
+ {0xfc,0x1f,0xe3,0xfc},
+ {0xb1,0xc8,0x79,0xb1},
+ {0x5b,0xed,0xb6,0x5b},
+
+ {0x6a,0xbe,0xd4,0x6a},
+ {0xcb,0x46,0x8d,0xcb},
+ {0xbe,0xd9,0x67,0xbe},
+ {0x39,0x4b,0x72,0x39},
+
+ {0x4a,0xde,0x94,0x4a},
+ {0x4c,0xd4,0x98,0x4c},
+ {0x58,0xe8,0xb0,0x58},
+ {0xcf,0x4a,0x85,0xcf},
+
+ {0xd0,0x6b,0xbb,0xd0},
+ {0xef,0x2a,0xc5,0xef},
+ {0xaa,0xe5,0x4f,0xaa},
+ {0xfb,0x16,0xed,0xfb},
+
+ {0x43,0xc5,0x86,0x43},
+ {0x4d,0xd7,0x9a,0x4d},
+ {0x33,0x55,0x66,0x33},
+ {0x85,0x94,0x11,0x85},
+
+ {0x45,0xcf,0x8a,0x45},
+ {0xf9,0x10,0xe9,0xf9},
+ {0x02,0x06,0x04,0x02},
+ {0x7f,0x81,0xfe,0x7f},
+
+ {0x50,0xf0,0xa0,0x50},
+ {0x3c,0x44,0x78,0x3c},
+ {0x9f,0xba,0x25,0x9f},
+ {0xa8,0xe3,0x4b,0xa8},
+
+ {0x51,0xf3,0xa2,0x51},
+ {0xa3,0xfe,0x5d,0xa3},
+ {0x40,0xc0,0x80,0x40},
+ {0x8f,0x8a,0x05,0x8f},
+
+ {0x92,0xad,0x3f,0x92},
+ {0x9d,0xbc,0x21,0x9d},
+ {0x38,0x48,0x70,0x38},
+ {0xf5,0x04,0xf1,0xf5},
+
+ {0xbc,0xdf,0x63,0xbc},
+ {0xb6,0xc1,0x77,0xb6},
+ {0xda,0x75,0xaf,0xda},
+ {0x21,0x63,0x42,0x21},
+
+ {0x10,0x30,0x20,0x10},
+ {0xff,0x1a,0xe5,0xff},
+ {0xf3,0x0e,0xfd,0xf3},
+ {0xd2,0x6d,0xbf,0xd2},
+
+ {0xcd,0x4c,0x81,0xcd},
+ {0x0c,0x14,0x18,0x0c},
+ {0x13,0x35,0x26,0x13},
+ {0xec,0x2f,0xc3,0xec},
+
+ {0x5f,0xe1,0xbe,0x5f},
+ {0x97,0xa2,0x35,0x97},
+ {0x44,0xcc,0x88,0x44},
+ {0x17,0x39,0x2e,0x17},
+
+ {0xc4,0x57,0x93,0xc4},
+ {0xa7,0xf2,0x55,0xa7},
+ {0x7e,0x82,0xfc,0x7e},
+ {0x3d,0x47,0x7a,0x3d},
+
+ {0x64,0xac,0xc8,0x64},
+ {0x5d,0xe7,0xba,0x5d},
+ {0x19,0x2b,0x32,0x19},
+ {0x73,0x95,0xe6,0x73},
+
+ {0x60,0xa0,0xc0,0x60},
+ {0x81,0x98,0x19,0x81},
+ {0x4f,0xd1,0x9e,0x4f},
+ {0xdc,0x7f,0xa3,0xdc},
+
+ {0x22,0x66,0x44,0x22},
+ {0x2a,0x7e,0x54,0x2a},
+ {0x90,0xab,0x3b,0x90},
+ {0x88,0x83,0x0b,0x88},
+
+ {0x46,0xca,0x8c,0x46},
+ {0xee,0x29,0xc7,0xee},
+ {0xb8,0xd3,0x6b,0xb8},
+ {0x14,0x3c,0x28,0x14},
+
+ {0xde,0x79,0xa7,0xde},
+ {0x5e,0xe2,0xbc,0x5e},
+ {0x0b,0x1d,0x16,0x0b},
+ {0xdb,0x76,0xad,0xdb},
+
+ {0xe0,0x3b,0xdb,0xe0},
+ {0x32,0x56,0x64,0x32},
+ {0x3a,0x4e,0x74,0x3a},
+ {0x0a,0x1e,0x14,0x0a},
+
+ {0x49,0xdb,0x92,0x49},
+ {0x06,0x0a,0x0c,0x06},
+ {0x24,0x6c,0x48,0x24},
+ {0x5c,0xe4,0xb8,0x5c},
+
+ {0xc2,0x5d,0x9f,0xc2},
+ {0xd3,0x6e,0xbd,0xd3},
+ {0xac,0xef,0x43,0xac},
+ {0x62,0xa6,0xc4,0x62},
+
+ {0x91,0xa8,0x39,0x91},
+ {0x95,0xa4,0x31,0x95},
+ {0xe4,0x37,0xd3,0xe4},
+ {0x79,0x8b,0xf2,0x79},
+
+ {0xe7,0x32,0xd5,0xe7},
+ {0xc8,0x43,0x8b,0xc8},
+ {0x37,0x59,0x6e,0x37},
+ {0x6d,0xb7,0xda,0x6d},
+
+ {0x8d,0x8c,0x01,0x8d},
+ {0xd5,0x64,0xb1,0xd5},
+ {0x4e,0xd2,0x9c,0x4e},
+ {0xa9,0xe0,0x49,0xa9},
+
+ {0x6c,0xb4,0xd8,0x6c},
+ {0x56,0xfa,0xac,0x56},
+ {0xf4,0x07,0xf3,0xf4},
+ {0xea,0x25,0xcf,0xea},
+
+ {0x65,0xaf,0xca,0x65},
+ {0x7a,0x8e,0xf4,0x7a},
+ {0xae,0xe9,0x47,0xae},
+ {0x08,0x18,0x10,0x08},
+
+ {0xba,0xd5,0x6f,0xba},
+ {0x78,0x88,0xf0,0x78},
+ {0x25,0x6f,0x4a,0x25},
+ {0x2e,0x72,0x5c,0x2e},
+
+ {0x1c,0x24,0x38,0x1c},
+ {0xa6,0xf1,0x57,0xa6},
+ {0xb4,0xc7,0x73,0xb4},
+ {0xc6,0x51,0x97,0xc6},
+
+ {0xe8,0x23,0xcb,0xe8},
+ {0xdd,0x7c,0xa1,0xdd},
+ {0x74,0x9c,0xe8,0x74},
+ {0x1f,0x21,0x3e,0x1f},
+
+ {0x4b,0xdd,0x96,0x4b},
+ {0xbd,0xdc,0x61,0xbd},
+ {0x8b,0x86,0x0d,0x8b},
+ {0x8a,0x85,0x0f,0x8a},
+
+ {0x70,0x90,0xe0,0x70},
+ {0x3e,0x42,0x7c,0x3e},
+ {0xb5,0xc4,0x71,0xb5},
+ {0x66,0xaa,0xcc,0x66},
+
+ {0x48,0xd8,0x90,0x48},
+ {0x03,0x05,0x06,0x03},
+ {0xf6,0x01,0xf7,0xf6},
+ {0x0e,0x12,0x1c,0x0e},
+
+ {0x61,0xa3,0xc2,0x61},
+ {0x35,0x5f,0x6a,0x35},
+ {0x57,0xf9,0xae,0x57},
+ {0xb9,0xd0,0x69,0xb9},
+
+ {0x86,0x91,0x17,0x86},
+ {0xc1,0x58,0x99,0xc1},
+ {0x1d,0x27,0x3a,0x1d},
+ {0x9e,0xb9,0x27,0x9e},
+
+ {0xe1,0x38,0xd9,0xe1},
+ {0xf8,0x13,0xeb,0xf8},
+ {0x98,0xb3,0x2b,0x98},
+ {0x11,0x33,0x22,0x11},
+
+ {0x69,0xbb,0xd2,0x69},
+ {0xd9,0x70,0xa9,0xd9},
+ {0x8e,0x89,0x07,0x8e},
+ {0x94,0xa7,0x33,0x94},
+
+ {0x9b,0xb6,0x2d,0x9b},
+ {0x1e,0x22,0x3c,0x1e},
+ {0x87,0x92,0x15,0x87},
+ {0xe9,0x20,0xc9,0xe9},
+
+ {0xce,0x49,0x87,0xce},
+ {0x55,0xff,0xaa