diff options
Diffstat (limited to 'crypto/rijndael')
-rw-r--r-- | crypto/rijndael/Makefile.ssl | 5 | ||||
-rwxr-xr-x | crypto/rijndael/README | 164 | ||||
-rw-r--r-- | crypto/rijndael/boxes-fst-corrected.dat | 3986 | ||||
-rwxr-xr-x | crypto/rijndael/rd_fst.c | 1814 | ||||
-rwxr-xr-x | crypto/rijndael/rd_fst.h | 67 | ||||
-rw-r--r-- | crypto/rijndael/rijndael.h | 6 |
6 files changed, 1486 insertions, 4556 deletions
diff --git a/crypto/rijndael/Makefile.ssl b/crypto/rijndael/Makefile.ssl index 368a82c5bd..681af560a0 100644 --- a/crypto/rijndael/Makefile.ssl +++ b/crypto/rijndael/Makefile.ssl @@ -20,10 +20,9 @@ RD_ENC= rd_enc.o # or use #DES_ENC= bx86-elf.o -CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -DINTERMEDIATE_VALUE_KAT -DBINARY_KEY_MATERIAL -O3 -fexpensive-optimizations -funroll-loops -fforce-addr +CFLAGS= -mpentiumpro $(INCLUDES) $(CFLAG) -O3 -fexpensive-optimizations -funroll-loops -fforce-addr GENERAL=Makefile -#TEST=rijndael-test-fst.c table.128 table.192 table.256 TEST= APPS= @@ -85,4 +84,4 @@ clean: # DO NOT DELETE THIS LINE -rd_fst.o: boxes-fst-corrected.dat rd_fst.h +rd_fst.o: rd_fst.h diff --git a/crypto/rijndael/README b/crypto/rijndael/README index 6d6f19fa49..1118ccbad8 100755 --- a/crypto/rijndael/README +++ b/crypto/rijndael/README @@ -1,84 +1,80 @@ -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. +Optimised ANSI C code for the Rijndael cipher (now AES) + +Authors: + Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> + Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> + Paulo Barreto <paulo.barreto@terra.com.br> + +All code contained in this distributed is placed in the public domain. + +======================================================================== + +Disclaimer: + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +======================================================================== + +Acknowledgements: + +We are deeply indebted to the following people for their bug reports, +fixes, and improvement suggestions to the API implementation. Though we +tried to list all contributions, we apologise in advance for any +missing reference: + +Andrew Bales <Andrew.Bales@Honeywell.com> +Markus Friedl <markus.friedl@informatik.uni-erlangen.de> +John Skodon <skodonj@webquill.com> + +======================================================================== + +Description: + +This optimised implementation of Rijndael is noticeably faster than the +previous versions on Intel processors under Win32 w/ MSVC 6.0. On the +same processor under Linux w/ gcc-2.95.2, the key setup is also +considerably faster, but normal encryption/decryption is only marginally +faster. + +To enable full loop unrolling for encryption/decryption, define the +conditional compilation directive FULL_UNROLL. This may help increase +performance or not, depending on the platform. + +To compute the intermediate value tests, define the conditional +compilation directive INTERMEDIATE_VALUE_KAT. It may be worthwhile to +define the TRACE_KAT_MCT directive too, which provides useful progress +information during the generation of the KAT and MCT sets. + +======================================================================== + +Contents: + +README This file +rijndael-alg-fst.c The algorithm implementation. +rijndael-alg-fst.h The corresponding header file. +rijndael-api-fst.c NIST's implementation. +rijndael-api-fst.h The corresponding header file. +rijndael-test-fst.c A simple program to generate test vectors. +table.128 Data for the table tests and 128-bit keys. +table.192 Data for the table tests and 192-bit keys. +table.256 Data for the table tests and 256-bit keys. +fips-test-vectors.txt Key schedule and ciphertext intermediate values + (reduced set proposed for FIPS inclusion). +Makefile A sample makefile; may need some changes, + depending on the C compiler used. + +N.B. Both the API implementation and the provisional reduced set of +test vectors are likely to change, according to NIST's final decision +regarding modes of operation and the FIPS contents. They are therefore +marked as "version 2.9" rather than "version 3.0". + diff --git a/crypto/rijndael/boxes-fst-corrected.dat b/crypto/rijndael/boxes-fst-corrected.dat deleted file mode 100644 index d3d01c0397..0000000000 --- a/crypto/rijndael/boxes-fst-corrected.dat +++ /dev/null @@ -1,3986 +0,0 @@ -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},< |