source:
freewrt/package/matrixssl/patches/matrixssl-1.2.4.diff@
428f140
| Last change on this file since 428f140 was 475ad56, checked in by , 20 years ago | |
|---|---|
|
|
| File size: 92.2 KB | |
-
matrixSsl.h
diff -urN matrixssl.old/matrixSsl.h matrixssl/matrixSsl.h
old new 154 154 155 155 #define SSL_OPTION_DELETE_SESSION 0 156 156 157 158 #define SSL_MD5_DIGEST_LENGTH 16 159 #define SSL_MD5_CONTEXT_DATA_SIZE 96 160 161 typedef struct { 162 unsigned char data[SSL_MD5_CONTEXT_DATA_SIZE]; 163 } sslMd5Context_t; 164 165 166 #define SSL_SHA1_DIGEST_LENGTH 20 167 #define SSL_SHA1_CONTEXT_DATA_SIZE 96 168 169 typedef struct { 170 unsigned char data[SSL_SHA1_CONTEXT_DATA_SIZE]; 171 } sslSha1Context_t; 172 173 174 #define SSL_CIPHER_CONTEXT_DATA_SIZE 784 175 176 typedef struct { 177 unsigned char data[SSL_CIPHER_CONTEXT_DATA_SIZE]; 178 } sslCipherContext_t; 179 157 180 /******************************************************************************/ 158 181 /* 159 182 Explicitly import these apis on Windows. If we're being included from the … … 220 243 char *privBuf, int32 privLen, char *privPass, 221 244 char *trustedCABuf, int32 trustedCALen); 222 245 246 247 /* 248 ARC4 (RC4) API 249 */ 250 251 SSLPUBLIC void matrixArc4Init(sslCipherContext_t *ctx, unsigned char *key, 252 int keylen); 253 254 SSLPUBLIC int matrixArc4(sslCipherContext_t *ctx, unsigned char *in, 255 unsigned char *out, int len); 256 257 /* 258 3DES (Triple-DES) API 259 */ 260 261 SSLPUBLIC int matrix3desInit(sslCipherContext_t *ctx, unsigned char *IV, 262 unsigned char *key, int keylen); 263 264 SSLPUBLIC int matrix3desEncrypt(sslCipherContext_t *ctx, unsigned char *pt, 265 unsigned char *ct, int len); 266 267 SSLPUBLIC int matrix3desDecrypt(sslCipherContext_t *ctx, unsigned char *ct, 268 unsigned char *pt, int len); 269 270 /* 271 AES API 272 */ 273 274 SSLPUBLIC int matrixAesInit(sslCipherContext_t *ctx, unsigned char *IV, 275 unsigned char *key, int keylen); 276 277 SSLPUBLIC int matrixAesEncrypt(sslCipherContext_t *ctx, unsigned char *pt, 278 unsigned char *ct, int len); 279 280 SSLPUBLIC int matrixAesDecrypt(sslCipherContext_t *ctx, unsigned char *ct, 281 unsigned char *pt, int len); 282 283 /* 284 MD5 API 285 */ 286 287 SSLPUBLIC void matrixMd5Init(sslMd5Context_t *ctx); 288 289 SSLPUBLIC void matrixMd5Update(sslMd5Context_t *ctx, const unsigned char *buf, 290 unsigned long len); 291 292 SSLPUBLIC int matrixMd5Final(sslMd5Context_t *ctx, unsigned char *hash); 293 294 SSLPUBLIC unsigned char *matrixMd5Digest(const unsigned char *buf, 295 unsigned long len, unsigned char *hash); 296 297 /* 298 SHA1 API 299 */ 300 301 SSLPUBLIC void matrixSha1Init(sslSha1Context_t *ctx); 302 303 SSLPUBLIC void matrixSha1Update(sslSha1Context_t *ctx, const unsigned char *buf, 304 unsigned long len); 305 306 SSLPUBLIC int matrixSha1Final(sslSha1Context_t *ctx, unsigned char *hash); 307 308 SSLPUBLIC unsigned char *matrixSha1Digest(const unsigned char *buf, 309 unsigned long len, unsigned char *hash); 310 223 311 /******************************************************************************/ 224 312 225 313 #ifdef __cplusplus -
src/crypto/cryptoLayer.h
diff -urN matrixssl.old/src/crypto/cryptoLayer.h matrixssl/src/crypto/cryptoLayer.h
old new 115 115 */ 116 116 /* #define USE_FULL_CERT_PARSE */ 117 117 /* #define USE_MD2 */ 118 #define USE_AES 118 119 119 120 /* 120 121 Now that we've set up the required defines, include the crypto layer header -
src/crypto/peersec/aes.c
diff -urN matrixssl.old/src/crypto/peersec/aes.c matrixssl/src/crypto/peersec/aes.c
old new 1 /* 2 * aes.c 3 * 4 * AES CBC block cipher implementation 5 */ 6 /* 7 * Copyright (c) PeerSec Networks, 2002-2004. All Rights Reserved. 8 * The latest version of this code is available at http://www.matrixssl.org 9 * 10 * This software is open source; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This General Public License does NOT permit incorporating this software 16 * into proprietary programs. If you are unable to comply with the GPL, a 17 * commercial license for this software may be purchased from PeerSec Networks 18 * at http://www.peersec.com 19 * 20 * This program is distributed in WITHOUT ANY WARRANTY; without even the 21 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 22 * See the GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, write to the Free Software 26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 27 * http://www.gnu.org/copyleft/gpl.html 28 */ 29 /******************************************************************************/ 30 31 #include "../cryptoLayer.h" 32 33 #ifdef USE_AES 34 35 /* The precomputed tables for AES */ 36 /* 37 Te0[x] = S [x].[02, 01, 01, 03]; 38 Te1[x] = S [x].[03, 02, 01, 01]; 39 Te2[x] = S [x].[01, 03, 02, 01]; 40 Te3[x] = S [x].[01, 01, 03, 02]; 41 Te4[x] = S [x].[01, 01, 01, 01]; 42 43 Td0[x] = Si[x].[0e, 09, 0d, 0b]; 44 Td1[x] = Si[x].[0b, 0e, 09, 0d]; 45 Td2[x] = Si[x].[0d, 0b, 0e, 09]; 46 Td3[x] = Si[x].[09, 0d, 0b, 0e]; 47 Td4[x] = Si[x].[01, 01, 01, 01]; 48 */ 49 50 static const ulong32 TE0[256] = { 51 0xc66363a5UL, 0xf87c7c84UL, 0xee777799UL, 0xf67b7b8dUL, 52 0xfff2f20dUL, 0xd66b6bbdUL, 0xde6f6fb1UL, 0x91c5c554UL, 53 0x60303050UL, 0x02010103UL, 0xce6767a9UL, 0x562b2b7dUL, 54 0xe7fefe19UL, 0xb5d7d762UL, 0x4dababe6UL, 0xec76769aUL, 55 0x8fcaca45UL, 0x1f82829dUL, 0x89c9c940UL, 0xfa7d7d87UL, 56 0xeffafa15UL, 0xb25959ebUL, 0x8e4747c9UL, 0xfbf0f00bUL, 57 0x41adadecUL, 0xb3d4d467UL, 0x5fa2a2fdUL, 0x45afafeaUL, 58 0x239c9cbfUL, 0x53a4a4f7UL, 0xe4727296UL, 0x9bc0c05bUL, 59 0x75b7b7c2UL, 0xe1fdfd1cUL, 0x3d9393aeUL, 0x4c26266aUL, 60 0x6c36365aUL, 0x7e3f3f41UL, 0xf5f7f702UL, 0x83cccc4fUL, 61 0x6834345cUL, 0x51a5a5f4UL, 0xd1e5e534UL, 0xf9f1f108UL, 62 0xe2717193UL, 0xabd8d873UL, 0x62313153UL, 0x2a15153fUL, 63 0x0804040cUL, 0x95c7c752UL, 0x46232365UL, 0x9dc3c35eUL, 64 0x30181828UL, 0x379696a1UL, 0x0a05050fUL, 0x2f9a9ab5UL, 65 0x0e070709UL, 0x24121236UL, 0x1b80809bUL, 0xdfe2e23dUL, 66 0xcdebeb26UL, 0x4e272769UL, 0x7fb2b2cdUL, 0xea75759fUL, 67 0x1209091bUL, 0x1d83839eUL, 0x582c2c74UL, 0x341a1a2eUL, 68 0x361b1b2dUL, 0xdc6e6eb2UL, 0xb45a5aeeUL, 0x5ba0a0fbUL, 69 0xa45252f6UL, 0x763b3b4dUL, 0xb7d6d661UL, 0x7db3b3ceUL, 70 0x5229297bUL, 0xdde3e33eUL, 0x5e2f2f71UL, 0x13848497UL, 71 0xa65353f5UL, 0xb9d1d168UL, 0x00000000UL, 0xc1eded2cUL, 72 0x40202060UL, 0xe3fcfc1fUL, 0x79b1b1c8UL, 0xb65b5bedUL, 73 0xd46a6abeUL, 0x8dcbcb46UL, 0x67bebed9UL, 0x7239394bUL, 74 0x944a4adeUL, 0x984c4cd4UL, 0xb05858e8UL, 0x85cfcf4aUL, 75 0xbbd0d06bUL, 0xc5efef2aUL, 0x4faaaae5UL, 0xedfbfb16UL, 76 0x864343c5UL, 0x9a4d4dd7UL, 0x66333355UL, 0x11858594UL, 77 0x8a4545cfUL, 0xe9f9f910UL, 0x04020206UL, 0xfe7f7f81UL, 78 0xa05050f0UL, 0x783c3c44UL, 0x259f9fbaUL, 0x4ba8a8e3UL, 79 0xa25151f3UL, 0x5da3a3feUL, 0x804040c0UL, 0x058f8f8aUL, 80 0x3f9292adUL, 0x219d9dbcUL, 0x70383848UL, 0xf1f5f504UL, 81 0x63bcbcdfUL, 0x77b6b6c1UL, 0xafdada75UL, 0x42212163UL, 82 0x20101030UL, 0xe5ffff1aUL, 0xfdf3f30eUL, 0xbfd2d26dUL, 83 0x81cdcd4cUL, 0x180c0c14UL, 0x26131335UL, 0xc3ecec2fUL, 84 0xbe5f5fe1UL, 0x359797a2UL, 0x884444ccUL, 0x2e171739UL, 85 0x93c4c457UL, 0x55a7a7f2UL, 0xfc7e7e82UL, 0x7a3d3d47UL, 86 0xc86464acUL, 0xba5d5de7UL, 0x3219192bUL, 0xe6737395UL, 87 0xc06060a0UL, 0x19818198UL, 0x9e4f4fd1UL, 0xa3dcdc7fUL, 88 0x44222266UL, 0x542a2a7eUL, 0x3b9090abUL, 0x0b888883UL, 89 0x8c4646caUL, 0xc7eeee29UL, 0x6bb8b8d3UL, 0x2814143cUL, 90 0xa7dede79UL, 0xbc5e5ee2UL, 0x160b0b1dUL, 0xaddbdb76UL, 91 0xdbe0e03bUL, 0x64323256UL, 0x743a3a4eUL, 0x140a0a1eUL, 92 0x924949dbUL, 0x0c06060aUL, 0x4824246cUL, 0xb85c5ce4UL, 93 0x9fc2c25dUL, 0xbdd3d36eUL, 0x43acacefUL, 0xc46262a6UL, 94 0x399191a8UL, 0x319595a4UL, 0xd3e4e437UL, 0xf279798bUL, 95 0xd5e7e732UL, 0x8bc8c843UL, 0x6e373759UL, 0xda6d6db7UL, 96 0x018d8d8cUL, 0xb1d5d564UL, 0x9c4e4ed2UL, 0x49a9a9e0UL, 97 0xd86c6cb4UL, 0xac5656faUL, 0xf3f4f407UL, 0xcfeaea25UL, 98 0xca6565afUL, 0xf47a7a8eUL, 0x47aeaee9UL, 0x10080818UL, 99 0x6fbabad5UL, 0xf0787888UL, 0x4a25256fUL, 0x5c2e2e72UL, 100 0x381c1c24UL, 0x57a6a6f1UL, 0x73b4b4c7UL, 0x97c6c651UL, 101 0xcbe8e823UL, 0xa1dddd7cUL, 0xe874749cUL, 0x3e1f1f21UL, 102 0x964b4bddUL, 0x61bdbddcUL, 0x0d8b8b86UL, 0x0f8a8a85UL, 103 0xe0707090UL, 0x7c3e3e42UL, 0x71b5b5c4UL, 0xcc6666aaUL, 104 0x904848d8UL, 0x06030305UL, 0xf7f6f601UL, 0x1c0e0e12UL, 105 0xc26161a3UL, 0x6a35355fUL, 0xae5757f9UL, 0x69b9b9d0UL, 106 0x17868691UL, 0x99c1c158UL, 0x3a1d1d27UL, 0x279e9eb9UL, 107 0xd9e1e138UL, 0xebf8f813UL, 0x2b9898b3UL, 0x22111133UL, 108 0xd26969bbUL, 0xa9d9d970UL, 0x078e8e89UL, 0x339494a7UL, 109 0x2d9b9bb6UL, 0x3c1e1e22UL, 0x15878792UL, 0xc9e9e920UL, 110 0x87cece49UL, 0xaa5555ffUL, 0x50282878UL, 0xa5dfdf7aUL, 111 0x038c8c8fUL, 0x59a1a1f8UL, 0x09898980UL, 0x1a0d0d17UL, 112 0x65bfbfdaUL, 0xd7e6e631UL, 0x844242c6UL, 0xd06868b8UL, 113 0x824141c3UL, 0x299999b0UL, 0x5a2d2d77UL, 0x1e0f0f11UL, 114 0x7bb0b0cbUL, 0xa85454fcUL, 0x6dbbbbd6UL, 0x2c16163aUL, 115 }; 116 117 static const ulong32 Te4[256] = { 118 0x63636363UL, 0x7c7c7c7cUL, 0x77777777UL, 0x7b7b7b7bUL, 119 0xf2f2f2f2UL, 0x6b6b6b6bUL, 0x6f6f6f6fUL, 0xc5c5c5c5UL, 120 0x30303030UL, 0x01010101UL, 0x67676767UL, 0x2b2b2b2bUL, 121 0xfefefefeUL, 0xd7d7d7d7UL, 0xababababUL, 0x76767676UL, 122 0xcacacacaUL, 0x82828282UL, 0xc9c9c9c9UL, 0x7d7d7d7dUL, 123 0xfafafafaUL, 0x59595959UL, 0x47474747UL, 0xf0f0f0f0UL, 124 0xadadadadUL, 0xd4d4d4d4UL, 0xa2a2a2a2UL, 0xafafafafUL, 125 0x9c9c9c9cUL, 0xa4a4a4a4UL, 0x72727272UL, 0xc0c0c0c0UL, 126 0xb7b7b7b7UL, 0xfdfdfdfdUL, 0x93939393UL, 0x26262626UL, 127 0x36363636UL, 0x3f3f3f3fUL, 0xf7f7f7f7UL, 0xccccccccUL, 128 0x34343434UL, 0xa5a5a5a5UL, 0xe5e5e5e5UL, 0xf1f1f1f1UL, 129 0x71717171UL, 0xd8d8d8d8UL, 0x31313131UL, 0x15151515UL, 130 0x04040404UL, 0xc7c7c7c7UL, 0x23232323UL, 0xc3c3c3c3UL, 131 0x18181818UL, 0x96969696UL, 0x05050505UL, 0x9a9a9a9aUL, 132 0x07070707UL, 0x12121212UL, 0x80808080UL, 0xe2e2e2e2UL, 133 0xebebebebUL, 0x27272727UL, 0xb2b2b2b2UL, 0x75757575UL, 134 0x09090909UL, 0x83838383UL, 0x2c2c2c2cUL, 0x1a1a1a1aUL, 135 0x1b1b1b1bUL, 0x6e6e6e6eUL, 0x5a5a5a5aUL, 0xa0a0a0a0UL, 136 0x52525252UL, 0x3b3b3b3bUL, 0xd6d6d6d6UL, 0xb3b3b3b3UL, 137 0x29292929UL, 0xe3e3e3e3UL, 0x2f2f2f2fUL, 0x84848484UL, 138 0x53535353UL, 0xd1d1d1d1UL, 0x00000000UL, 0xededededUL, 139 0x20202020UL, 0xfcfcfcfcUL, 0xb1b1b1b1UL, 0x5b5b5b5bUL, 140 0x6a6a6a6aUL, 0xcbcbcbcbUL, 0xbebebebeUL, 0x39393939UL, 141 0x4a4a4a4aUL, 0x4c4c4c4cUL, 0x58585858UL, 0xcfcfcfcfUL, 142 0xd0d0d0d0UL, 0xefefefefUL, 0xaaaaaaaaUL, 0xfbfbfbfbUL, 143 0x43434343UL, 0x4d4d4d4dUL, 0x33333333UL, 0x85858585UL, 144 0x45454545UL, 0xf9f9f9f9UL, 0x02020202UL, 0x7f7f7f7fUL, 145 0x50505050UL, 0x3c3c3c3cUL, 0x9f9f9f9fUL, 0xa8a8a8a8UL, 146 0x51515151UL, 0xa3a3a3a3UL, 0x40404040UL, 0x8f8f8f8fUL, 147 0x92929292UL, 0x9d9d9d9dUL, 0x38383838UL, 0xf5f5f5f5UL, 148 0xbcbcbcbcUL, 0xb6b6b6b6UL, 0xdadadadaUL, 0x21212121UL, 149 0x10101010UL, 0xffffffffUL, 0xf3f3f3f3UL, 0xd2d2d2d2UL, 150 0xcdcdcdcdUL, 0x0c0c0c0cUL, 0x13131313UL, 0xececececUL, 151 0x5f5f5f5fUL, 0x97979797UL, 0x44444444UL, 0x17171717UL, 152 0xc4c4c4c4UL, 0xa7a7a7a7UL, 0x7e7e7e7eUL, 0x3d3d3d3dUL, 153 0x64646464UL, 0x5d5d5d5dUL, 0x19191919UL, 0x73737373UL, 154 0x60606060UL, 0x81818181UL, 0x4f4f4f4fUL, 0xdcdcdcdcUL, 155 0x22222222UL, 0x2a2a2a2aUL, 0x90909090UL, 0x88888888UL, 156 0x46464646UL, 0xeeeeeeeeUL, 0xb8b8b8b8UL, 0x14141414UL, 157 0xdedededeUL, 0x5e5e5e5eUL, 0x0b0b0b0bUL, 0xdbdbdbdbUL, 158 0xe0e0e0e0UL, 0x32323232UL, 0x3a3a3a3aUL, 0x0a0a0a0aUL, 159 0x49494949UL, 0x06060606UL, 0x24242424UL, 0x5c5c5c5cUL, 160 0xc2c2c2c2UL, 0xd3d3d3d3UL, 0xacacacacUL, 0x62626262UL, 161 0x91919191UL, 0x95959595UL, 0xe4e4e4e4UL, 0x79797979UL, 162 0xe7e7e7e7UL, 0xc8c8c8c8UL, 0x37373737UL, 0x6d6d6d6dUL, 163 0x8d8d8d8dUL, 0xd5d5d5d5UL, 0x4e4e4e4eUL, 0xa9a9a9a9UL, 164 0x6c6c6c6cUL, 0x56565656UL, 0xf4f4f4f4UL, 0xeaeaeaeaUL, 165 0x65656565UL, 0x7a7a7a7aUL, 0xaeaeaeaeUL, 0x08080808UL, 166 0xbabababaUL, 0x78787878UL, 0x25252525UL, 0x2e2e2e2eUL, 167 0x1c1c1c1cUL, 0xa6a6a6a6UL, 0xb4b4b4b4UL, 0xc6c6c6c6UL, 168 0xe8e8e8e8UL, 0xddddddddUL, 0x74747474UL, 0x1f1f1f1fUL, 169 0x4b4b4b4bUL, 0xbdbdbdbdUL, 0x8b8b8b8bUL, 0x8a8a8a8aUL, 170 0x70707070UL, 0x3e3e3e3eUL, 0xb5b5b5b5UL, 0x66666666UL, 171 0x48484848UL, 0x03030303UL, 0xf6f6f6f6UL, 0x0e0e0e0eUL, 172 0x61616161UL, 0x35353535UL, 0x57575757UL, 0xb9b9b9b9UL, 173 0x86868686UL, 0xc1c1c1c1UL, 0x1d1d1d1dUL, 0x9e9e9e9eUL, 174 0xe1e1e1e1UL, 0xf8f8f8f8UL, 0x98989898UL, 0x11111111UL, 175 0x69696969UL, 0xd9d9d9d9UL, 0x8e8e8e8eUL, 0x94949494UL, 176 0x9b9b9b9bUL, 0x1e1e1e1eUL, 0x87878787UL, 0xe9e9e9e9UL, 177 0xcecececeUL, 0x55555555UL, 0x28282828UL, 0xdfdfdfdfUL, 178 0x8c8c8c8cUL, 0xa1a1a1a1UL, 0x89898989UL, 0x0d0d0d0dUL, 179 0xbfbfbfbfUL, 0xe6e6e6e6UL, 0x42424242UL, 0x68686868UL, 180 0x41414141UL, 0x99999999UL, 0x2d2d2d2dUL, 0x0f0f0f0fUL, 181 0xb0b0b0b0UL, 0x54545454UL, 0xbbbbbbbbUL, 0x16161616UL, 182 }; 183 184 static const ulong32 TD0[256] = { 185 0x51f4a750UL, 0x7e416553UL, 0x1a17a4c3UL, 0x3a275e96UL, 186 0x3bab6bcbUL, 0x1f9d45f1UL, 0xacfa58abUL, 0x4be30393UL, 187 0x2030fa55UL, 0xad766df6UL, 0x88cc7691UL, 0xf5024c25UL, 188 0x4fe5d7fcUL, 0xc52acbd7UL, 0x26354480UL, 0xb562a38fUL, 189 0xdeb15a49UL, 0x25ba1b67UL, 0x45ea0e98UL, 0x5dfec0e1UL, 190 0xc32f7502UL, 0x814cf012UL, 0x8d4697a3UL, 0x6bd3f9c6UL, 191 0x038f5fe7UL, 0x15929c95UL, 0xbf6d7aebUL, 0x955259daUL, 192 0xd4be832dUL, 0x587421d3UL, 0x49e06929UL, 0x8ec9c844UL, 193 0x75c2896aUL, 0xf48e7978UL, 0x99583e6bUL, 0x27b971ddUL, 194 0xbee14fb6UL, 0xf088ad17UL, 0xc920ac66UL, 0x7dce3ab4UL, 195 0x63df4a18UL, 0xe51a3182UL, 0x97513360UL, 0x62537f45UL, 196 0xb16477e0UL, 0xbb6bae84UL, 0xfe81a01cUL, 0xf9082b94UL, 197 0x70486858UL, 0x8f45fd19UL, 0x94de6c87UL, 0x527bf8b7UL, 198 0xab73d323UL, 0x724b02e2UL, 0xe31f8f57UL, 0x6655ab2aUL, 199 0xb2eb2807UL, 0x2fb5c203UL, 0x86c57b9aUL, 0xd33708a5UL, 200 0x302887f2UL, 0x23bfa5b2UL, 0x02036abaUL, 0xed16825cUL, 201 0x8acf1c2bUL, 0xa779b492UL, 0xf307f2f0UL, 0x4e69e2a1UL, 202 0x65daf4cdUL, 0x0605bed5UL, 0xd134621fUL, 0xc4a6fe8aUL, 203 0x342e539dUL, 0xa2f355a0UL, 0x058ae132UL, 0xa4f6eb75UL, 204 0x0b83ec39UL, 0x4060efaaUL, 0x5e719f06UL, 0xbd6e1051UL, 205 0x3e218af9UL, 0x96dd063dUL, 0xdd3e05aeUL, 0x4de6bd46UL, 206 0x91548db5UL, 0x71c45d05UL, 0x0406d46fUL, 0x605015ffUL, 207 0x1998fb24UL, 0xd6bde997UL, 0x894043ccUL, 0x67d99e77UL, 208 0xb0e842bdUL, 0x07898b88UL, 0xe7195b38UL, 0x79c8eedbUL, 209 0xa17c0a47UL, 0x7c420fe9UL, 0xf8841ec9UL, 0x00000000UL, 210 0x09808683UL, 0x322bed48UL, 0x1e1170acUL, 0x6c5a724eUL, 211 0xfd0efffbUL, 0x0f853856UL, 0x3daed51eUL, 0x362d3927UL, 212 0x0a0fd964UL, 0x685ca621UL, 0x9b5b54d1UL, 0x24362e3aUL, 213 0x0c0a67b1UL, 0x9357e70fUL, 0xb4ee96d2UL, 0x1b9b919eUL, 214 0x80c0c54fUL, 0x61dc20a2UL, 0x5a774b69UL, 0x1c121a16UL, 215 0xe293ba0aUL, 0xc0a02ae5UL, 0x3c22e043UL, 0x121b171dUL, 216 0x0e090d0bUL, 0xf28bc7adUL, 0x2db6a8b9UL, 0x141ea9c8UL, 217 0x57f11985UL, 0xaf75074cUL, 0xee99ddbbUL, 0xa37f60fdUL, 218 0xf701269fUL, 0x5c72f5bcUL, 0x44663bc5UL, 0x5bfb7e34UL, 219 0x8b432976UL, 0xcb23c6dcUL, 0xb6edfc68UL, 0xb8e4f163UL, 220 0xd731dccaUL, 0x42638510UL, 0x13972240UL, 0x84c61120UL, 221 0x854a247dUL, 0xd2bb3df8UL, 0xaef93211UL, 0xc729a16dUL, 222 0x1d9e2f4bUL, 0xdcb230f3UL, 0x0d8652ecUL, 0x77c1e3d0UL, 223 0x2bb3166cUL, 0xa970b999UL, 0x119448faUL, 0x47e96422UL, 224 0xa8fc8cc4UL, 0xa0f03f1aUL, 0x567d2cd8UL, 0x223390efUL, 225 0x87494ec7UL, 0xd938d1c1UL, 0x8ccaa2feUL, 0x98d40b36UL, 226 0xa6f581cfUL, 0xa57ade28UL, 0xdab78e26UL, 0x3fadbfa4UL, 227 0x2c3a9de4UL, 0x5078920dUL, 0x6a5fcc9bUL, 0x547e4662UL, 228 0xf68d13c2UL, 0x90d8b8e8UL, 0x2e39f75eUL, 0x82c3aff5UL, 229 0x9f5d80beUL, 0x69d0937cUL, 0x6fd52da9UL, 0xcf2512b3UL, 230 0xc8ac993bUL, 0x10187da7UL, 0xe89c636eUL, 0xdb3bbb7bUL, 231 0xcd267809UL, 0x6e5918f4UL, 0xec9ab701UL, 0x834f9aa8UL, 232 0xe6956e65UL, 0xaaffe67eUL, 0x21bccf08UL, 0xef15e8e6UL, 233 0xbae79bd9UL, 0x4a6f36ceUL, 0xea9f09d4UL, 0x29b07cd6UL, 234 0x31a4b2afUL, 0x2a3f2331UL, 0xc6a59430UL, 0x35a266c0UL, 235 0x744ebc37UL, 0xfc82caa6UL, 0xe090d0b0UL, 0x33a7d815UL, 236 0xf104984aUL, 0x41ecdaf7UL, 0x7fcd500eUL, 0x1791f62fUL, 237 0x764dd68dUL, 0x43efb04dUL, 0xccaa4d54UL, 0xe49604dfUL, 238 0x9ed1b5e3UL, 0x4c6a881bUL, 0xc12c1fb8UL, 0x4665517fUL, 239 0x9d5eea04UL, 0x018c355dUL, 0xfa877473UL, 0xfb0b412eUL, 240 0xb3671d5aUL, 0x92dbd252UL, 0xe9105633UL, 0x6dd64713UL, 241 0x9ad7618cUL, 0x37a10c7aUL, 0x59f8148eUL, 0xeb133c89UL, 242 0xcea927eeUL, 0xb761c935UL, 0xe11ce5edUL, 0x7a47b13cUL, 243 0x9cd2df59UL, 0x55f2733fUL, 0x1814ce79UL, 0x73c737bfUL, 244 0x53f7cdeaUL, 0x5ffdaa5bUL, 0xdf3d6f14UL, 0x7844db86UL, 245 0xcaaff381UL, 0xb968c43eUL, 0x3824342cUL, 0xc2a3405fUL, 246 0x161dc372UL, 0xbce2250cUL, 0x283c498bUL, 0xff0d9541UL, 247 0x39a80171UL, 0x080cb3deUL, 0xd8b4e49cUL, 0x6456c190UL, 248 0x7bcb8461UL, 0xd532b670UL, 0x486c5c74UL, 0xd0b85742UL, 249 }; 250 251 static const ulong32 Td4[256] = { 252 0x52525252UL, 0x09090909UL, 0x6a6a6a6aUL, 0xd5d5d5d5UL, 253 0x30303030UL, 0x36363636UL, 0xa5a5a5a5UL, 0x38383838UL, 254 0xbfbfbfbfUL, 0x40404040UL, 0xa3a3a3a3UL, 0x9e9e9e9eUL, 255 0x81818181UL, 0xf3f3f3f3UL, 0xd7d7d7d7UL, 0xfbfbfbfbUL, 256 0x7c7c7c7cUL, 0xe3e3e3e3UL, 0x39393939UL, 0x82828282UL, 257 0x9b9b9b9bUL, 0x2f2f2f2fUL, 0xffffffffUL, 0x87878787UL, 258 0x34343434UL, 0x8e8e8e8eUL, 0x43434343UL, 0x44444444UL, 259 0xc4c4c4c4UL, 0xdedededeUL, 0xe9e9e9e9UL, 0xcbcbcbcbUL, 260 0x54545454UL, 0x7b7b7b7bUL, 0x94949494UL, 0x32323232UL, 261 0xa6a6a6a6UL, 0xc2c2c2c2UL, 0x23232323UL, 0x3d3d3d3dUL, 262 0xeeeeeeeeUL, 0x4c4c4c4cUL, 0x95959595UL, 0x0b0b0b0bUL, 263 0x42424242UL, 0xfafafafaUL, 0xc3c3c3c3UL, 0x4e4e4e4eUL, 264 0x08080808UL, 0x2e2e2e2eUL, 0xa1a1a1a1UL, 0x66666666UL, 265 0x28282828UL, 0xd9d9d9d9UL, 0x24242424UL, 0xb2b2b2b2UL, 266 0x76767676UL, 0x5b5b5b5bUL, 0xa2a2a2a2UL, 0x49494949UL, 267 0x6d6d6d6dUL, 0x8b8b8b8bUL, 0xd1d1d1d1UL, 0x25252525UL, 268 0x72727272UL, 0xf8f8f8f8UL, 0xf6f6f6f6UL, 0x64646464UL, 269 0x86868686UL, 0x68686868UL, 0x98989898UL, 0x16161616UL, 270 0xd4d4d4d4UL, 0xa4a4a4a4UL, 0x5c5c5c5cUL, 0xccccccccUL, 271 0x5d5d5d5dUL, 0x65656565UL, 0xb6b6b6b6UL, 0x92929292UL, 272 0x6c6c6c6cUL, 0x70707070UL, 0x48484848UL, 0x50505050UL, 273 0xfdfdfdfdUL, 0xededededUL, 0xb9b9b9b9UL, 0xdadadadaUL, 274 0x5e5e5e5eUL, 0x15151515UL, 0x46464646UL, 0x57575757UL, 275 0xa7a7a7a7UL, 0x8d8d8d8dUL, 0x9d9d9d9dUL, 0x84848484UL, 276 0x90909090UL, 0xd8d8d8d8UL, 0xababababUL, 0x00000000UL, 277 0x8c8c8c8cUL, 0xbcbcbcbcUL, 0xd3d3d3d3UL, 0x0a0a0a0aUL, 278 0xf7f7f7f7UL, 0xe4e4e4e4UL, 0x58585858UL, 0x05050505UL, 279 0xb8b8b8b8UL, 0xb3b3b3b3UL, 0x45454545UL, 0x06060606UL, 280 0xd0d0d0d0UL, 0x2c2c2c2cUL, 0x1e1e1e1eUL, 0x8f8f8f8fUL, 281 0xcacacacaUL, 0x3f3f3f3fUL, 0x0f0f0f0fUL, 0x02020202UL, 282 0xc1c1c1c1UL, 0xafafafafUL, 0xbdbdbdbdUL, 0x03030303UL, 283 0x01010101UL, 0x13131313UL, 0x8a8a8a8aUL, 0x6b6b6b6bUL, 284 0x3a3a3a3aUL, 0x91919191UL, 0x11111111UL, 0x41414141UL, 285 0x4f4f4f4fUL, 0x67676767UL, 0xdcdcdcdcUL, 0xeaeaeaeaUL, 286 0x97979797UL, 0xf2f2f2f2UL, 0xcfcfcfcfUL, 0xcecececeUL, 287 0xf0f0f0f0UL, 0xb4b4b4b4UL, 0xe6e6e6e6UL, 0x73737373UL, 288 0x96969696UL, 0xacacacacUL, 0x74747474UL, 0x22222222UL, 289 0xe7e7e7e7UL, 0xadadadadUL, 0x35353535UL, 0x85858585UL, 290 0xe2e2e2e2UL, 0xf9f9f9f9UL, 0x37373737UL, 0xe8e8e8e8UL, 291 0x1c1c1c1cUL, 0x75757575UL, 0xdfdfdfdfUL, 0x6e6e6e6eUL, 292 0x47474747UL, 0xf1f1f1f1UL, 0x1a1a1a1aUL, 0x71717171UL, 293 0x1d1d1d1dUL, 0x29292929UL, 0xc5c5c5c5UL, 0x89898989UL, 294 0x6f6f6f6fUL, 0xb7b7b7b7UL, 0x62626262UL, 0x0e0e0e0eUL, 295 0xaaaaaaaaUL, 0x18181818UL, 0xbebebebeUL, 0x1b1b1b1bUL, 296 0xfcfcfcfcUL, 0x56565656UL, 0x3e3e3e3eUL, 0x4b4b4b4bUL, 297 0xc6c6c6c6UL, 0xd2d2d2d2UL, 0x79797979UL, 0x20202020UL, 298 0x9a9a9a9aUL, 0xdbdbdbdbUL, 0xc0c0c0c0UL, 0xfefefefeUL, 299 0x78787878UL, 0xcdcdcdcdUL, 0x5a5a5a5aUL, 0xf4f4f4f4UL, 300 0x1f1f1f1fUL, 0xddddddddUL, 0xa8a8a8a8UL, 0x33333333UL, 301 0x88888888UL, 0x07070707UL, 0xc7c7c7c7UL, 0x31313131UL, 302 0xb1b1b1b1UL, 0x12121212UL, 0x10101010UL, 0x59595959UL, 303 0x27272727UL, 0x80808080UL, 0xececececUL, 0x5f5f5f5fUL, 304 0x60606060UL, 0x51515151UL, 0x7f7f7f7fUL, 0xa9a9a9a9UL, 305 0x19191919UL, 0xb5b5b5b5UL, 0x4a4a4a4aUL, 0x0d0d0d0dUL, 306 0x2d2d2d2dUL, 0xe5e5e5e5UL, 0x7a7a7a7aUL, 0x9f9f9f9fUL, 307 0x93939393UL, 0xc9c9c9c9UL, 0x9c9c9c9cUL, 0xefefefefUL, 308 0xa0a0a0a0UL, 0xe0e0e0e0UL, 0x3b3b3b3bUL, 0x4d4d4d4dUL, 309 0xaeaeaeaeUL, 0x2a2a2a2aUL, 0xf5f5f5f5UL, 0xb0b0b0b0UL, 310 0xc8c8c8c8UL, 0xebebebebUL, 0xbbbbbbbbUL, 0x3c3c3c3cUL, 311 0x83838383UL, 0x53535353UL, 0x99999999UL, 0x61616161UL, 312 0x17171717UL, 0x2b2b2b2bUL, 0x04040404UL, 0x7e7e7e7eUL, 313 0xbabababaUL, 0x77777777UL, 0xd6d6d6d6UL, 0x26262626UL, 314 0xe1e1e1e1UL, 0x69696969UL, 0x14141414UL, 0x63636363UL, 315 0x55555555UL, 0x21212121UL, 0x0c0c0c0cUL, 0x7d7d7d7dUL, 316 }; 317 318 #ifdef SMALL_CODE 319 320 #define Te0(x) TE0[x] 321 #define Te1(x) ROR(TE0[x], 8) 322 #define Te2(x) ROR(TE0[x], 16) 323 #define Te3(x) ROR(TE0[x], 24) 324 325 #define Td0(x) TD0[x] 326 #define Td1(x) ROR(TD0[x], 8) 327 #define Td2(x) ROR(TD0[x], 16) 328 #define Td3(x) ROR(TD0[x], 24) 329 330 #define Te4_0 0x000000FF & Te4 331 #define Te4_1 0x0000FF00 & Te4 332 #define Te4_2 0x00FF0000 & Te4 333 #define Te4_3 0xFF000000 & Te4 334 335 #else /* SMALL_CODE */ 336 337 #define Te0(x) TE0[x] 338 #define Te1(x) TE1[x] 339 #define Te2(x) TE2[x] 340 #define Te3(x) TE3[x] 341 342 #define Td0(x) TD0[x] 343 #define Td1(x) TD1[x] 344 #define Td2(x) TD2[x] 345 #define Td3(x) TD3[x] 346 347 static const ulong32 TE1[256] = { 348 0xa5c66363UL, 0x84f87c7cUL, 0x99ee7777UL, 0x8df67b7bUL, 349 0x0dfff2f2UL, 0xbdd66b6bUL, 0xb1de6f6fUL, 0x5491c5c5UL, 350 0x50603030UL, 0x03020101UL, 0xa9ce6767UL, 0x7d562b2bUL, 351 0x19e7fefeUL, 0x62b5d7d7UL, 0xe64dababUL, 0x9aec7676UL, 352 0x458fcacaUL, 0x9d1f8282UL, 0x4089c9c9UL, 0x87fa7d7dUL, 353 0x15effafaUL, 0xebb25959UL, 0xc98e4747UL, 0x0bfbf0f0UL, 354 0xec41adadUL, 0x67b3d4d4UL, 0xfd5fa2a2UL, 0xea45afafUL, 355 0xbf239c9cUL, 0xf753a4a4UL, 0x96e47272UL, 0x5b9bc0c0UL, 356 0xc275b7b7UL, 0x1ce1fdfdUL, 0xae3d9393UL, 0x6a4c2626UL, 357 0x5a6c3636UL, 0x417e3f3fUL, 0x02f5f7f7UL, 0x4f83ccccUL, 358 0x5c683434UL, 0xf451a5a5UL, 0x34d1e5e5UL, 0x08f9f1f1UL, 359 0x93e27171UL, 0x73abd8d8UL, 0x53623131UL, 0x3f2a1515UL, 360 0x0c080404UL, 0x5295c7c7UL, 0x65462323UL, 0x5e9dc3c3UL, 361 0x28301818UL, 0xa1379696UL, 0x0f0a0505UL, 0xb52f9a9aUL, 362 0x090e0707UL, 0x36241212UL, 0x9b1b8080UL, 0x3ddfe2e2UL, 363 0x26cdebebUL, 0x694e2727UL, 0xcd7fb2b2UL, 0x9fea7575UL, 364 0x1b120909UL, 0x9e1d8383UL, 0x74582c2cUL, 0x2e341a1aUL, 365 0x2d361b1bUL, 0xb2dc6e6eUL, 0xeeb45a5aUL, 0xfb5ba0a0UL, 366 0xf6a45252UL, 0x4d763b3bUL, 0x61b7d6d6UL, 0xce7db3b3UL, 367 0x7b522929UL, 0x3edde3e3UL, 0x715e2f2fUL, 0x97138484UL, 368 0xf5a65353UL, 0x68b9d1d1UL, 0x00000000UL, 0x2cc1ededUL, 369 0x60402020UL, 0x1fe3fcfcUL, 0xc879b1b1UL, 0xedb65b5bUL, 370 0xbed46a6aUL, 0x468dcbcbUL, 0xd967bebeUL, 0x4b723939UL, 371 0xde944a4aUL, 0xd4984c4cUL, 0xe8b05858UL, 0x4a85cfcfUL, 372 0x6bbbd0d0UL, 0x2ac5efefUL, 0xe54faaaaUL, 0x16edfbfbUL, 373 0xc5864343UL, 0xd79a4d4dUL, 0x55663333UL, 0x94118585UL, 374 0xcf8a4545UL, 0x10e9f9f9UL, 0x06040202UL, 0x81fe7f7fUL, 375 0xf0a05050UL, 0x44783c3cUL, 0xba259f9fUL, 0xe34ba8a8UL, 376 0xf3a25151UL, 0xfe5da3a3UL, 0xc0804040UL, 0x8a058f8fUL, 377 0xad3f9292UL, 0xbc219d9dUL, 0x48703838UL, 0x04f1f5f5UL, 378 0xdf63bcbcUL, 0xc177b6b6UL, 0x75afdadaUL, 0x63422121UL, 379 0x30201010UL, 0x1ae5ffffUL, 0x0efdf3f3UL, 0x6dbfd2d2UL, 380 0x4c81cdcdUL, 0x14180c0cUL, 0x35261313UL, 0x2fc3ececUL, 381 0xe1be5f5fUL, 0xa2359797UL, 0xcc884444UL, 0x392e1717UL, 382 0x5793c4c4UL, 0xf255a7a7UL, 0x82fc7e7eUL, 0x477a3d3dUL, 383 0xacc86464UL, 0xe7ba5d5dUL, 0x2b321919UL, 0x95e67373UL, 384 0xa0c06060UL, 0x98198181UL, 0xd19e4f4fUL, 0x7fa3dcdcUL, 385 0x66442222UL, 0x7e542a2aUL, 0xab3b9090UL, 0x830b8888UL, 386 0xca8c4646UL, 0x29c7eeeeUL, 0xd36bb8b8UL, 0x3c281414UL, 387 0x79a7dedeUL, 0xe2bc5e5eUL, 0x1d160b0bUL, 0x76addbdbUL, 388 0x3bdbe0e0UL, 0x56643232UL, 0x4e743a3aUL, 0x1e140a0aUL, 389 0xdb924949UL, 0x0a0c0606UL, 0x6c482424UL, 0xe4b85c5cUL, 390 0x5d9fc2c2UL, 0x6ebdd3d3UL, 0xef43acacUL, 0xa6c46262UL, 391 0xa8399191UL, 0xa4319595UL, 0x37d3e4e4UL, 0x8bf27979UL, 392 0x32d5e7e7UL, 0x438bc8c8UL, 0x596e3737UL, 0xb7da6d6dUL, 393 0x8c018d8dUL, 0x64b1d5d5UL, 0xd29c4e4eUL, 0xe049a9a9UL, 394 0xb4d86c6cUL, 0xfaac5656UL, 0x07f3f4f4UL, 0x25cfeaeaUL, 395 0xafca6565UL, 0x8ef47a7aUL, 0xe947aeaeUL, 0x18100808UL, 396 0xd56fbabaUL, 0x88f07878UL, 0x6f4a2525UL, 0x725c2e2eUL, 397 0x24381c1cUL, 0xf157a6a6UL, 0xc773b4b4UL, 0x5197c6c6UL, 398 0x23cbe8e8UL, 0x7ca1ddddUL, 0x9ce87474UL, 0x213e1f1fUL, 399 0xdd964b4bUL, 0xdc61bdbdUL, 0x860d8b8bUL, 0x850f8a8aUL, 400 0x90e07070UL, 0x427c3e3eUL, 0xc471b5b5UL, 0xaacc6666UL, 401 0xd8904848UL, 0x05060303UL, 0x01f7f6f6UL, 0x121c0e0eUL, 402 0xa3c26161UL, 0x5f6a3535UL, 0xf9ae5757UL, 0xd069b9b9UL, 403 0x91178686UL, 0x5899c1c1UL, 0x273a1d1dUL, 0xb9279e9eUL, 404 0x38d9e1e1UL, 0x13ebf8f8UL, 0xb32b9898UL, 0x33221111UL, 405 0xbbd26969UL, 0x70a9d9d9UL, 0x89078e8eUL, 0xa7339494UL, 406 0xb62d9b9bUL, 0x223c1e1eUL, 0x92158787UL, 0x20c9e9e9UL, 407 0x4987ceceUL, 0xffaa5555UL, 0x78502828UL, 0x7aa5dfdfUL, 408 0x8f038c8cUL, 0xf859a1a1UL, 0x80098989UL, 0x171a0d0dUL, 409 0xda65bfbfUL, 0x31d7e6e6UL, 0xc6844242UL, 0xb8d06868UL, 410 0xc3824141UL, 0xb0299999UL, 0x775a2d2dUL, 0x111e0f0fUL, 411 0xcb7bb0b0UL, 0xfca85454UL, 0xd66dbbbbUL, 0x3a2c1616UL, 412 }; 413 static const ulong32 TE2[256] = { 414 0x63a5c663UL, 0x7c84f87cUL, 0x7799ee77UL, 0x7b8df67bUL, 415 0xf20dfff2UL, 0x6bbdd66bUL, 0x6fb1de6fUL, 0xc55491c5UL, 416 0x30506030UL, 0x01030201UL, 0x67a9ce67UL, 0x2b7d562bUL, 417 0xfe19e7feUL, 0xd762b5d7UL, 0xabe64dabUL, 0x769aec76UL, 418 0xca458fcaUL, 0x829d1f82UL, 0xc94089c9UL, 0x7d87fa7dUL, 419 0xfa15effaUL, 0x59ebb259UL, 0x47c98e47UL, 0xf00bfbf0UL, 420 0xadec41adUL, 0xd467b3d4UL, 0xa2fd5fa2UL, 0xafea45afUL, 421 0x9cbf239cUL, 0xa4f753a4UL, 0x7296e472UL, 0xc05b9bc0UL, 422 0xb7c275b7UL, 0xfd1ce1fdUL, 0x93ae3d93UL, 0x266a4c26UL, 423 0x365a6c36UL, 0x3f417e3fUL, 0xf702f5f7UL, 0xcc4f83ccUL, 424 0x345c6834UL, 0xa5f451a5UL, 0xe534d1e5UL, 0xf108f9f1UL, 425 0x7193e271UL, 0xd873abd8UL, 0x31536231UL, 0x153f2a15UL, 426 0x040c0804UL, 0xc75295c7UL, 0x23654623UL, 0xc35e9dc3UL, 427 0x18283018UL, 0x96a13796UL, 0x050f0a05UL, 0x9ab52f9aUL, 428 0x07090e07UL, 0x12362412UL, 0x809b1b80UL, 0xe23ddfe2UL, 429 0xeb26cdebUL, 0x27694e27UL, 0xb2cd7fb2UL, 0x759fea75UL, 430 0x091b1209UL, 0x839e1d83UL, 0x2c74582cUL, 0x1a2e341aUL, 431 0x1b2d361bUL, 0x6eb2dc6eUL, 0x5aeeb45aUL, 0xa0fb5ba0UL, 432 0x52f6a452UL, 0x3b4d763bUL, 0xd661b7d6UL, 0xb3ce7db3UL, 433 0x297b5229UL, 0xe33edde3UL, 0x2f715e2fUL, 0x84971384UL, 434 0x53f5a653UL, 0xd168b9d1UL, 0x00000000UL, 0xed2cc1edUL, 435 0x20604020UL, 0xfc1fe3fcUL, 0xb1c879b1UL, 0x5bedb65bUL, 436 0x6abed46aUL, 0xcb468dcbUL, 0xbed967beUL, 0x394b7239UL, 437 0x4ade944aUL, 0x4cd4984cUL, 0x58e8b058UL, 0xcf4a85cfUL, 438 0xd06bbbd0UL, 0xef2ac5efUL, 0xaae54faaUL, 0xfb16edfbUL, 439 0x43c58643UL, 0x4dd79a4dUL, 0x33556633UL, 0x85941185UL, 440 0x45cf8a45UL, 0xf910e9f9UL, 0x02060402UL, 0x7f81fe7fUL, 441 0x50f0a050UL, 0x3c44783cUL, 0x9fba259fUL, 0xa8e34ba8UL, 442 0x51f3a251UL, 0xa3fe5da3UL, 0x40c08040UL, 0x8f8a058fUL, 443 0x92ad3f92UL, 0x9dbc219dUL, 0x38487038UL, 0xf504f1f5UL, 444 0xbcdf63bcUL, 0xb6c177b6UL, 0xda75afdaUL, 0x21634221UL, 445 0x10302010UL, 0xff1ae5ffUL, 0xf30efdf3UL, 0xd26dbfd2UL, 446 0xcd4c81cdUL, 0x0c14180cUL, 0x13352613UL, 0xec2fc3ecUL, 447 0x5fe1be5fUL, 0x97a23597UL, 0x44cc8844UL, 0x17392e17UL, 448 0xc45793c4UL, 0xa7f255a7UL, 0x7e82fc7eUL, 0x3d477a3dUL, 449 0x64acc864UL, 0x5de7ba5dUL, 0x192b3219UL, 0x7395e673UL, 450 0x60a0c060UL, 0x81981981UL, 0x4fd19e4fUL, 0xdc7fa3dcUL, 451 0x22664422UL, 0x2a7e542aUL, 0x90ab3b90UL, 0x88830b88UL, 452 0x46ca8c46UL, 0xee29c7eeUL, 0xb8d36bb8UL, 0x143c2814UL, 453 0xde79a7deUL, 0x5ee2bc5eUL, 0x0b1d160bUL, 0xdb76addbUL, 454 0xe03bdbe0UL, 0x32566432UL, 0x3a4e743aUL, 0x0a1e140aUL, 455 0x49db9249UL, 0x060a0c06UL, 0x246c4824UL, 0x5ce4b85cUL, 456 0xc25d9fc2UL, 0xd36ebdd3UL, 0xacef43acUL, 0x62a6c462UL, 457 0x91a83991UL, 0x95a43195UL, 0xe437d3e4UL, 0x798bf279UL, 458 0xe732d5e7UL, 0xc8438bc8UL, 0x37596e37UL, 0x6db7da6dUL, 459 0x8d8c018dUL, 0xd564b1d5UL, 0x4ed29c4eUL, 0xa9e049a9UL, 460 0x6cb4d86cUL, 0x56faac56UL, 0xf407f3f4UL, 0xea25cfeaUL, 461 0x65afca65UL, 0x7a8ef47aUL, 0xaee947aeUL, 0x08181008UL, 462 0xbad56fbaUL, 0x7888f078UL, 0x256f4a25UL, 0x2e725c2eUL, 463 0x1c24381cUL, 0xa6f157a6UL, 0xb4c773b4UL, 0xc65197c6UL, 464 0xe823cbe8UL, 0xdd7ca1ddUL, 0x749ce874UL, 0x1f213e1fUL, 465 0x4bdd964bUL, 0xbddc61bdUL, 0x8b860d8bUL, 0x8a850f8aUL, 466 0x7090e070UL, 0x3e427c3eUL, 0xb5c471b5UL, 0x66aacc66UL, 467 0x48d89048UL, 0x03050603UL, 0xf601f7f6UL, 0x0e121c0eUL, 468 0x61a3c261UL, 0x355f6a35UL, 0x57f9ae57UL, 0xb9d069b9UL, 469 0x86911786UL, 0xc15899c1UL, 0x1d273a1dUL, 0x9eb9279eUL, 470 0xe138d9e1UL, 0xf813ebf8UL, 0x98b32b98UL, 0x11332211UL, 471 0x69bbd269UL, 0xd970a9d9UL, 0x8e89078eUL, 0x94a73394UL, 472 0x9bb62d9bUL, 0x1e223c1eUL, 0x87921587UL, 0xe920c9e9UL, 473 0xce4987ceUL, 0x55ffaa55UL, 0x28785028UL, 0xdf7aa5dfUL, 474 0x8c8f038cUL, 0xa1f859a1UL, 0x89800989UL, 0x0d171a0dUL, 475 0xbfda65bfUL, 0xe631d7e6UL, 0x42c68442UL, 0x68b8d068UL, 476 0x41c38241UL, 0x99b02999UL, 0x2d775a2dUL, 0x0f111e0fUL, 477 0xb0cb7bb0UL, 0x54fca854UL, 0xbbd66dbbUL, 0x163a2c16UL, 478 }; 479 static const ulong32 TE3[256] = { 480 481 0x6363a5c6UL, 0x7c7c84f8UL, 0x777799eeUL, 0x7b7b8df6UL, 482 0xf2f20dffUL, 0x6b6bbdd6UL, 0x6f6fb1deUL, 0xc5c55491UL, 483 0x30305060UL, 0x01010302UL, 0x6767a9ceUL, 0x2b2b7d56UL, 484 0xfefe19e7UL, 0xd7d762b5UL, 0xababe64dUL, 0x76769aecUL, 485 0xcaca458fUL, 0x82829d1fUL, 0xc9c94089UL, 0x7d7d87faUL, 486 0xfafa15efUL, 0x5959ebb2UL, 0x4747c98eUL, 0xf0f00bfbUL, 487 0xadadec41UL, 0xd4d467b3UL, 0xa2a2fd5fUL, 0xafafea45UL, 488 0x9c9cbf23UL, 0xa4a4f753UL, 0x727296e4UL, 0xc0c05b9bUL, 489 0xb7b7c275UL, 0xfdfd1ce1UL, 0x9393ae3dUL, 0x26266a4cUL, 490 0x36365a6cUL, 0x3f3f417eUL, 0xf7f702f5UL, 0xcccc4f83UL, 491 0x34345c68UL, 0xa5a5f451UL, 0xe5e534d1UL, 0xf1f108f9UL, 492 0x717193e2UL, 0xd8d873abUL, 0x31315362UL, 0x15153f2aUL, 493 0x04040c08UL, 0xc7c75295UL, 0x23236546UL, 0xc3c35e9dUL, 494 0x18182830UL, 0x9696a137UL, 0x05050f0aUL, 0x9a9ab52fUL, 495 0x0707090eUL, 0x12123624UL, 0x80809b1bUL, 0xe2e23ddfUL, 496 0xebeb26cdUL, 0x2727694eUL, 0xb2b2cd7fUL, 0x75759feaUL, 497 0x09091b12UL, 0x83839e1dUL, 0x2c2c7458UL, 0x1a1a2e34UL, 498 0x1b1b2d36UL, 0x6e6eb2dcUL, 0x5a5aeeb4UL, 0xa0a0fb5bUL, 499 0x5252f6a4UL, 0x3b3b4d76UL, 0xd6d661b7UL, 0xb3b3ce7dUL, 500 0x29297b52UL, 0xe3e33eddUL, 0x2f2f715eUL, 0x84849713UL, 501 0x5353f5a6UL, 0xd1d168b9UL, 0x00000000UL, 0xeded2cc1UL, 502 0x20206040UL, 0xfcfc1fe3UL, 0xb1b1c879UL, 0x5b5bedb6UL, 503 0x6a6abed4UL, 0xcbcb468dUL, 0xbebed967UL, 0x39394b72UL, 504 0x4a4ade94UL, 0x4c4cd498UL, 0x5858e8b0UL, 0xcfcf4a85UL, 505 0xd0d06bbbUL, 0xefef2ac5UL, 0xaaaae54fUL, 0xfbfb16edUL, 506 0x4343c586UL, 0x4d4dd79aUL, 0x33335566UL, 0x85859411UL, 507 0x4545cf8aUL, 0xf9f910e9UL, 0x02020604UL, 0x7f7f81feUL, 508 0x5050f0a0UL, 0x3c3c4478UL, 0x9f9fba25UL, 0xa8a8e34bUL, 509 0x5151f3a2UL, 0xa3a3fe5dUL, 0x4040c080UL, 0x8f8f8a05UL, 510 0x9292ad3fUL, 0x9d9dbc21UL, 0x38384870UL, 0xf5f504f1UL, 511 0xbcbcdf63UL, 0xb6b6c177UL, 0xdada75afUL, 0x21216342UL, 512 0x10103020UL, 0xffff1ae5UL, 0xf3f30efdUL, 0xd2d26dbfUL, 513 0xcdcd4c81UL, 0x0c0c1418UL, 0x13133526UL, 0xecec2fc3UL, 514 0x5f5fe1beUL, 0x9797a235UL, 0x4444cc88UL, 0x1717392eUL, 515 0xc4c45793UL, 0xa7a7f255UL, 0x7e7e82fcUL, 0x3d3d477aUL, 516 0x6464acc8UL, 0x5d5de7baUL, 0x19192b32UL, 0x737395e6UL, 517 0x6060a0c0UL, 0x81819819UL, 0x4f4fd19eUL, 0xdcdc7fa3UL, 518 0x22226644UL, 0x2a2a7e54UL, 0x9090ab3bUL, 0x8888830bUL, 519 0x4646ca8cUL, 0xeeee29c7UL, 0xb8b8d36bUL, 0x14143c28UL, 520 0xdede79a7UL, 0x5e5ee2bcUL, 0x0b0b1d16UL, 0xdbdb76adUL, 521 0xe0e03bdbUL, 0x32325664UL, 0x3a3a4e74UL, 0x0a0a1e14UL, 522 0x4949db92UL, 0x06060a0cUL, 0x24246c48UL, 0x5c5ce4b8UL, 523 0xc2c25d9fUL, 0xd3d36ebdUL, 0xacacef43UL, 0x6262a6c4UL, 524 0x9191a839UL, 0x9595a431UL, 0xe4e437d3UL, 0x79798bf2UL, 525 0xe7e732d5UL, 0xc8c8438bUL, 0x3737596eUL, 0x6d6db7daUL, 526 0x8d8d8c01UL, 0xd5d564b1UL, 0x4e4ed29cUL, 0xa9a9e049UL, 527 0x6c6cb4d8UL, 0x5656faacUL, 0xf4f407f3UL, 0xeaea25cfUL, 528 0x6565afcaUL, 0x7a7a8ef4UL, 0xaeaee947UL, 0x08081810UL, 529 0xbabad56fUL, 0x787888f0UL, 0x25256f4aUL, 0x2e2e725cUL, 530 0x1c1c2438UL, 0xa6a6f157UL, 0xb4b4c773UL, 0xc6c65197UL, 531 0xe8e823cbUL, 0xdddd7ca1UL, 0x74749ce8UL, 0x1f1f213eUL, 532 0x4b4bdd96UL, 0xbdbddc61UL, 0x8b8b860dUL, 0x8a8a850fUL, 533 0x707090e0UL, 0x3e3e427cUL, 0xb5b5c471UL, 0x6666aaccUL, 534 0x4848d890UL, 0x03030506UL, 0xf6f601f7UL, 0x0e0e121cUL, 535 0x6161a3c2UL, 0x35355f6aUL, 0x5757f9aeUL, 0xb9b9d069UL, 536 0x86869117UL, 0xc1c15899UL, 0x1d1d273aUL, 0x9e9eb927UL, 537 0xe1e138d9UL, 0xf8f813ebUL, 0x9898b32bUL, 0x11113322UL, 538 0x6969bbd2UL, 0xd9d970a9UL, 0x8e8e8907UL, 0x9494a733UL, 539 0x9b9bb62dUL, 0x1e1e223cUL, 0x87879215UL, 0xe9e920c9UL, 540 0xcece4987UL, 0x5555ffaaUL, 0x28287850UL, 0xdfdf7aa5UL, 541 0x8c8c8f03UL, 0xa1a1f859UL, 0x89898009UL, 0x0d0d171aUL, 542 0xbfbfda65UL, 0xe6e631d7UL, 0x4242c684UL, 0x6868b8d0UL, 543 0x4141c382UL, 0x9999b029UL, 0x2d2d775aUL, 0x0f0f111eUL, 544 0xb0b0cb7bUL, 0x5454fca8UL, 0xbbbbd66dUL, 0x16163a2cUL, 545 }; 546 547 static const ulong32 Te4_0[] = { 548 0x00000063UL, 0x0000007cUL, 0x00000077UL, 0x0000007bUL, 0x000000f2UL, 0x0000006bUL, 0x0000006fUL, 0x000000c5UL, 549 0x00000030UL, 0x00000001UL, 0x00000067UL, 0x0000002bUL, 0x000000feUL, 0x000000d7UL, 0x000000abUL, 0x00000076UL, 550 0x000000caUL, 0x00000082UL, 0x000000c9UL, 0x0000007dUL, 0x000000faUL, 0x00000059UL, 0x00000047UL, 0x000000f0UL, 551 0x000000adUL, 0x000000d4UL, 0x000000a2UL, 0x000000afUL, 0x0000009cUL, 0x000000a4UL, 0x00000072UL, 0x000000c0UL, 552 0x000000b7UL, 0x000000fdUL, 0x00000093UL, 0x00000026UL, 0x00000036UL, 0x0000003fUL, 0x000000f7UL, 0x000000ccUL, 553 0x00000034UL, 0x000000a5UL, 0x000000e5UL, 0x000000f1UL, 0x00000071UL, 0x000000d8UL, 0x00000031UL, 0x00000015UL, 554 0x00000004UL, 0x000000c7UL, 0x00000023UL, 0x000000c3UL, 0x00000018UL, 0x00000096UL, 0x00000005UL, 0x0000009aUL, 555 0x00000007UL, 0x00000012UL, 0x00000080UL, 0x000000e2UL, 0x000000ebUL, 0x00000027UL, 0x000000b2UL, 0x00000075UL, 556 0x00000009UL, 0x00000083UL, 0x0000002cUL, 0x0000001aUL, 0x0000001bUL, 0x0000006eUL, 0x0000005aUL, 0x000000a0UL, 557 0x00000052UL, 0x0000003bUL, 0x000000d6UL, 0x000000b3UL, 0x00000029UL, 0x000000e3UL, 0x0000002fUL, 0x00000084UL, 558 0x00000053UL, 0x000000d1UL, 0x00000000UL, 0x000000edUL, 0x00000020UL, 0x000000fcUL, 0x000000b1UL, 0x0000005bUL, 559 0x0000006aUL, 0x000000cbUL, 0x000000beUL, 0x00000039UL, 0x0000004aUL, 0x0000004cUL, 0x00000058UL, 0x000000cfUL, 560 0x000000d0UL, 0x000000efUL, 0x000000aaUL, 0x000000fbUL, 0x00000043UL, 0x0000004dUL, 0x00000033UL, 0x00000085UL, 561 0x00000045UL, 0x000000f9UL, 0x00000002UL, 0x0000007fUL, 0x00000050UL, 0x0000003cUL, 0x0000009fUL, 0x000000a8UL, 562 0x00000051UL, 0x000000a3UL, 0x00000040UL, 0x0000008fUL, 0x00000092UL, 0x0000009dUL, 0x00000038UL, 0x000000f5UL, 563 0x000000bcUL, 0x000000b6UL, 0x000000daUL, 0x00000021UL, 0x00000010UL, 0x000000ffUL, 0x000000f3UL, 0x000000d2UL, 564 0x000000cdUL, 0x0000000cUL, 0x00000013UL, 0x000000ecUL, 0x0000005fUL, 0x00000097UL, 0x00000044UL, 0x00000017UL, 565 0x000000c4UL, 0x000000a7UL, 0x0000007eUL, 0x0000003dUL, 0x00000064UL, 0x0000005dUL, 0x00000019UL, 0x00000073UL, 566 0x00000060UL, 0x00000081UL, 0x0000004fUL, 0x000000dcUL, 0x00000022UL, 0x0000002aUL, 0x00000090UL, 0x00000088UL, 567 0x00000046UL, 0x000000eeUL, 0x000000b8UL, 0x00000014UL, 0x000000deUL, 0x0000005eUL, 0x0000000bUL, 0x000000dbUL, 568 0x000000e0UL, 0x00000032UL, 0x0000003aUL, 0x0000000aUL, 0x00000049UL, 0x00000006UL, 0x00000024UL, 0x0000005cUL, 569 0x000000c2UL, 0x000000d3UL, 0x000000acUL, 0x00000062UL, 0x00000091UL, 0x00000095UL, 0x000000e4UL, 0x00000079UL, 570 0x000000e7UL, 0x000000c8UL, 0x00000037UL, 0x0000006dUL, 0x0000008dUL, 0x000000d5UL, 0x0000004eUL, 0x000000a9UL, 571 0x0000006cUL, 0x00000056UL, 0x000000f4UL, 0x000000eaUL, 0x00000065UL, 0x0000007aUL, 0x000000aeUL, 0x00000008UL, 572 0x000000baUL, 0x00000078UL, 0x00000025UL, 0x0000002eUL, 0x0000001cUL, 0x000000a6UL, 0x000000b4UL, 0x000000c6UL, 573 0x000000e8UL, 0x000000ddUL, 0x00000074UL, 0x0000001fUL, 0x0000004bUL, 0x000000bdUL, 0x0000008bUL, 0x0000008aUL, 574 0x00000070UL, 0x0000003eUL, 0x000000b5UL, 0x00000066UL, 0x00000048UL, 0x00000003UL, 0x000000f6UL, 0x0000000eUL, 575 0x00000061UL, 0x00000035UL, 0x00000057UL, 0x000000b9UL, 0x00000086UL, 0x000000c1UL, 0x0000001dUL, 0x0000009eUL, 576 0x000000e1UL, 0x000000f8UL, 0x00000098UL, 0x00000011UL, 0x00000069UL, 0x000000d9UL, 0x0000008eUL, 0x00000094UL, 577 0x0000009bUL, 0x0000001eUL, 0x00000087UL, 0x000000e9UL, 0x000000ceUL, 0x00000055UL, 0x00000028UL, 0x000000dfUL, 578 0x0000008cUL, 0x000000a1UL, 0x00000089UL, 0x0000000dUL, 0x000000bfUL, 0x000000e6UL, 0x00000042UL, 0x00000068UL, 579 0x00000041UL, 0x00000099UL, 0x0000002dUL, 0x0000000fUL, 0x000000b0UL, 0x00000054UL, 0x000000bbUL, 0x00000016UL 580 }; 581 582 static const ulong32 Te4_1[] = { 583 0x00006300UL, 0x00007c00UL, 0x00007700UL, 0x00007b00UL, 0x0000f200UL, 0x00006b00UL, 0x00006f00UL, 0x0000c500UL, 584 0x00003000UL, 0x00000100UL, 0x00006700UL, 0x00002b00UL, 0x0000fe00UL, 0x0000d700UL, 0x0000ab00UL, 0x00007600UL, 585 0x0000ca00UL, 0x00008200UL, 0x0000c900UL, 0x00007d00UL, 0x0000fa00UL, 0x00005900UL, 0x00004700UL, 0x0000f000UL, 586 0x0000ad00UL, 0x0000d400UL, 0x0000a200UL, 0x0000af00UL, 0x00009c00UL, 0x0000a400UL, 0x00007200UL, 0x0000c000UL, 587 0x0000b700UL, 0x0000fd00UL, 0x00009300UL, 0x00002600UL, 0x00003600UL, 0x00003f00UL, 0x0000f700UL, 0x0000cc00UL, 588 0x00003400UL, 0x0000a500UL, 0x0000e500UL, 0x0000f100UL, 0x00007100UL, 0x0000d800UL, 0x00003100UL, 0x00001500UL, 589 0x00000400UL, 0x0000c700UL, 0x00002300UL, 0x0000c300UL, 0x00001800UL, 0x00009600UL, 0x00000500UL, 0x00009a00UL, 590 0x00000700UL, 0x00001200UL, 0x00008000UL, 0x0000e200UL, 0x0000eb00UL, 0x00002700UL, 0x0000b200UL, 0x00007500UL, 591 0x00000900UL, 0x00008300UL, 0x00002c00UL, 0x00001a00UL, 0x00001b00UL, 0x00006e00UL, 0x00005a00UL, 0x0000a000UL, 592 0x00005200UL, 0x00003b00UL, 0x0000d600UL, 0x0000b300UL, 0x00002900UL, 0x0000e300UL, 0x00002f00UL, 0x00008400UL, 593 0x00005300UL, 0x0000d100UL, 0x00000000UL, 0x0000ed00UL, 0x00002000UL, 0x0000fc00UL, 0x0000b100UL, 0x00005b00UL, 594 0x00006a00UL, 0x0000cb00UL, 0x0000be00UL, 0x00003900UL, 0x00004a00UL, 0x00004c00UL, 0x00005800UL, 0x0000cf00UL, 595 0x0000d000UL, 0x0000ef00UL, 0x0000aa00UL, 0x0000fb00UL, 0x00004300UL, 0x00004d00UL, 0x00003300UL, 0x00008500UL, 596 0x00004500UL, 0x0000f900UL, 0x00000200UL, 0x00007f00UL, 0x00005000UL, 0x00003c00UL, 0x00009f00UL, 0x0000a800UL, 597 0x00005100UL, 0x0000a300UL, 0x00004000UL, 0x00008f00UL, 0x00009200UL, 0x00009d00UL, 0x00003800UL, 0x0000f500UL, 598 0x0000bc00UL, 0x0000b600UL, 0x0000da00UL, 0x00002100UL, 0x00001000UL, 0x0000ff00UL, 0x0000f300UL, 0x0000d200UL, 599 0x0000cd00UL, 0x00000c00UL, 0x00001300UL, 0x0000ec00UL, 0x00005f00UL, 0x00009700UL, 0x00004400UL, 0x00001700UL, 600 0x0000c400UL, 0x0000a700UL, 0x00007e00UL, 0x00003d00UL, 0x00006400UL, 0x00005d00UL, 0x00001900UL, 0x00007300UL, 601 0x00006000UL, 0x00008100UL, 0x00004f00UL, 0x0000dc00UL, 0x00002200UL, 0x00002a00UL, 0x00009000UL, 0x00008800UL, 602 0x00004600UL, 0x0000ee00UL, 0x0000b800UL, 0x00001400UL, 0x0000de00UL, 0x00005e00UL, 0x00000b00UL, 0x0000db00UL, 603 0x0000e000UL, 0x00003200UL, 0x00003a00UL, 0x00000a00UL, 0x00004900UL, 0x00000600UL, 0x00002400UL, 0x00005c00UL, 604 0x0000c200UL, 0x0000d300UL, 0x0000ac00UL, 0x00006200UL, 0x00009100UL, 0x00009500UL, 0x0000e400UL, 0x00007900UL, 605 0x0000e700UL, 0x0000c800UL, 0x00003700UL, 0x00006d00UL, 0x00008d00UL, 0x0000d500UL, 0x00004e00UL, 0x0000a900UL, 606 0x00006c00UL, 0x00005600UL, 0x0000f400UL, 0x0000ea00UL, 0x00006500UL, 0x00007a00UL, 0x0000ae00UL, 0x00000800UL, 607 0x0000ba00UL, 0x00007800UL, 0x00002500UL, 0x00002e00UL, 0x00001c00UL, 0x0000a600UL, 0x0000b400UL, 0x0000c600UL, 608 0x0000e800UL, 0x0000dd00UL, 0x00007400UL, 0x00001f00UL, 0x00004b00UL, 0x0000bd00UL, 0x00008b00UL, 0x00008a00UL, 609 0x00007000UL, 0x00003e00UL, 0x0000b500UL, 0x00006600UL, 0x00004800UL, 0x00000300UL, 0x0000f600UL, 0x00000e00UL, 610 0x00006100UL, 0x00003500UL, 0x00005700UL, 0x0000b900UL, 0x00008600UL, 0x0000c100UL, 0x00001d00UL, 0x00009e00UL, 611 0x0000e100UL, 0x0000f800UL, 0x00009800UL, 0x00001100UL, 0x00006900UL, 0x0000d900UL, 0x00008e00UL, 0x00009400UL, 612 0x00009b00UL, 0x00001e00UL, 0x00008700UL, 0x0000e900UL, 0x0000ce00UL, 0x00005500UL, 0x00002800UL, 0x0000df00UL, 613 0x00008c00UL, 0x0000a100UL, 0x00008900UL, 0x00000d00UL, 0x0000bf00UL, 0x0000e600UL, 0x00004200UL, 0x00006800UL, 614 0x00004100UL, 0x00009900UL, 0x00002d00UL, 0x00000f00UL, 0x0000b000UL, 0x00005400UL, 0x0000bb00UL, 0x00001600UL 615 }; 616 617 static const ulong32 Te4_2[] = { 618 0x00630000UL, 0x007c0000UL, 0x00770000UL, 0x007b0000UL, 0x00f20000UL, 0x006b0000UL, 0x006f0000UL, 0x00c50000UL, 619 0x00300000UL, 0x00010000UL, 0x00670000UL, 0x002b0000UL, 0x00fe0000UL, 0x00d70000UL, 0x00ab0000UL, 0x00760000UL, 620 0x00ca0000UL, 0x00820000UL, 0x00c90000UL, 0x007d0000UL, 0x00fa0000UL, 0x00590000UL, 0x00470000UL, 0x00f00000UL, 621 0x00ad0000UL, 0x00d40000UL, 0x00a20000UL, 0x00af0000UL, 0x009c0000UL, 0x00a40000UL, 0x00720000UL, 0x00c00000UL, 622 0x00b70000UL, 0x00fd0000UL, 0x00930000UL, 0x00260000UL, 0x00360000UL, 0x003f0000UL, 0x00f70000UL, 0x00cc0000UL, 623 0x00340000UL, 0x00a50000UL, 0x00e50000UL, 0x00f10000UL, 0x00710000UL, 0x00d80000UL, 0x00310000UL, 0x00150000UL, 624 0x00040000UL, 0x00c70000UL, 0x00230000UL, 0x00c30000UL, 0x00180000UL, 0x00960000UL, 0x00050000UL, 0x009a0000UL, 625 0x00070000UL, 0x00120000UL, 0x00800000UL, 0x00e20000UL, 0x00eb0000UL, 0x00270000UL, 0x00b20000UL, 0x00750000UL, 626 0x00090000UL, 0x00830000UL, 0x002c0000UL, 0x001a0000UL, 0x001b0000UL, 0x006e0000UL, 0x005a0000UL, 0x00a00000UL, 627 0x00520000UL, 0x003b0000UL, 0x00d60000UL, 0x00b30000UL, 0x00290000UL, 0x00e30000UL, 0x002f0000UL, 0x00840000UL, 628 0x00530000UL, 0x00d10000UL, 0x00000000UL, 0x00ed0000UL, 0x00200000UL, 0x00fc0000UL, 0x00b10000UL, 0x005b0000UL, 629 0x006a0000UL, 0x00cb0000UL, 0x00be0000UL, 0x00390000UL, 0x004a0000UL, 0x004c0000UL, 0x00580000UL, 0x00cf0000UL, 630 0x00d00000UL, 0x00ef0000UL, 0x00aa0000UL, 0x00fb0000UL, 0x00430000UL, 0x004d0000UL, 0x00330000UL, 0x00850000UL, 631 0x00450000UL, 0x00f90000UL, 0x00020000UL, 0x007f0000UL, 0x00500000UL, 0x003c0000UL, 0x009f0000UL, 0x00a80000UL, 632 0x00510000UL, 0x00a30000UL, 0x00400000UL, 0x008f0000UL, 0x00920000UL, 0x009d0000UL, 0x00380000UL, 0x00f50000UL, 633 0x00bc0000UL, 0x00b60000UL, 0x00da0000UL, 0x00210000UL, 0x00100000UL, 0x00ff0000UL, 0x00f30000UL, 0x00d20000UL, 634 0x00cd0000UL, 0x000c0000UL, 0x00130000UL, 0x00ec0000UL, 0x005f0000UL, 0x00970000UL, 0x00440000UL, 0x00170000UL, 635 0x00c40000UL, 0x00a70000UL, 0x007e0000UL, 0x003d0000UL, 0x00640000UL, 0x005d0000UL, 0x00190000UL, 0x00730000UL, 636 0x00600000UL, 0x00810000UL, 0x004f0000UL, 0x00dc0000UL, 0x00220000UL, 0x002a0000UL, 0x00900000UL, 0x00880000UL, 637 0x00460000UL, 0x00ee0000UL, 0x00b80000UL, 0x00140000UL, 0x00de0000UL, 0x005e0000UL, 0x000b0000UL, 0x00db0000UL, 638 0x00e00000UL, 0x00320000UL, 0x003a0000UL, 0x000a0000UL, 0x00490000UL, 0x00060000UL, 0x00240000UL, 0x005c0000UL, 639 0x00c20000UL, 0x00d30000UL, 0x00ac0000UL, 0x00620000UL, 0x00910000UL, 0x00950000UL, 0x00e40000UL, 0x00790000UL, 640 0x00e70000UL, 0x00c80000UL, 0x00370000UL, 0x006d0000UL, 0x008d0000UL, 0x00d50000UL, 0x004e0000UL, 0x00a90000UL, 641 0x006c0000UL, 0x00560000UL, 0x00f40000UL, 0x00ea0000UL, 0x00650000UL, 0x007a0000UL, 0x00ae0000UL, 0x00080000UL, 642 0x00ba0000UL, 0x00780000UL, 0x00250000UL, 0x002e0000UL, 0x001c0000UL, 0x00a60000UL, 0x00b40000UL, 0x00c60000UL, 643 0x00e80000UL, 0x00dd0000UL, 0x00740000UL, 0x001f0000UL, 0x004b0000UL, 0x00bd0000UL, 0x008b0000UL, 0x008a0000UL, 644 0x00700000UL, 0x003e0000UL, 0x00b50000UL, 0x00660000UL, 0x00480000UL, 0x00030000UL, 0x00f60000UL, 0x000e0000UL, 645 0x00610000UL, 0x00350000UL, 0x00570000UL, 0x00b90000UL, 0x00860000UL, 0x00c10000UL, 0x001d0000UL, 0x009e0000UL, 646 0x00e10000UL, 0x00f80000UL, 0x00980000UL, 0x00110000UL, 0x00690000UL, 0x00d90000UL, 0x008e0000UL, 0x00940000UL, 647 0x009b0000UL, 0x001e0000UL, 0x00870000UL, 0x00e90000UL, 0x00ce0000UL, 0x00550000UL, 0x00280000UL, 0x00df0000UL, 648 0x008c0000UL, 0x00a10000UL, 0x00890000UL, 0x000d0000UL, 0x00bf0000UL, 0x00e60000UL, 0x00420000UL, 0x00680000UL, 649 0x00410000UL, 0x00990000UL, 0x002d0000UL, 0x000f0000UL, 0x00b00000UL, 0x00540000UL, 0x00bb0000UL, 0x00160000UL 650 }; 651 652 static const ulong32 Te4_3[] = { 653 0x63000000UL, 0x7c000000UL, 0x77000000UL, 0x7b000000UL, 0xf2000000UL, 0x6b000000UL, 0x6f000000UL, 0xc5000000UL, 654 0x30000000UL, 0x01000000UL, 0x67000000UL, 0x2b000000UL, 0xfe000000UL, 0xd7000000UL, 0xab000000UL, 0x76000000UL, 655 0xca000000UL, 0x82000000UL, 0xc9000000UL, 0x7d000000UL, 0xfa000000UL, 0x59000000UL, 0x47000000UL, 0xf0000000UL, 656 0xad000000UL, 0xd4000000UL, 0xa2000000UL, 0xaf000000UL, 0x9c000000UL, 0xa4000000UL, 0x72000000UL, 0xc0000000UL, 657 0xb7000000UL, 0xfd000000UL, 0x93000000UL, 0x26000000UL, 0x36000000UL, 0x3f000000UL, 0xf7000000UL, 0xcc000000UL, 658 0x34000000UL, 0xa5000000UL, 0xe5000000UL, 0xf1000000UL, 0x71000000UL, 0xd8000000UL, 0x31000000UL, 0x15000000UL, 659 0x04000000UL, 0xc7000000UL, 0x23000000UL, 0xc3000000UL, 0x18000000UL, 0x96000000UL, 0x05000000UL, 0x9a000000UL, 660 0x07000000UL, 0x12000000UL, 0x80000000UL, 0xe2000000UL, 0xeb000000UL, 0x27000000UL, 0xb2000000UL, 0x75000000UL, 661 0x09000000UL, 0x83000000UL, 0x2c000000UL, 0x1a000000UL, 0x1b000000UL, 0x6e000000UL, 0x5a000000UL, 0xa0000000UL, 662 0x52000000UL, 0x3b000000UL, 0xd6000000UL, 0xb3000000UL, 0x29000000UL, 0xe3000000UL, 0x2f000000UL, 0x84000000UL, 663 0x53000000UL, 0xd1000000UL, 0x00000000UL, 0xed000000UL, 0x20000000UL, 0xfc000000UL, 0xb1000000UL, 0x5b000000UL, 664 0x6a000000UL, 0xcb000000UL, 0xbe000000UL, 0x39000000UL, 0x4a000000UL, 0x4c000000UL, 0x58000000UL, 0xcf000000UL, 665 0xd0000000UL, 0xef000000UL, 0xaa000000UL, 0xfb000000UL, 0x43000000UL, 0x4d000000UL, 0x33000000UL, 0x85000000UL, 666 0x45000000UL, 0xf9000000UL, 0x02000000UL, 0x7f000000UL, 0x50000000UL, 0x3c000000UL, 0x9f000000UL, 0xa8000000UL, 667 0x51000000UL, 0xa3000000UL, 0x40000000UL, 0x8f000000UL, 0x92000000UL, 0x9d000000UL, 0x38000000UL, 0xf5000000UL, 668 0xbc000000UL, 0xb6000000UL, 0xda000000UL, 0x21000000UL, 0x10000000UL, 0xff000000UL, 0xf3000000UL, 0xd2000000UL, 669 0xcd000000UL, 0x0c000000UL, 0x13000000UL, 0xec000000UL, 0x5f000000UL, 0x97000000UL, 0x44000000UL, 0x17000000UL, 670 0xc4000000UL, 0xa7000000UL, 0x7e000000UL, 0x3d000000UL, 0x64000000UL, 0x5d000000UL, 0x19000000UL, 0x73000000UL, 671 0x60000000UL, 0x81000000UL, 0x4f000000UL, 0xdc000000UL, 0x22000000UL, 0x2a000000UL, 0x90000000UL, 0x88000000UL, 672 0x46000000UL, 0xee000000UL, 0xb8000000UL, 0x14000000UL, 0xde000000UL, 0x5e000000UL, 0x0b000000UL, 0xdb000000UL, 673 0xe0000000UL, 0x32000000UL, 0x3a000000UL, 0x0a000000UL, 0x49000000UL, 0x06000000UL, 0x24000000UL, 0x5c000000UL, 674 0xc2000000UL, 0xd3000000UL, 0xac000000UL, 0x62000000UL, 0x91000000UL, 0x95000000UL, 0xe4000000UL, 0x79000000UL, 675 0xe7000000UL, 0xc8000000UL, 0x37000000UL, 0x6d000000UL, 0x8d000000UL, 0xd5000000UL, 0x4e000000UL, 0xa9000000UL, 676 0x6c000000UL, 0x56000000UL, 0xf4000000UL, 0xea000000UL, 0x65000000UL, 0x7a000000UL, 0xae000000UL, 0x08000000UL, 677 0xba000000UL, 0x78000000UL, 0x25000000UL, 0x2e000000UL, 0x1c000000UL, 0xa6000000UL, 0xb4000000UL, 0xc6000000UL, 678 0xe8000000UL, 0xdd000000UL, 0x74000000UL, 0x1f000000UL, 0x4b000000UL, 0xbd000000UL, 0x8b000000UL, 0x8a000000UL, 679 0x70000000UL, 0x3e000000UL, 0xb5000000UL, 0x66000000UL, 0x48000000UL, 0x03000000UL, 0xf6000000UL, 0x0e000000UL, 680 0x61000000UL, 0x35000000UL, 0x57000000UL, 0xb9000000UL, 0x86000000UL, 0xc1000000UL, 0x1d000000UL, 0x9e000000UL, 681 0xe1000000UL, 0xf8000000UL, 0x98000000UL, 0x11000000UL, 0x69000000UL, 0xd9000000UL, 0x8e000000UL, 0x94000000UL, 682 0x9b000000UL, 0x1e000000UL, 0x87000000UL, 0xe9000000UL, 0xce000000UL, 0x55000000UL, 0x28000000UL, 0xdf000000UL, 683 0x8c000000UL, 0xa1000000UL, 0x89000000UL, 0x0d000000UL, 0xbf000000UL, 0xe6000000UL, 0x42000000UL, 0x68000000UL, 684 0x41000000UL, 0x99000000UL, 0x2d000000UL, 0x0f000000UL, 0xb0000000UL, 0x54000000UL, 0xbb000000UL, 0x16000000UL 685 }; 686 687 static const ulong32 TD1[256] = { 688 0x5051f4a7UL, 0x537e4165UL, 0xc31a17a4UL, 0x963a275eUL, 689 0xcb3bab6bUL, 0xf11f9d45UL, 0xabacfa58UL, 0x934be303UL, 690 0x552030faUL, 0xf6ad766dUL, 0x9188cc76UL, 0x25f5024cUL, 691 0xfc4fe5d7UL, 0xd7c52acbUL, 0x80263544UL, 0x8fb562a3UL, 692 0x49deb15aUL, 0x6725ba1bUL, 0x9845ea0eUL, 0xe15dfec0UL, 693 0x02c32f75UL, 0x12814cf0UL, 0xa38d4697UL, 0xc66bd3f9UL, 694 0xe7038f5fUL, 0x9515929cUL, 0xebbf6d7aUL, 0xda955259UL, 695 0x2dd4be83UL, 0xd3587421UL, 0x2949e069UL, 0x448ec9c8UL, 696 0x6a75c289UL, 0x78f48e79UL, 0x6b99583eUL, 0xdd27b971UL, 697 0xb6bee14fUL, 0x17f088adUL, 0x66c920acUL, 0xb47dce3aUL, 698 0x1863df4aUL, 0x82e51a31UL, 0x60975133UL, 0x4562537fUL, 699 0xe0b16477UL, 0x84bb6baeUL, 0x1cfe81a0UL, 0x94f9082bUL, 700 0x58704868UL, 0x198f45fdUL, 0x8794de6cUL, 0xb7527bf8UL, 701 0x23ab73d3UL, 0xe2724b02UL, 0x57e31f8fUL, 0x2a6655abUL, 702 0x07b2eb28UL, 0x032fb5c2UL, 0x9a86c57bUL, 0xa5d33708UL, 703 0xf2302887UL, 0xb223bfa5UL, 0xba02036aUL, 0x5ced1682UL, 704 0x2b8acf1cUL, 0x92a779b4UL, 0xf0f307f2UL, 0xa14e69e2UL, 705 0xcd65daf4UL, 0xd50605beUL, 0x1fd13462UL, 0x8ac4a6feUL, 706 0x9d342e53UL, 0xa0a2f355UL, 0x32058ae1UL, 0x75a4f6ebUL, 707 0x390b83ecUL, 0xaa4060efUL, 0x065e719fUL, 0x51bd6e10UL, 708 0xf93e218aUL, 0x3d96dd06UL, 0xaedd3e05UL, 0x464de6bdUL, 709 0xb591548dUL, 0x0571c45dUL, 0x6f0406d4UL, 0xff605015UL, 710 0x241998fbUL, 0x97d6bde9UL, 0xcc894043UL, 0x7767d99eUL, 711 0xbdb0e842UL, 0x8807898bUL, 0x38e7195bUL, 0xdb79c8eeUL, 712 0x47a17c0aUL, 0xe97c420fUL, 0xc9f8841eUL, 0x00000000UL, 713 0x83098086UL, 0x48322bedUL, 0xac1e1170UL, 0x4e6c5a72UL, 714 0xfbfd0effUL, 0x560f8538UL, 0x1e3daed5UL, 0x27362d39UL, 715 0x640a0fd9UL, 0x21685ca6UL, 0xd19b5b54UL, 0x3a24362eUL, 716 0xb10c0a67UL, 0x0f9357e7UL, 0xd2b4ee96UL, 0x9e1b9b91UL, 717 0x4f80c0c5UL, 0xa261dc20UL, 0x695a774bUL, 0x161c121aUL, 718 0x0ae293baUL, 0xe5c0a02aUL, 0x433c22e0UL, 0x1d121b17UL, 719 0x0b0e090dUL, 0xadf28bc7UL, 0xb92db6a8UL, 0xc8141ea9UL, 720 0x8557f119UL, 0x4caf7507UL, 0xbbee99ddUL, 0xfda37f60UL, 721 0x9ff70126UL, 0xbc5c72f5UL, 0xc544663bUL, 0x345bfb7eUL, 722 0x768b4329UL, 0xdccb23c6UL, 0x68b6edfcUL, 0x63b8e4f1UL, 723 0xcad731dcUL, 0x10426385UL, 0x40139722UL, 0x2084c611UL, 724 0x7d854a24UL, 0xf8d2bb3dUL, 0x11aef932UL, 0x6dc729a1UL, 725 0x4b1d9e2fUL, 0xf3dcb230UL, 0xec0d8652UL, 0xd077c1e3UL, 726 0x6c2bb316UL, 0x99a970b9UL, 0xfa119448UL, 0x2247e964UL, 727 0xc4a8fc8cUL, 0x1aa0f03fUL, 0xd8567d2cUL, 0xef223390UL, 728 0xc787494eUL, 0xc1d938d1UL, 0xfe8ccaa2UL, 0x3698d40bUL, 729 0xcfa6f581UL, 0x28a57adeUL, 0x26dab78eUL, 0xa43fadbfUL, 730 0xe42c3a9dUL, 0x0d507892UL, 0x9b6a5fccUL, 0x62547e46UL, 731 0xc2f68d13UL, 0xe890d8b8UL, 0x5e2e39f7UL, 0xf582c3afUL, 732 0xbe9f5d80UL, 0x7c69d093UL, 0xa96fd52dUL, 0xb3cf2512UL, 733 0x3bc8ac99UL, 0xa710187dUL, 0x6ee89c63UL, 0x7bdb3bbbUL, 734 0x09cd2678UL, 0xf46e5918UL, 0x01ec9ab7UL, 0xa8834f9aUL, 735 0x65e6956eUL, 0x7eaaffe6UL, 0x0821bccfUL, 0xe6ef15e8UL, 736 0xd9bae79bUL, 0xce4a6f36UL, 0xd4ea9f09UL, 0xd629b07cUL, 737 0xaf31a4b2UL, 0x312a3f23UL, 0x30c6a594UL, 0xc035a266UL, 738 0x37744ebcUL, 0xa6fc82caUL, 0xb0e090d0UL, 0x1533a7d8UL, 739 0x4af10498UL, 0xf741ecdaUL, 0x0e7fcd50UL, 0x2f1791f6UL, 740 0x8d764dd6UL, 0x4d43efb0UL, 0x54ccaa4dUL, 0xdfe49604UL, 741 0xe39ed1b5UL, 0x1b4c6a88UL, 0xb8c12c1fUL, 0x7f466551UL, 742 0x049d5eeaUL, 0x5d018c35UL, 0x73fa8774UL, 0x2efb0b41UL, 743 0x5ab3671dUL, 0x5292dbd2UL, 0x33e91056UL, 0x136dd647UL, 744 0x8c9ad761UL, 0x7a37a10cUL, 0x8e59f814UL, 0x89eb133cUL, 745 0xeecea927UL, 0x35b761c9UL, 0xede11ce5UL, 0x3c7a47b1UL, 746 0x599cd2dfUL, 0x3f55f273UL, 0x791814ceUL, 0xbf73c737UL, 747 0xea53f7cdUL, 0x5b5ffdaaUL, 0x14df3d6fUL, 0x867844dbUL, 748 0x81caaff3UL, 0x3eb968c4UL, 0x2c382434UL, 0x5fc2a340UL, 749 0x72161dc3UL, 0x0cbce225UL, 0x8b283c49UL, 0x41ff0d95UL, 750 0x7139a801UL, 0xde080cb3UL, 0x9cd8b4e4UL, 0x906456c1UL, 751 0x617bcb84UL, 0x70d532b6UL, 0x74486c5cUL, 0x42d0b857UL, 752 }; 753 static const ulong32 TD2[256] = { 754 0xa75051f4UL, 0x65537e41UL, 0xa4c31a17UL, 0x5e963a27UL, 755 0x6bcb3babUL, 0x45f11f9dUL, 0x58abacfaUL, 0x03934be3UL, 756 0xfa552030UL, 0x6df6ad76UL, 0x769188ccUL, 0x4c25f502UL, 757 0xd7fc4fe5UL, 0xcbd7c52aUL, 0x44802635UL, 0xa38fb562UL, 758 0x5a49deb1UL, 0x1b6725baUL, 0x0e9845eaUL, 0xc0e15dfeUL, 759 0x7502c32fUL, 0xf012814cUL, 0x97a38d46UL, 0xf9c66bd3UL, 760 0x5fe7038fUL, 0x9c951592UL, 0x7aebbf6dUL, 0x59da9552UL, 761 0x832dd4beUL, 0x21d35874UL, 0x692949e0UL, 0xc8448ec9UL, 762 0x896a75c2UL, 0x7978f48eUL, 0x3e6b9958UL, 0x71dd27b9UL, 763 0x4fb6bee1UL, 0xad17f088UL, 0xac66c920UL, 0x3ab47dceUL, 764 0x4a1863dfUL, 0x3182e51aUL, 0x33609751UL, 0x7f456253UL, 765 0x77e0b164UL, 0xae84bb6bUL, 0xa01cfe81UL, 0x2b94f908UL, 766 0x68587048UL, 0xfd198f45UL, 0x6c8794deUL, 0xf8b7527bUL, 767 0xd323ab73UL, 0x02e2724bUL, 0x8f57e31fUL, 0xab2a6655UL, 768 0x2807b2ebUL, 0xc2032fb5UL, 0x7b9a86c5UL, 0x08a5d337UL, 769 0x87f23028UL, 0xa5b223bfUL, 0x6aba0203UL, 0x825ced16UL, 770 0x1c2b8acfUL, 0xb492a779UL, 0xf2f0f307UL, 0xe2a14e69UL, 771 0xf4cd65daUL, 0xbed50605UL, 0x621fd134UL, 0xfe8ac4a6UL, 772 0x539d342eUL, 0x55a0a2f3UL, 0xe132058aUL, 0xeb75a4f6UL, 773 0xec390b83UL, 0xefaa4060UL, 0x9f065e71UL, 0x1051bd6eUL, 774 0x8af93e21UL, 0x063d96ddUL, 0x05aedd3eUL, 0xbd464de6UL, 775 0x8db59154UL, 0x5d0571c4UL, 0xd46f0406UL, 0x15ff6050UL, 776 0xfb241998UL, 0xe997d6bdUL, 0x43cc8940UL, 0x9e7767d9UL, 777 0x42bdb0e8UL, 0x8b880789UL, 0x5b38e719UL, 0xeedb79c8UL, 778 0x0a47a17cUL, 0x0fe97c42UL, 0x1ec9f884UL, 0x00000000UL, 779 0x86830980UL, 0xed48322bUL, 0x70ac1e11UL, 0x724e6c5aUL, 780 0xfffbfd0eUL, 0x38560f85UL, 0xd51e3daeUL, 0x3927362dUL, 781 0xd9640a0fUL, 0xa621685cUL, 0x54d19b5bUL, 0x2e3a2436UL, 782 0x67b10c0aUL, 0xe70f9357UL, 0x96d2b4eeUL, 0x919e1b9bUL, 783 0xc54f80c0UL, 0x20a261dcUL, 0x4b695a77UL, 0x1a161c12UL, 784 0xba0ae293UL, 0x2ae5c0a0UL, 0xe0433c22UL, 0x171d121bUL, 785 0x0d0b0e09UL, 0xc7adf28bUL, 0xa8b92db6UL, 0xa9c8141eUL, 786 0x198557f1UL, 0x074caf75UL, 0xddbbee99UL, 0x60fda37fUL, 787 0x269ff701UL, 0xf5bc5c72UL, 0x3bc54466UL, 0x7e345bfbUL, 788 0x29768b43UL, 0xc6dccb23UL, 0xfc68b6edUL, 0xf163b8e4UL, 789 0xdccad731UL, 0x85104263UL, 0x22401397UL, 0x112084c6UL, 790 0x247d854aUL, 0x3df8d2bbUL, 0x3211aef9UL, 0xa16dc729UL, 791 0x2f4b1d9eUL, 0x30f3dcb2UL, 0x52ec0d86UL, 0xe3d077c1UL, 792 0x166c2bb3UL, 0xb999a970UL, 0x48fa1194UL, 0x642247e9UL, 793 0x8cc4a8fcUL, 0x3f1aa0f0UL, 0x2cd8567dUL, 0x90ef2233UL, 794 0x4ec78749UL, 0xd1c1d938UL, 0xa2fe8ccaUL, 0x0b3698d4UL, 795 0x81cfa6f5UL, 0xde28a57aUL, 0x8e26dab7UL, 0xbfa43fadUL, 796 0x9de42c3aUL, 0x920d5078UL, 0xcc9b6a5fUL, 0x4662547eUL, 797 0x13c2f68dUL, 0xb8e890d8UL, 0xf75e2e39UL, 0xaff582c3UL, 798 0x80be9f5dUL, 0x937c69d0UL, 0x2da96fd5UL, 0x12b3cf25UL, 799 0x993bc8acUL, 0x7da71018UL, 0x636ee89cUL, 0xbb7bdb3bUL, 800 0x7809cd26UL, 0x18f46e59UL, 0xb701ec9aUL, 0x9aa8834fUL, 801 0x6e65e695UL, 0xe67eaaffUL, 0xcf0821bcUL, 0xe8e6ef15UL, 802 0x9bd9bae7UL, 0x36ce4a6fUL, 0x09d4ea9fUL, 0x7cd629b0UL, 803 0xb2af31a4UL, 0x23312a3fUL, 0x9430c6a5UL, 0x66c035a2UL, 804 0xbc37744eUL, 0xcaa6fc82UL, 0xd0b0e090UL, 0xd81533a7UL, 805 0x984af104UL, 0xdaf741ecUL, 0x500e7fcdUL, 0xf62f1791UL, 806 0xd68d764dUL, 0xb04d43efUL, 0x4d54ccaaUL, 0x04dfe496UL, 807 0xb5e39ed1UL, 0x881b4c6aUL, 0x1fb8c12cUL, 0x517f4665UL, 808 0xea049d5eUL, 0x355d018cUL, 0x7473fa87UL, 0x412efb0bUL, 809 0x1d5ab367UL, 0xd25292dbUL, 0x5633e910UL, 0x47136dd6UL, 810 0x618c9ad7UL, 0x0c7a37a1UL, 0x148e59f8UL, 0x3c89eb13UL, 811 0x27eecea9UL, 0xc935b761UL, 0xe5ede11cUL, 0xb13c7a47UL, 812 0xdf599cd2UL, 0x733f55f2UL, 0xce791814UL, 0x37bf73c7UL, 813 0xcdea53f7UL, 0xaa5b5ffdUL, 0x6f14df3dUL, 0xdb867844UL, 814 0xf381caafUL, 0xc43eb968UL, 0x342c3824UL, 0x405fc2a3UL, 815 0xc372161dUL, 0x250cbce2UL, 0x498b283cUL, 0x9541ff0dUL, 816 0x017139a8UL, 0xb3de080cUL, 0xe49cd8b4UL, 0xc1906456UL, 817 0x84617bcbUL, 0xb670d532UL, 0x5c74486cUL, 0x5742d0b8UL, 818 }; 819 static const ulong32 TD3[256] = { 820 0xf4a75051UL, 0x4165537eUL, 0x17a4c31aUL, 0x275e963aUL, 821 0xab6bcb3bUL, 0x9d45f11fUL, 0xfa58abacUL, 0xe303934bUL, 822 0x30fa5520UL, 0x766df6adUL, 0xcc769188UL, 0x024c25f5UL, 823 0xe5d7fc4fUL, 0x2acbd7c5UL, 0x35448026UL, 0x62a38fb5UL, 824 0xb15a49deUL, 0xba1b6725UL, 0xea0e9845UL, 0xfec0e15dUL, 825 0x2f7502c3UL, 0x4cf01281UL, 0x4697a38dUL, 0xd3f9c66bUL, 826 0x8f5fe703UL, 0x929c9515UL, 0x6d7aebbfUL, 0x5259da95UL, 827 0xbe832dd4UL, 0x7421d358UL, 0xe0692949UL, 0xc9c8448eUL, 828 0xc2896a75UL, 0x8e7978f4UL, 0x583e6b99UL, 0xb971dd27UL, 829 0xe14fb6beUL, 0x88ad17f0UL, 0x20ac66c9UL, 0xce3ab47dUL, 830 0xdf4a1863UL, 0x1a3182e5UL, 0x51336097UL, 0x537f4562UL, 831 0x6477e0b1UL, 0x6bae84bbUL, 0x81a01cfeUL, 0x082b94f9UL, 832 0x48685870UL, 0x45fd198fUL, 0xde6c8794UL, 0x7bf8b752UL, 833 0x73d323abUL, 0x4b02e272UL, 0x1f8f57e3UL, 0x55ab2a66UL, 834 0xeb2807b2UL, 0xb5c2032fUL, 0xc57b9a86UL, 0x3708a5d3UL, 835 0x2887f230UL, 0xbfa5b223UL, 0x036aba02UL, 0x16825cedUL, 836 0xcf1c2b8aUL, 0x79b492a7UL, 0x07f2f0f3UL, 0x69e2a14eUL, 837 0xdaf4cd65UL, 0x05bed506UL, 0x34621fd1UL, 0xa6fe8ac4UL, 838 0x2e539d34UL, 0xf355a0a2UL, 0x8ae13205UL, 0xf6eb75a4UL, 839 0x83ec390bUL, 0x60efaa40UL, 0x719f065eUL, 0x6e1051bdUL, 840 0x218af93eUL, 0xdd063d96UL, 0x3e05aeddUL, 0xe6bd464dUL, 841 0x548db591UL, 0xc45d0571UL, 0x06d46f04UL, 0x5015ff60UL, 842 0x98fb2419UL, 0xbde997d6UL, 0x4043cc89UL, 0xd99e7767UL, 843 0xe842bdb0UL, 0x898b8807UL, 0x195b38e7UL, 0xc8eedb79UL, 844 0x7c0a47a1UL, 0x420fe97cUL, 0x841ec9f8UL, 0x00000000UL, 845 0x80868309UL, 0x2bed4832UL, 0x1170ac1eUL, 0x5a724e6cUL, 846 0x0efffbfdUL, 0x8538560fUL, 0xaed51e3dUL, 0x2d392736UL, 847 0x0fd9640aUL, 0x5ca62168UL, 0x5b54d19bUL, 0x362e3a24UL, 848 0x0a67b10cUL, 0x57e70f93UL, 0xee96d2b4UL, 0x9b919e1bUL, 849 0xc0c54f80UL, 0xdc20a261UL, 0x774b695aUL, 0x121a161cUL, 850 0x93ba0ae2UL, 0xa02ae5c0UL, 0x22e0433cUL, 0x1b171d12UL, 851 0x090d0b0eUL, 0x8bc7adf2UL, 0xb6a8b92dUL, 0x1ea9c814UL, 852 0xf1198557UL, 0x75074cafUL, 0x99ddbbeeUL, 0x7f60fda3UL, 853 0x01269ff7UL, 0x72f5bc5cUL, 0x663bc544UL, 0xfb7e345bUL, 854 0x4329768bUL, 0x23c6dccbUL, 0xedfc68b6UL, 0xe4f163b8UL, 855 0x31dccad7UL, 0x63851042UL, 0x97224013UL, 0xc6112084UL, 856 0x4a247d85UL, 0xbb3df8d2UL, 0xf93211aeUL, 0x29a16dc7UL, 857 0x9e2f4b1dUL, 0xb230f3dcUL, 0x8652ec0dUL, 0xc1e3d077UL, 858 0xb3166c2bUL, 0x70b999a9UL, 0x9448fa11UL, 0xe9642247UL, 859 0xfc8cc4a8UL, 0xf03f1aa0UL, 0x7d2cd856UL, 0x3390ef22UL, 860 0x494ec787UL, 0x38d1c1d9UL, 0xcaa2fe8cUL, 0xd40b3698UL, 861 0xf581cfa6UL, 0x7ade28a5UL, 0xb78e26daUL, 0xadbfa43fUL, 862 0x3a9de42cUL, 0x78920d50UL, 0x5fcc9b6aUL, 0x7e466254UL, 863 0x8d13c2f6UL, 0xd8b8e890UL, 0x39f75e2eUL, 0xc3aff582UL, 864 0x5d80be9fUL, 0xd0937c69UL, 0xd52da96fUL, 0x2512b3cfUL, 865 0xac993bc8UL, 0x187da710UL, 0x9c636ee8UL, 0x3bbb7bdbUL, 866 0x267809cdUL, 0x5918f46eUL, 0x9ab701ecUL, 0x4f9aa883UL, 867 0x956e65e6UL, 0xffe67eaaUL, 0xbccf0821UL, 0x15e8e6efUL, 868 0xe79bd9baUL, 0x6f36ce4aUL, 0x9f09d4eaUL, 0xb07cd629UL, 869 0xa4b2af31UL, 0x3f23312aUL, 0xa59430c6UL, 0xa266c035UL, 870 0x4ebc3774UL, 0x82caa6fcUL, 0x90d0b0e0UL, 0xa7d81533UL, 871 0x04984af1UL, 0xecdaf741UL, 0xcd500e7fUL, 0x91f62f17UL, 872 0x4dd68d76UL, 0xefb04d43UL, 0xaa4d54ccUL, 0x9604dfe4UL, 873 0xd1b5e39eUL, 0x6a881b4cUL, 0x2c1fb8c1UL, 0x65517f46UL, 874 0x5eea049dUL, 0x8c355d01UL, 0x877473faUL, 0x0b412efbUL, 875 0x671d5ab3UL, 0xdbd25292UL, 0x105633e9UL, 0xd647136dUL, 876 0xd7618c9aUL, 0xa10c7a37UL, 0xf8148e59UL, 0x133c89ebUL, 877 0xa927eeceUL, 0x61c935b7UL, 0x1ce5ede1UL, 0x47b13c7aUL, 878 0xd2df599cUL, 0xf2733f55UL, 0x14ce7918UL, 0xc737bf73UL, 879 0xf7cdea53UL, 0xfdaa5b5fUL, 0x3d6f14dfUL, 0x44db8678UL, 880 0xaff381caUL, 0x68c43eb9UL, 0x24342c38UL, 0xa3405fc2UL, 881 0x1dc37216UL, 0xe2250cbcUL, 0x3c498b28UL, 0x0d9541ffUL, 882 0xa8017139UL, 0x0cb3de08UL, 0xb4e49cd8UL, 0x56c19064UL, 883 0xcb84617bUL, 0x32b670d5UL, 0x6c5c7448UL, 0xb85742d0UL, 884 }; 885 886 static const ulong32 Tks0[] = { 887 0x00000000UL, 0x0e090d0bUL, 0x1c121a16UL, 0x121b171dUL, 0x3824342cUL, 0x362d3927UL, 0x24362e3aUL, 0x2a3f2331UL, 888 0x70486858UL, 0x7e416553UL, 0x6c5a724eUL, 0x62537f45UL, 0x486c5c74UL, 0x4665517fUL, 0x547e4662UL, 0x5a774b69UL, 889 0xe090d0b0UL, 0xee99ddbbUL, 0xfc82caa6UL, 0xf28bc7adUL, 0xd8b4e49cUL, 0xd6bde997UL, 0xc4a6fe8aUL, 0xcaaff381UL, 890 0x90d8b8e8UL, 0x9ed1b5e3UL, 0x8ccaa2feUL, 0x82c3aff5UL, 0xa8fc8cc4UL, 0xa6f581cfUL, 0xb4ee96d2UL, 0xbae79bd9UL, 891 0xdb3bbb7bUL, 0xd532b670UL, 0xc729a16dUL, 0xc920ac66UL, 0xe31f8f57UL, 0xed16825cUL, 0xff0d9541UL, 0xf104984aUL, 892 0xab73d323UL, 0xa57ade28UL, 0xb761c935UL, 0xb968c43eUL, 0x9357e70fUL, 0x9d5eea04UL, 0x8f45fd19UL, 0x814cf012UL, 893 0x3bab6bcbUL, 0x35a266c0UL, 0x27b971ddUL, 0x29b07cd6UL, 0x038f5fe7UL, 0x0d8652ecUL, 0x1f9d45f1UL, 0x119448faUL, 894 0x4be30393UL, 0x45ea0e98UL, 0x57f11985UL, 0x59f8148eUL, 0x73c737bfUL, 0x7dce3ab4UL, 0x6fd52da9UL, 0x61dc20a2UL, 895 0xad766df6UL, 0xa37f60fdUL, 0xb16477e0UL, 0xbf6d7aebUL, 0x955259daUL, 0x9b5b54d1UL, 0x894043ccUL, 0x87494ec7UL, 896 0xdd3e05aeUL, 0xd33708a5UL, 0xc12c1fb8UL, 0xcf2512b3UL, 0xe51a3182UL, 0xeb133c89UL, 0xf9082b94UL, 0xf701269fUL, 897 0x4de6bd46UL, 0x43efb04dUL, 0x51f4a750UL, 0x5ffdaa5bUL, 0x75c2896aUL, 0x7bcb8461UL, 0x69d0937cUL, 0x67d99e77UL, 898 0x3daed51eUL, 0x33a7d815UL, 0x21bccf08UL, 0x2fb5c203UL, 0x058ae132UL, 0x0b83ec39UL, 0x1998fb24UL, 0x1791f62fUL, 899 0x764dd68dUL, 0x7844db86UL, 0x6a5fcc9bUL, 0x6456c190UL, 0x4e69e2a1UL, 0x4060efaaUL, 0x527bf8b7UL, 0x5c72f5bcUL, 900 0x0605bed5UL, 0x080cb3deUL, 0x1a17a4c3UL, 0x141ea9c8UL, 0x3e218af9UL, 0x302887f2UL, 0x223390efUL, 0x2c3a9de4UL, 901 0x96dd063dUL, 0x98d40b36UL, 0x8acf1c2bUL, 0x84c61120UL, 0xaef93211UL, 0xa0f03f1aUL, 0xb2eb2807UL, 0xbce2250cUL, 902 0xe6956e65UL, 0xe89c636eUL, 0xfa877473UL, 0xf48e7978UL, 0xdeb15a49UL, 0xd0b85742UL, 0xc2a3405fUL, 0xccaa4d54UL, 903 0x41ecdaf7UL, 0x4fe5d7fcUL, 0x5dfec0e1UL, 0x53f7cdeaUL, 0x79c8eedbUL, 0x77c1e3d0UL, 0x65daf4cdUL, 0x6bd3f9c6UL, 904 0x31a4b2afUL, 0x3fadbfa4UL, 0x2db6a8b9UL, 0x23bfa5b2UL, 0x09808683UL, 0x07898b88UL, 0x15929c95UL, 0x1b9b919eUL, 905 0xa17c0a47UL, 0xaf75074cUL, 0xbd6e1051UL, 0xb3671d5aUL, 0x99583e6bUL, 0x97513360UL, 0x854a247dUL, 0x8b432976UL, 906 0xd134621fUL, 0xdf3d6f14UL, 0xcd267809UL, 0xc32f7502UL, 0xe9105633UL, 0xe7195b38UL, 0xf5024c25UL, 0xfb0b412eUL, 907 0x9ad7618cUL, 0x94de6c87UL, 0x86c57b9aUL, 0x88cc7691UL, 0xa2f355a0UL, 0xacfa58abUL, 0xbee14fb6UL, 0xb0e842bdUL, 908 0xea9f09d4UL, 0xe49604dfUL, 0xf68d13c2UL, 0xf8841ec9UL, 0xd2bb3df8UL, 0xdcb230f3UL, 0xcea927eeUL, 0xc0a02ae5UL, 909 0x7a47b13cUL, 0x744ebc37UL, 0x6655ab2aUL, 0x685ca621UL, 0x42638510UL, 0x4c6a881bUL, 0x5e719f06UL, 0x5078920dUL, 910 0x0a0fd964UL, 0x0406d46fUL, 0x161dc372UL, 0x1814ce79UL, 0x322bed48UL, 0x3c22e043UL, 0x2e39f75eUL, 0x2030fa55UL, 911 0xec9ab701UL, 0xe293ba0aUL, 0xf088ad17UL, 0xfe81a01cUL, 0xd4be832dUL, 0xdab78e26UL, 0xc8ac993bUL, 0xc6a59430UL, 912 0x9cd2df59UL, 0x92dbd252UL, 0x80c0c54fUL, 0x8ec9c844UL, 0xa4f6eb75UL, 0xaaffe67eUL, 0xb8e4f163UL, 0xb6edfc68UL, 913 0x0c0a67b1UL, 0x02036abaUL, 0x10187da7UL, 0x1e1170acUL, 0x342e539dUL, 0x3a275e96UL, 0x283c498bUL, 0x26354480UL, 914 0x7c420fe9UL, 0x724b02e2UL, 0x605015ffUL, 0x6e5918f4UL, 0x44663bc5UL, 0x4a6f36ceUL, 0x587421d3UL, 0x567d2cd8UL, 915 0x37a10c7aUL, 0x39a80171UL, 0x2bb3166cUL, 0x25ba1b67UL, 0x0f853856UL, 0x018c355dUL, 0x13972240UL, 0x1d9e2f4bUL, 916 0x47e96422UL, 0x49e06929UL, 0x5bfb7e34UL, 0x55f2733fUL, 0x7fcd500eUL, 0x71c45d05UL, 0x63df4a18UL, 0x6dd64713UL, 917 0xd731dccaUL, 0xd938d1c1UL, 0xcb23c6dcUL, 0xc52acbd7UL, 0xef15e8e6UL, 0xe11ce5edUL, 0xf307f2f0UL, 0xfd0efffbUL, 918 0xa779b492UL, 0xa970b999UL, 0xbb6bae84UL, 0xb562a38fUL, 0x9f5d80beUL, 0x91548db5UL, 0x834f9aa8UL, 0x8d4697a3UL 919 }; 920 921 static const ulong32 Tks1[] = { 922 0x00000000UL, 0x0b0e090dUL, 0x161c121aUL, 0x1d121b17UL, 0x2c382434UL, 0x27362d39UL, 0x3a24362eUL, 0x312a3f23UL, 923 0x58704868UL, 0x537e4165UL, 0x4e6c5a72UL, 0x4562537fUL, 0x74486c5cUL, 0x7f466551UL, 0x62547e46UL, 0x695a774bUL, 924 0xb0e090d0UL, 0xbbee99ddUL, 0xa6fc82caUL, 0xadf28bc7UL, 0x9cd8b4e4UL, 0x97d6bde9UL, 0x8ac4a6feUL, 0x81caaff3UL, 925 0xe890d8b8UL, 0xe39ed1b5UL, 0xfe8ccaa2UL, 0xf582c3afUL, 0xc4a8fc8cUL, 0xcfa6f581UL, 0xd2b4ee96UL, 0xd9bae79bUL, 926 0x7bdb3bbbUL, 0x70d532b6UL, 0x6dc729a1UL, 0x66c920acUL, 0x57e31f8fUL, 0x5ced1682UL, 0x41ff0d95UL, 0x4af10498UL, 927 0x23ab73d3UL, 0x28a57adeUL, 0x35b761c9UL, 0x3eb968c4UL, 0x0f9357e7UL, 0x049d5eeaUL, 0x198f45fdUL, 0x12814cf0UL, 928 0xcb3bab6bUL, 0xc035a266UL, 0xdd27b971UL, 0xd629b07cUL, 0xe7038f5fUL, 0xec0d8652UL, 0xf11f9d45UL, 0xfa119448UL, 929 0x934be303UL, 0x9845ea0eUL, 0x8557f119UL, 0x8e59f814UL, 0xbf73c737UL, 0xb47dce3aUL, 0xa96fd52dUL, 0xa261dc20UL, 930 0xf6ad766dUL, 0xfda37f60UL, 0xe0b16477UL, 0xebbf6d7aUL, 0xda955259UL, 0xd19b5b54UL, 0xcc894043UL, 0xc787494eUL, 931 0xaedd3e05UL, 0xa5d33708UL, 0xb8c12c1fUL, 0xb3cf2512UL, 0x82e51a31UL, 0x89eb133cUL, 0x94f9082bUL, 0x9ff70126UL, 932 0x464de6bdUL, 0x4d43efb0UL, 0x5051f4a7UL, 0x5b5ffdaaUL, 0x6a75c289UL, 0x617bcb84UL, 0x7c69d093UL, 0x7767d99eUL, 933 0x1e3daed5UL, 0x1533a7d8UL, 0x0821bccfUL, 0x032fb5c2UL, 0x32058ae1UL, 0x390b83ecUL, 0x241998fbUL, 0x2f1791f6UL, 934 0x8d764dd6UL, 0x867844dbUL, 0x9b6a5fccUL, 0x906456c1UL, 0xa14e69e2UL, 0xaa4060efUL, 0xb7527bf8UL, 0xbc5c72f5UL, 935 0xd50605beUL, 0xde080cb3UL, 0xc31a17a4UL, 0xc8141ea9UL, 0xf93e218aUL, 0xf2302887UL, 0xef223390UL, 0xe42c3a9dUL, 936 0x3d96dd06UL, 0x3698d40bUL, 0x2b8acf1cUL, 0x2084c611UL, 0x11aef932UL, 0x1aa0f03fUL, 0x07b2eb28UL, 0x0cbce225UL, 937 0x65e6956eUL, 0x6ee89c63UL, 0x73fa8774UL, 0x78f48e79UL, 0x49deb15aUL, 0x42d0b857UL, 0x5fc2a340UL, 0x54ccaa4dUL, 938 0xf741ecdaUL, 0xfc4fe5d7UL, 0xe15dfec0UL, 0xea53f7cdUL, 0xdb79c8eeUL, 0xd077c1e3UL, 0xcd65daf4UL, 0xc66bd3f9UL, 939 0xaf31a4b2UL, 0xa43fadbfUL, 0xb92db6a8UL, 0xb223bfa5UL, 0x83098086UL, 0x8807898bUL, 0x9515929cUL, 0x9e1b9b91UL, 940 0x47a17c0aUL, 0x4caf7507UL, 0x51bd6e10UL, 0x5ab3671dUL, 0x6b99583eUL, 0x60975133UL, 0x7d854a24UL, 0x768b4329UL, 941 0x1fd13462UL, 0x14df3d6fUL, 0x09cd2678UL, 0x02c32f75UL, 0x33e91056UL, 0x38e7195bUL, 0x25f5024cUL, 0x2efb0b41UL, 942 0x8c9ad761UL, 0x8794de6cUL, 0x9a86c57bUL, 0x9188cc76UL, 0xa0a2f355UL, 0xabacfa58UL, 0xb6bee14fUL, 0xbdb0e842UL, 943 0xd4ea9f09UL, 0xdfe49604UL, 0xc2f68d13UL, 0xc9f8841eUL, 0xf8d2bb3dUL, 0xf3dcb230UL, 0xeecea927UL, 0xe5c0a02aUL, 944 0x3c7a47b1UL, 0x37744ebcUL, 0x2a6655abUL, 0x21685ca6UL, 0x10426385UL, 0x1b4c6a88UL, 0x065e719fUL, 0x0d507892UL, 945 0x640a0fd9UL, 0x6f0406d4UL, 0x72161dc3UL, 0x791814ceUL, 0x48322bedUL, 0x433c22e0UL, 0x5e2e39f7UL, 0x552030faUL, 946 0x01ec9ab7UL, 0x0ae293baUL, 0x17f088adUL, 0x1cfe81a0UL, 0x2dd4be83UL, 0x26dab78eUL, 0x3bc8ac99UL, 0x30c6a594UL, 947 0x599cd2dfUL, 0x5292dbd2UL, 0x4f80c0c5UL, 0x448ec9c8UL, 0x75a4f6ebUL, 0x7eaaffe6UL, 0x63b8e4f1UL, 0x68b6edfcUL, 948 0xb10c0a67UL, 0xba02036aUL, 0xa710187dUL, 0xac1e1170UL, 0x9d342e53UL, 0x963a275eUL, 0x8b283c49UL, 0x80263544UL, 949 0xe97c420fUL, 0xe2724b02UL, 0xff605015UL, 0xf46e5918UL, 0xc544663bUL, 0xce4a6f36UL, 0xd3587421UL, 0xd8567d2cUL, 950 0x7a37a10cUL, 0x7139a801UL, 0x6c2bb316UL, 0x6725ba1bUL, 0x560f8538UL, 0x5d018c35UL, 0x40139722UL, 0x4b1d9e2fUL, 951 0x2247e964UL, 0x2949e069UL, 0x345bfb7eUL, 0x3f55f273UL, 0x0e7fcd50UL, 0x0571c45dUL, 0x1863df4aUL, 0x136dd647UL, 952 0xcad731dcUL, 0xc1d938d1UL, 0xdccb23c6UL, 0xd7c52acbUL, 0xe6ef15e8UL, 0xede11ce5UL, 0xf0f307f2UL, 0xfbfd0effUL, 953 0x92a779b4UL, 0x99a970b9UL, 0x84bb6baeUL, 0x8fb562a3UL, 0xbe9f5d80UL, 0xb591548dUL, 0xa8834f9aUL, 0xa38d4697UL 954 }; 955 956 static const ulong32 Tks2[] = { 957 0x00000000UL, 0x0d0b0e09UL, 0x1a161c12UL, 0x171d121bUL, 0x342c3824UL, 0x3927362dUL, 0x2e3a2436UL, 0x23312a3fUL, 958 0x68587048UL, 0x65537e41UL, 0x724e6c5aUL, 0x7f456253UL, 0x5c74486cUL, 0x517f4665UL, 0x4662547eUL, 0x4b695a77UL, 959 0xd0b0e090UL, 0xddbbee99UL, 0xcaa6fc82UL, 0xc7adf28bUL, 0xe49cd8b4UL, 0xe997d6bdUL, 0xfe8ac4a6UL, 0xf381caafUL, 960 0xb8e890d8UL, 0xb5e39ed1UL, 0xa2fe8ccaUL, 0xaff582c3UL, 0x8cc4a8fcUL, 0x81cfa6f5UL, 0x96d2b4eeUL, 0x9bd9bae7UL, 961 0xbb7bdb3bUL, 0xb670d532UL, 0xa16dc729UL, 0xac66c920UL, 0x8f57e31fUL, 0x825ced16UL, 0x9541ff0dUL, 0x984af104UL, 962 0xd323ab73UL, 0xde28a57aUL, 0xc935b761UL, 0xc43eb968UL, 0xe70f9357UL, 0xea049d5eUL, 0xfd198f45UL, 0xf012814cUL, 963 0x6bcb3babUL, 0x66c035a2UL, 0x71dd27b9UL, 0x7cd629b0UL, 0x5fe7038fUL, 0x52ec0d86UL, 0x45f11f9dUL, 0x48fa1194UL, 964 0x03934be3UL, 0x0e9845eaUL, 0x198557f1UL, 0x148e59f8UL, 0x37bf73c7UL, 0x3ab47dceUL, 0x2da96fd5UL, 0x20a261dcUL, 965 0x6df6ad76UL, 0x60fda37fUL, 0x77e0b164UL, 0x7aebbf6dUL, 0x59da9552UL, 0x54d19b5bUL, 0x43cc8940UL, 0x4ec78749UL, 966 0x05aedd3eUL, 0x08a5d337UL, 0x1fb8c12cUL, 0x12b3cf25UL, 0x3182e51aUL, 0x3c89eb13UL, 0x2b94f908UL, 0x269ff701UL, 967 0xbd464de6UL, 0xb04d43efUL, 0xa75051f4UL, 0xaa5b5ffdUL, 0x896a75c2UL, 0x84617bcbUL, 0x937c69d0UL, 0x9e7767d9UL, 968 0xd51e3daeUL, 0xd81533a7UL, 0xcf0821bcUL, 0xc2032fb5UL, 0xe132058aUL, 0xec390b83UL, 0xfb241998UL, 0xf62f1791UL, 969 0xd68d764dUL, 0xdb867844UL, 0xcc9b6a5fUL, 0xc1906456UL, 0xe2a14e69UL, 0xefaa4060UL, 0xf8b7527bUL, 0xf5bc5c72UL, 970 0xbed50605UL, 0xb3de080cUL, 0xa4c31a17UL, 0xa9c8141eUL, 0x8af93e21UL, 0x87f23028UL, 0x90ef2233UL, 0x9de42c3aUL, 971 0x063d96ddUL, 0x0b3698d4UL, 0x1c2b8acfUL, 0x112084c6UL, 0x3211aef9UL, 0x3f1aa0f0UL, 0x2807b2ebUL, 0x250cbce2UL, 972 0x6e65e695UL, 0x636ee89cUL, 0x7473fa87UL, 0x7978f48eUL, 0x5a49deb1UL, 0x5742d0b8UL, 0x405fc2a3UL, 0x4d54ccaaUL, 973 0xdaf741ecUL, 0xd7fc4fe5UL, 0xc0e15dfeUL, 0xcdea53f7UL, 0xeedb79c8UL, 0xe3d077c1UL, 0xf4cd65daUL, 0xf9c66bd3UL, 974 0xb2af31a4UL, 0xbfa43fadUL, 0xa8b92db6UL, 0xa5b223bfUL, 0x86830980UL, 0x8b880789UL, 0x9c951592UL, 0x919e1b9bUL, 975 0x0a47a17cUL, 0x074caf75UL, 0x1051bd6eUL, 0x1d5ab367UL, 0x3e6b9958UL, 0x33609751UL, 0x247d854aUL, 0x29768b43UL, 976 0x621fd134UL, 0x6f14df3dUL, 0x7809cd26UL, 0x7502c32fUL, 0x5633e910UL, 0x5b38e719UL, 0x4c25f502UL, 0x412efb0bUL, 977 0x618c9ad7UL, 0x6c8794deUL, 0x7b9a86c5UL, 0x769188ccUL, 0x55a0a2f3UL, 0x58abacfaUL, 0x4fb6bee1UL, 0x42bdb0e8UL, 978 0x09d4ea9fUL, 0x04dfe496UL, 0x13c2f68dUL, 0x1ec9f884UL, 0x3df8d2bbUL, 0x30f3dcb2UL, 0x27eecea9UL, 0x2ae5c0a0UL, 979 0xb13c7a47UL, 0xbc37744eUL, 0xab2a6655UL, 0xa621685cUL, 0x85104263UL, 0x881b4c6aUL, 0x9f065e71UL, 0x920d5078UL, 980 0xd9640a0fUL, 0xd46f0406UL, 0xc372161dUL, 0xce791814UL, 0xed48322bUL, 0xe0433c22UL, 0xf75e2e39UL, 0xfa552030UL, 981 0xb701ec9aUL, 0xba0ae293UL, 0xad17f088UL, 0xa01cfe81UL, 0x832dd4beUL, 0x8e26dab7UL, 0x993bc8acUL, 0x9430c6a5UL, 982 0xdf599cd2UL, 0xd25292dbUL, 0xc54f80c0UL, 0xc8448ec9UL, 0xeb75a4f6UL, 0xe67eaaffUL, 0xf163b8e4UL, 0xfc68b6edUL, 983 0x67b10c0aUL, 0x6aba0203UL, 0x7da71018UL, 0x70ac1e11UL, 0x539d342eUL, 0x5e963a27UL, 0x498b283cUL, 0x44802635UL, 984 0x0fe97c42UL, 0x02e2724bUL, 0x15ff6050UL, 0x18f46e59UL, 0x3bc54466UL, 0x36ce4a6fUL, 0x21d35874UL, 0x2cd8567dUL, 985 0x0c7a37a1UL, 0x017139a8UL, 0x166c2bb3UL, 0x1b6725baUL, 0x38560f85UL, 0x355d018cUL, 0x22401397UL, 0x2f4b1d9eUL, 986 0x642247e9UL, 0x692949e0UL, 0x7e345bfbUL, 0x733f55f2UL, 0x500e7fcdUL, 0x5d0571c4UL, 0x4a1863dfUL, 0x47136dd6UL, 987 0xdccad731UL, 0xd1c1d938UL, 0xc6dccb23UL, 0xcbd7c52aUL, 0xe8e6ef15UL, 0xe5ede11cUL, 0xf2f0f307UL, 0xfffbfd0eUL, 988 0xb492a779UL, 0xb999a970UL, 0xae84bb6bUL, 0xa38fb562UL, 0x80be9f5dUL, 0x8db59154UL, 0x9aa8834fUL, 0x97a38d46UL 989 }; 990 991 static const ulong32 Tks3[] = { 992 0x00000000UL, 0x090d0b0eUL, 0x121a161cUL, 0x1b171d12UL, 0x24342c38UL, 0x2d392736UL, 0x362e3a24UL, 0x3f23312aUL, 993 0x48685870UL, 0x4165537eUL, 0x5a724e6cUL, 0x537f4562UL, 0x6c5c7448UL, 0x65517f46UL, 0x7e466254UL, 0x774b695aUL, 994 0x90d0b0e0UL, 0x99ddbbeeUL, 0x82caa6fcUL, 0x8bc7adf2UL, 0xb4e49cd8UL, 0xbde997d6UL, 0xa6fe8ac4UL, 0xaff381caUL, 995 0xd8b8e890UL, 0xd1b5e39eUL, 0xcaa2fe8cUL, 0xc3aff582UL, 0xfc8cc4a8UL, 0xf581cfa6UL, 0xee96d2b4UL, 0xe79bd9baUL, 996 0x3bbb7bdbUL, 0x32b670d5UL, 0x29a16dc7UL, 0x20ac66c9UL, 0x1f8f57e3UL, 0x16825cedUL, 0x0d9541ffUL, 0x04984af1UL, 997 0x73d323abUL, 0x7ade28a5UL, 0x61c935b7UL, 0x68c43eb9UL, 0x57e70f93UL, 0x5eea049dUL, 0x45fd198fUL, 0x4cf01281UL, 998 0xab6bcb3bUL, 0xa266c035UL, 0xb971dd27UL, 0xb07cd629UL, 0x8f5fe703UL, 0x8652ec0dUL, 0x9d45f11fUL, 0x9448fa11UL, 999 0xe303934bUL, 0xea0e9845UL, 0xf1198557UL, 0xf8148e59UL, 0xc737bf73UL, 0xce3ab47dUL, 0xd52da96fUL, 0xdc20a261UL, 1000 0x766df6adUL, 0x7f60fda3UL, 0x6477e0b1UL, 0x6d7aebbfUL, 0x5259da95UL, 0x5b54d19bUL, 0x4043cc89UL, 0x494ec787UL, 1001 0x3e05aeddUL, 0x3708a5d3UL, 0x2c1fb8c1UL, 0x2512b3cfUL, 0x1a3182e5UL, 0x133c89ebUL, 0x082b94f9UL, 0x01269ff7UL, 1002 0xe6bd464dUL, 0xefb04d43UL, 0xf4a75051UL, 0xfdaa5b5fUL, 0xc2896a75UL, 0xcb84617bUL, 0xd0937c69UL, 0xd99e7767UL, 1003 0xaed51e3dUL, 0xa7d81533UL, 0xbccf0821UL, 0xb5c2032fUL, 0x8ae13205UL, 0x83ec390bUL, 0x98fb2419UL, 0x91f62f17UL, 1004 0x4dd68d76UL, 0x44db8678UL, 0x5fcc9b6aUL, 0x56c19064UL, 0x69e2a14eUL, 0x60efaa40UL, 0x7bf8b752UL, 0x72f5bc5cUL, 1005 0x05bed506UL, 0x0cb3de08UL, 0x17a4c31aUL, 0x1ea9c814UL, 0x218af93eUL, 0x2887f230UL, 0x3390ef22UL, 0x3a9de42cUL, 1006 0xdd063d96UL, 0xd40b3698UL, 0xcf1c2b8aUL, 0xc6112084UL, 0xf93211aeUL, 0xf03f1aa0UL, 0xeb2807b2UL, 0xe2250cbcUL, 1007 0x956e65e6UL, 0x9c636ee8UL, 0x877473faUL, 0x8e7978f4UL, 0xb15a49deUL, 0xb85742d0UL, 0xa3405fc2UL, 0xaa4d54ccUL, 1008 0xecdaf741UL, 0xe5d7fc4fUL, 0xfec0e15dUL, 0xf7cdea53UL, 0xc8eedb79UL, 0xc1e3d077UL, 0xdaf4cd65UL, 0xd3f9c66bUL, 1009 0xa4b2af31UL, 0xadbfa43fUL, 0xb6a8b92dUL, 0xbfa5b223UL, 0x80868309UL, 0x898b8807UL, 0x929c9515UL, 0x9b919e1bUL, 1010 0x7c0a47a1UL, 0x75074cafUL, 0x6e1051bdUL, 0x671d5ab3UL, 0x583e6b99UL, 0x51336097UL, 0x4a247d85UL, 0x4329768bUL, 1011 0x34621fd1UL, 0x3d6f14dfUL, 0x267809cdUL, 0x2f7502c3UL, 0x105633e9UL, 0x195b38e7UL, 0x024c25f5UL, 0x0b412efbUL, 1012 0xd7618c9aUL, 0xde6c8794UL, 0xc57b9a86UL, 0xcc769188UL, 0xf355a0a2UL, 0xfa58abacUL, 0xe14fb6beUL, 0xe842bdb0UL, 1013 0x9f09d4eaUL, 0x9604dfe4UL, 0x8d13c2f6UL, 0x841ec9f8UL, 0xbb3df8d2UL, 0xb230f3dcUL, 0xa927eeceUL, 0xa02ae5c0UL, 1014 0x47b13c7aUL, 0x4ebc3774UL, 0x55ab2a66UL, 0x5ca62168UL, 0x63851042UL, 0x6a881b4cUL, 0x719f065eUL, 0x78920d50UL, 1015 0x0fd9640aUL, 0x06d46f04UL, 0x1dc37216UL, 0x14ce7918UL, 0x2bed4832UL, 0x22e0433cUL, 0x39f75e2eUL, 0x30fa5520UL, 1016 0x9ab701ecUL, 0x93ba0ae2UL, 0x88ad17f0UL, 0x81a01cfeUL, 0xbe832dd4UL, 0xb78e26daUL, 0xac993bc8UL, 0xa59430c6UL, 1017 0xd2df599cUL, 0xdbd25292UL, 0xc0c54f80UL, 0xc9c8448eUL, 0xf6eb75a4UL, 0xffe67eaaUL, 0xe4f163b8UL, 0xedfc68b6UL, 1018 0x0a67b10cUL, 0x036aba02UL, 0x187da710UL, 0x1170ac1eUL, 0x2e539d34UL, 0x275e963aUL, 0x3c498b28UL, 0x35448026UL, 1019 0x420fe97cUL, 0x4b02e272UL, 0x5015ff60UL, 0x5918f46eUL, 0x663bc544UL, 0x6f36ce4aUL, 0x7421d358UL, 0x7d2cd856UL, 1020 0xa10c7a37UL, 0xa8017139UL, 0xb3166c2bUL, 0xba1b6725UL, 0x8538560fUL, 0x8c355d01UL, 0x97224013UL, 0x9e2f4b1dUL, 1021 0xe9642247UL, 0xe0692949UL, 0xfb7e345bUL, 0xf2733f55UL, 0xcd500e7fUL, 0xc45d0571UL, 0xdf4a1863UL, 0xd647136dUL, 1022 0x31dccad7UL, 0x38d1c1d9UL, 0x23c6dccbUL, 0x2acbd7c5UL, 0x15e8e6efUL, 0x1ce5ede1UL, 0x07f2f0f3UL, 0x0efffbfdUL, 1023 0x79b492a7UL, 0x70b999a9UL, 0x6bae84bbUL, 0x62a38fb5UL, 0x5d80be9fUL, 0x548db591UL, 0x4f9aa883UL, 0x4697a38dUL 1024 }; 1025 1026 #endif /* SMALL CODE */ 1027 1028 static const ulong32 rcon[] = { 1029 0x01000000UL, 0x02000000UL, 0x04000000UL, 0x08000000UL, 1030 0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL, 1031 0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, AES never uses more than 10 rcon values */ 1032 }; 1033 1034 1035 static int aes_setup(const unsigned char *key, int keylen, int rounds, aes_CBC *skey); 1036 static void aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey); 1037 static void aes_ecb_decrypt(const unsigned char *ct, unsigned char *pt, aes_CBC *skey); 1038 1039 #ifdef CLEAN_STACK 1040 static void _aes_ecb_decrypt(const unsigned char *ct, unsigned char *pt, aes_CBC *skey); 1041 static void _aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey); 1042 #endif 1043 1044 int matrixAesInit(sslCipherContext_t *ctx, unsigned char *IV, unsigned char *key, int keylen) 1045 { 1046 int x, err; 1047 1048 if (IV == NULL || key == NULL || ctx == NULL) { 1049 return -1; 1050 } 1051 /* 1052 setup cipher 1053 */ 1054 if ((err = aes_setup(key, keylen, 0, &ctx->aes)) != CRYPT_OK) { 1055 return -1; 1056 } 1057 /* 1058 copy IV 1059 */ 1060 ctx->aes.blocklen = 16; 1061 for (x = 0; x < ctx->aes.blocklen; x++) { 1062 ctx->aes.IV[x] = IV[x]; 1063 } 1064 return 0; 1065 } 1066 1067 int matrixAesEncrypt(sslCipherContext_t *ctx, unsigned char *pt, unsigned char *ct, int len) 1068 { 1069 int x, i; 1070 unsigned char tmp[MAXBLOCKSIZE]; 1071 1072 if (pt == NULL || ct == NULL || ctx == NULL || (len & 0x7) != 0) { 1073 matrixStrDebugMsg("Bad parameters to matrixAesEncrypt\n", NULL); 1074 return -1; 1075 } 1076 1077 /* 1078 is blocklen valid? 1079 */ 1080 if (ctx->aes.blocklen < 0 || ctx->aes.blocklen > 1081 (int)sizeof(ctx->aes.IV)) { 1082 return -1; 1083 } 1084 1085 for (i = 0; i < len; i += ctx->aes.blocklen) { 1086 /* 1087 xor IV against plaintext 1088 */ 1089 for (x = 0; x < ctx->aes.blocklen; x++) { 1090 tmp[x] = pt[x] ^ ctx->aes.IV[x]; 1091 } 1092 /* 1093 encrypt 1094 */ 1095 aes_ecb_encrypt(tmp, ct, &ctx->aes); 1096 1097 /* 1098 store IV [ciphertext] for a future block 1099 */ 1100 for (x = 0; x < ctx->aes.blocklen; x++) { 1101 ctx->aes.IV[x] = ct[x]; 1102 } 1103 ct += ctx->aes.blocklen; 1104 pt += ctx->aes.blocklen; 1105 } 1106 1107 #ifdef CLEAN_STACK 1108 zeromem(tmp, sizeof(tmp)); 1109 #endif 1110 return len; 1111 } 1112 1113 int matrixAesDecrypt(sslCipherContext_t *ctx, unsigned char *ct, unsigned char *pt, int len) 1114 { 1115 int x, i; 1116 unsigned char tmp[MAXBLOCKSIZE], tmp2[MAXBLOCKSIZE]; 1117 1118 if (pt == NULL || ct == NULL || ctx == NULL || (len & 0x7) != 0) { 1119 matrixStrDebugMsg("Bad parameters to matrixAesDecrypt\n", NULL); 1120 return -1; 1121 } 1122 1123 /* 1124 is blocklen valid? 1125 */ 1126 if (ctx->aes.blocklen < 0 || ctx->aes.blocklen > 1127 (int)sizeof(ctx->aes.IV)) { 1128 return -1; 1129 } 1130 for (i = 0; i < len; i += ctx->aes.blocklen) { 1131 /* 1132 decrypt the block from ct into tmp 1133 */ 1134 aes_ecb_decrypt(ct, tmp, &ctx->aes); 1135 /* 1136 xor IV against the plaintext of the previous step 1137 */ 1138 for (x = 0; x < ctx->aes.blocklen; x++) { 1139 /* 1140 copy CT in case ct == pt 1141 */ 1142 tmp2[x] = ct[x]; 1143 /* 1144 actually decrypt the byte 1145 */ 1146 pt[x] = tmp[x] ^ ctx->aes.IV[x]; 1147 } 1148 /* 1149 replace IV with this current ciphertext 1150 */ 1151 for (x = 0; x < ctx->aes.blocklen; x++) { 1152 ctx->aes.IV[x] = tmp2[x]; 1153 } 1154 ct += ctx->aes.blocklen; 1155 pt += ctx->aes.blocklen; 1156 } 1157 #ifdef CLEAN_STACK 1158 zeromem(tmp, sizeof(tmp)); 1159 zeromem(tmp2, sizeof(tmp2)); 1160 #endif 1161 return len; 1162 } 1163 1164 int aes_setup(const unsigned char *key, int keylen, int rounds, aes_CBC *skey) 1165 { 1166 int i, j; 1167 ulong32 temp, *rk, *rrk; 1168 1169 if (key == NULL || skey == NULL) { 1170 return -1; 1171 } 1172 1173 if (keylen != 16 && keylen != 24 && keylen != 32) { 1174 return CRYPT_INVALID_KEYSIZE; 1175 } 1176 1177 if (rounds != 0 && rounds != (10 + ((keylen/8)-2)*2)) { 1178 return CRYPT_INVALID_ROUNDS; 1179 } 1180 1181 skey->key.Nr = 10 + ((keylen/8)-2)*2; 1182 1183 /* 1184 setup the forward key 1185 */ 1186 i = 0; 1187 rk = skey->key.eK; 1188 LOAD32H(rk[0], key ); 1189 LOAD32H(rk[1], key + 4); 1190 LOAD32H(rk[2], key + 8); 1191 LOAD32H(rk[3], key + 12); 1192 if (keylen == 16) { 1193 j = 44; 1194 for (;;) { 1195 temp = rk[3]; 1196 rk[4] = rk[0] ^ 1197 (Te4_3[byte(temp, 2)]) ^ 1198 (Te4_2[byte(temp, 1)]) ^ 1199 (Te4_1[byte(temp, 0)]) ^ 1200 (Te4_0[byte(temp, 3)]) ^ 1201 rcon[i]; 1202 rk[5] = rk[1] ^ rk[4]; 1203 rk[6] = rk[2] ^ rk[5]; 1204 rk[7] = rk[3] ^ rk[6]; 1205 if (++i == 10) { 1206 break; 1207 } 1208 rk += 4; 1209 } 1210 } else if (keylen == 24) { 1211 j = 52; 1212 LOAD32H(rk[4], key + 16); 1213 LOAD32H(rk[5], key + 20); 1214 for (;;) { 1215 #ifdef _MSC_VER 1216 temp = skey->key.eK[rk - skey->key.eK + 5]; 1217 #else 1218 temp = rk[5]; 1219 #endif /* _MSC_VER */ 1220 rk[ 6] = rk[ 0] ^ 1221 (Te4_3[byte(temp, 2)]) ^ 1222 (Te4_2[byte(temp, 1)]) ^ 1223 (Te4_1[byte(temp, 0)]) ^ 1224 (Te4_0[byte(temp, 3)]) ^ 1225 rcon[i]; 1226 rk[ 7] = rk[ 1] ^ rk[ 6]; 1227 rk[ 8] = rk[ 2] ^ rk[ 7]; 1228 rk[ 9] = rk[ 3] ^ rk[ 8]; 1229 if (++i == 8) { 1230 break; 1231 } 1232 rk[10] = rk[ 4] ^ rk[ 9]; 1233 rk[11] = rk[ 5] ^ rk[10]; 1234 rk += 6; 1235 } 1236 } else if (keylen == 32) { 1237 j = 60; 1238 LOAD32H(rk[4], key + 16); 1239 LOAD32H(rk[5], key + 20); 1240 LOAD32H(rk[6], key + 24); 1241 LOAD32H(rk[7], key + 28); 1242 for (;;) { 1243 #ifdef _MSC_VER 1244 temp = skey->key.eK[rk - skey->key.eK + 7]; 1245 #else 1246 temp = rk[7]; 1247 #endif /* _MSC_VER */ 1248 rk[ 8] = rk[ 0] ^ 1249 (Te4_3[byte(temp, 2)]) ^ 1250 (Te4_2[byte(temp, 1)]) ^ 1251 (Te4_1[byte(temp, 0)]) ^ 1252 (Te4_0[byte(temp, 3)]) ^ 1253 rcon[i]; 1254 rk[ 9] = rk[ 1] ^ rk[ 8]; 1255 rk[10] = rk[ 2] ^ rk[ 9]; 1256 rk[11] = rk[ 3] ^ rk[10]; 1257 if (++i == 7) { 1258 break; 1259 } 1260 temp = rk[11]; 1261 rk[12] = rk[ 4] ^ 1262 (Te4_3[byte(temp, 3)]) ^ 1263 (Te4_2[byte(temp, 2)]) ^ 1264 (Te4_1[byte(temp, 1)]) ^ 1265 (Te4_0[byte(temp, 0)]); 1266 rk[13] = rk[ 5] ^ rk[12]; 1267 rk[14] = rk[ 6] ^ rk[13]; 1268 rk[15] = rk[ 7] ^ rk[14]; 1269 rk += 8; 1270 } 1271 } else { 1272 /* 1273 this can't happen 1274 */ 1275 j = 4; 1276 } 1277 1278 /* 1279 setup the inverse key now 1280 */ 1281 rk = skey->key.dK; 1282 rrk = skey->key.eK + j - 4; 1283 1284 /* 1285 apply the inverse MixColumn transform to all round keys but the first and the last: 1286 */ 1287 /* copy first */ 1288 *rk++ = *rrk++; 1289 *rk++ = *rrk++; 1290 *rk++ = *rrk++; 1291 *rk = *rrk; 1292 rk -= 3; rrk -= 3; 1293 1294 for (i = 1; i < skey->key.Nr; i++) { 1295 rrk -= 4; 1296 rk += 4; 1297 #ifdef SMALL_CODE 1298 temp = rrk[0]; 1299 rk[0] = 1300 Td0(255 & Te4[byte(temp, 3)]) ^ 1301 Td1(255 & Te4[byte(temp, 2)]) ^ 1302 Td2(255 & Te4[byte(temp, 1)]) ^ 1303 Td3(255 & Te4[byte(temp, 0)]); 1304 temp = rrk[1]; 1305 rk[1] = 1306 Td0(255 & Te4[byte(temp, 3)]) ^ 1307 Td1(255 & Te4[byte(temp, 2)]) ^ 1308 Td2(255 & Te4[byte(temp, 1)]) ^ 1309 Td3(255 & Te4[byte(temp, 0)]); 1310 temp = rrk[2]; 1311 rk[2] = 1312 Td0(255 & Te4[byte(temp, 3)]) ^ 1313 Td1(255 & Te4[byte(temp, 2)]) ^ 1314 Td2(255 & Te4[byte(temp, 1)]) ^ 1315 Td3(255 & Te4[byte(temp, 0)]); 1316 temp = rrk[3]; 1317 rk[3] = 1318 Td0(255 & Te4[byte(temp, 3)]) ^ 1319 Td1(255 & Te4[byte(temp, 2)]) ^ 1320 Td2(255 & Te4[byte(temp, 1)]) ^ 1321 Td3(255 & Te4[byte(temp, 0)]); 1322 #else /* SMALL CODE */ 1323 temp = rrk[0]; 1324 rk[0] = 1325 Tks0[byte(temp, 3)] ^ 1326 Tks1[byte(temp, 2)] ^ 1327 Tks2[byte(temp, 1)] ^ 1328 Tks3[byte(temp, 0)]; 1329 temp = rrk[1]; 1330 rk[1] = 1331 Tks0[byte(temp, 3)] ^ 1332 Tks1[byte(temp, 2)] ^ 1333 Tks2[byte(temp, 1)] ^ 1334 Tks3[byte(temp, 0)]; 1335 temp = rrk[2]; 1336 rk[2] = 1337 Tks0[byte(temp, 3)] ^ 1338 Tks1[byte(temp, 2)] ^ 1339 Tks2[byte(temp, 1)] ^ 1340 Tks3[byte(temp, 0)]; 1341 temp = rrk[3]; 1342 rk[3] = 1343 Tks0[byte(temp, 3)] ^ 1344 Tks1[byte(temp, 2)] ^ 1345 Tks2[byte(temp, 1)] ^ 1346 Tks3[byte(temp, 0)]; 1347 #endif /* SMALL CODE */ 1348 } 1349 1350 /* copy last */ 1351 rrk -= 4; 1352 rk += 4; 1353 *rk++ = *rrk++; 1354 *rk++ = *rrk++; 1355 *rk++ = *rrk++; 1356 *rk = *rrk; 1357 1358 return CRYPT_OK; 1359 } 1360 1361 #ifdef CLEAN_STACK 1362 void aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey) 1363 { 1364 _aes_ecb_encrypt(pt, ct, skey); 1365 burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); 1366 } 1367 #endif /* CLEAN_STACK */ 1368 1369 #ifdef CLEAN_STACK 1370 static void _aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey) 1371 #else 1372 void aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey) 1373 #endif /* CLEAN_STACK */ 1374 { 1375 ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; 1376 int Nr, r; 1377 1378 if (pt == NULL || ct == NULL || skey == NULL) { 1379 return; 1380 } 1381 1382 Nr = skey->key.Nr; 1383 rk = skey->key.eK; 1384 1385 /* 1386 map byte array block to cipher state 1387 and add initial round key: 1388 */ 1389 LOAD32H(s0, pt ); s0 ^= rk[0]; 1390 LOAD32H(s1, pt + 4); s1 ^= rk[1]; 1391 LOAD32H(s2, pt + 8); s2 ^= rk[2]; 1392 LOAD32H(s3, pt + 12); s3 ^= rk[3]; 1393 1394 /* 1395 Nr - 1 full rounds: 1396 */ 1397 r = Nr >> 1; 1398 for (;;) { 1399 1400 t0 = 1401 Te0(byte(s0, 3)) ^ 1402 Te1(byte(s1, 2)) ^ 1403 Te2(byte(s2, 1)) ^ 1404 Te3(byte(s3, 0)) ^ 1405 rk[4]; 1406 t1 = 1407 Te0(byte(s1, 3)) ^ 1408 Te1(byte(s2, 2)) ^ 1409 Te2(byte(s3, 1)) ^ 1410 Te3(byte(s0, 0)) ^ 1411 rk[5]; 1412 t2 = 1413 Te0(byte(s2, 3)) ^ 1414 Te1(byte(s3, 2)) ^ 1415 Te2(byte(s0, 1)) ^ 1416 Te3(byte(s1, 0)) ^ 1417 rk[6]; 1418 t3 = 1419 Te0(byte(s3, 3)) ^ 1420 Te1(byte(s0, 2)) ^ 1421 Te2(byte(s1, 1)) ^ 1422 Te3(byte(s2, 0)) ^ 1423 rk[7]; 1424 1425 rk += 8; 1426 if (--r == 0) { 1427 break; 1428 } 1429 1430 s0 = 1431 Te0(byte(t0, 3)) ^ 1432 Te1(byte(t1, 2)) ^ 1433 Te2(byte(t2, 1)) ^ 1434 Te3(byte(t3, 0)) ^ 1435 rk[0]; 1436 s1 = 1437 Te0(byte(t1, 3)) ^ 1438 Te1(byte(t2, 2)) ^ 1439 Te2(byte(t3, 1)) ^ 1440 Te3(byte(t0, 0)) ^ 1441 rk[1]; 1442 s2 = 1443 Te0(byte(t2, 3)) ^ 1444 Te1(byte(t3, 2)) ^ 1445 Te2(byte(t0, 1)) ^ 1446 Te3(byte(t1, 0)) ^ 1447 rk[2]; 1448 s3 = 1449 Te0(byte(t3, 3)) ^ 1450 Te1(byte(t0, 2)) ^ 1451 Te2(byte(t1, 1)) ^ 1452 Te3(byte(t2, 0)) ^ 1453 rk[3]; 1454 } 1455 /* 1456 apply last round and map cipher state to byte array block: 1457 */ 1458 s0 = 1459 (Te4_3[byte(t0, 3)]) ^ 1460 (Te4_2[byte(t1, 2)]) ^ 1461 (Te4_1[byte(t2, 1)]) ^ 1462 (Te4_0[byte(t3, 0)]) ^ 1463 rk[0]; 1464 STORE32H(s0, ct); 1465 s1 = 1466 (Te4_3[byte(t1, 3)]) ^ 1467 (Te4_2[byte(t2, 2)]) ^ 1468 (Te4_1[byte(t3, 1)]) ^ 1469 (Te4_0[byte(t0, 0)]) ^ 1470 rk[1]; 1471 STORE32H(s1, ct+4); 1472 s2 = 1473 (Te4_3[byte(t2, 3)]) ^ 1474 (Te4_2[byte(t3, 2)]) ^ 1475 (Te4_1[byte(t0, 1)]) ^ 1476 (Te4_0[byte(t1, 0)]) ^ 1477 rk[2]; 1478 STORE32H(s2, ct+8); 1479 s3 = 1480 (Te4_3[byte(t3, 3)]) ^ 1481 (Te4_2[byte(t0, 2)]) ^ 1482 (Te4_1[byte(t1, 1)]) ^ 1483 (Te4_0[byte(t2, 0)]) ^ 1484 rk[3]; 1485 STORE32H(s3, ct+12); 1486 } 1487 1488 #ifdef CLEAN_STACK 1489 void aes_ecb_decrypt(const unsigned char *pt, unsigned char *ct, aes_CBC *skey) 1490 { 1491 _aes_ecb_decrypt(pt, ct, skey); 1492 burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); 1493 } 1494 #endif /* CLEAN_STACK */ 1495 1496 #ifdef CLEAN_STACK 1497 static void _aes_ecb_decrypt(const unsigned char *ct, unsigned char *pt, aes_CBC *skey) 1498 #else 1499 void aes_ecb_decrypt(const unsigned char *ct, unsigned char *pt, aes_CBC *skey) 1500 #endif /* CLEAN_STACK */ 1501 { 1502 ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; 1503 int Nr, r; 1504 1505 if (pt == NULL || ct == NULL || skey == NULL) { 1506 return; 1507 } 1508 1509 Nr = skey->key.Nr; 1510 rk = skey->key.dK; 1511 1512 /* 1513 map byte array block to cipher state and add initial round key: 1514 */ 1515 LOAD32H(s0, ct ); s0 ^= rk[0]; 1516 LOAD32H(s1, ct + 4); s1 ^= rk[1]; 1517 LOAD32H(s2, ct + 8); s2 ^= rk[2]; 1518 LOAD32H(s3, ct + 12); s3 ^= rk[3]; 1519 1520 /* 1521 Nr - 1 full rounds: 1522 */ 1523 r = Nr >> 1; 1524 for (;;) { 1525 1526 t0 = 1527 Td0(byte(s0, 3)) ^ 1528 Td1(byte(s3, 2)) ^ 1529 Td2(byte(s2, 1)) ^ 1530 Td3(byte(s1, 0)) ^ 1531 rk[4]; 1532 t1 = 1533 Td0(byte(s1, 3)) ^ 1534 Td1(byte(s0, 2)) ^ 1535 Td2(byte(s3, 1)) ^ 1536 Td3(byte(s2, 0)) ^ 1537 rk[5]; 1538 t2 = 1539 Td0(byte(s2, 3)) ^ 1540 Td1(byte(s1, 2)) ^ 1541 Td2(byte(s0, 1)) ^ 1542 Td3(byte(s3, 0)) ^ 1543 rk[6]; 1544 t3 = 1545 Td0(byte(s3, 3)) ^ 1546 Td1(byte(s2, 2)) ^ 1547 Td2(byte(s1, 1)) ^ 1548 Td3(byte(s0, 0)) ^ 1549 rk[7]; 1550 1551 rk += 8; 1552 if (--r == 0) { 1553 break; 1554 } 1555 1556 s0 = 1557 Td0(byte(t0, 3)) ^ 1558 Td1(byte(t3, 2)) ^ 1559 Td2(byte(t2, 1)) ^ 1560 Td3(byte(t1, 0)) ^ 1561 rk[0]; 1562 s1 = 1563 Td0(byte(t1, 3)) ^ 1564 Td1(byte(t0, 2)) ^ 1565 Td2(byte(t3, 1)) ^ 1566 Td3(byte(t2, 0)) ^ 1567 rk[1]; 1568 s2 = 1569 Td0(byte(t2, 3)) ^ 1570 Td1(byte(t1, 2)) ^ 1571 Td2(byte(t0, 1)) ^ 1572 Td3(byte(t3, 0)) ^ 1573 rk[2]; 1574 s3 = 1575 Td0(byte(t3, 3)) ^ 1576 Td1(byte(t2, 2)) ^ 1577 Td2(byte(t1, 1)) ^ 1578 Td3(byte(t0, 0)) ^ 1579 rk[3]; 1580 } 1581 1582 /* 1583 apply last round and map cipher state to byte array block: 1584 */ 1585 s0 = 1586 (Td4[byte(t0, 3)] & 0xff000000) ^ 1587 (Td4[byte(t3, 2)] & 0x00ff0000) ^ 1588 (Td4[byte(t2, 1)] & 0x0000ff00) ^ 1589 (Td4[byte(t1, 0)] & 0x000000ff) ^ 1590 rk[0]; 1591 STORE32H(s0, pt); 1592 s1 = 1593 (Td4[byte(t1, 3)] & 0xff000000) ^ 1594 (Td4[byte(t0, 2)] & 0x00ff0000) ^ 1595 (Td4[byte(t3, 1)] & 0x0000ff00) ^ 1596 (Td4[byte(t2, 0)] & 0x000000ff) ^ 1597 rk[1]; 1598 STORE32H(s1, pt+4); 1599 s2 = 1600 (Td4[byte(t2, 3)] & 0xff000000) ^ 1601 (Td4[byte(t1, 2)] & 0x00ff0000) ^ 1602 (Td4[byte(t0, 1)] & 0x0000ff00) ^ 1603 (Td4[byte(t3, 0)] & 0x000000ff) ^ 1604 rk[2]; 1605 STORE32H(s2, pt+8); 1606 s3 = 1607 (Td4[byte(t3, 3)] & 0xff000000) ^ 1608 (Td4[byte(t2, 2)] & 0x00ff0000) ^ 1609 (Td4[byte(t1, 1)] & 0x0000ff00) ^ 1610 (Td4[byte(t0, 0)] & 0x000000ff) ^ 1611 rk[3]; 1612 STORE32H(s3, pt+12); 1613 } 1614 1615 #ifdef CLEAN_STACK 1616 void aes(const unsigned char *ct, unsigned char *pt, aes_CBC *skey) 1617 { 1618 _aes_ecb_decrypt(ct, pt, skey); 1619 burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); 1620 } 1621 #endif /* CLEAN_STACK */ 1622 1623 1624 #ifdef PEERSEC_TEST 1625 1626 int matrixAesTest() 1627 { 1628 int err; 1629 static const struct { 1630 int keylen; 1631 unsigned char key[32], pt[16], ct[16]; 1632 } tests[] = { 1633 { 16, 1634 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 1635 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, 1636 { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 1637 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, 1638 { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 1639 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } 1640 }, { 1641 24, 1642 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 1643 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 1644 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, 1645 { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 1646 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, 1647 { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, 1648 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } 1649 }, { 1650 32, 1651 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 1652 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 1653 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 1654 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, 1655 { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 1656 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, 1657 { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, 1658 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } 1659 } 1660 }; 1661 1662 aes_CBC key; 1663 unsigned char tmp[2][16]; 1664 int i, y; 1665 1666 for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { 1667 zeromem(&key, sizeof(key)); 1668 if ((err = aes_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { 1669 return err; 1670 } 1671 1672 aes_ecb_encrypt(tests[i].pt, tmp[0], &key); 1673 aes_ecb_decrypt(tmp[0], tmp[1], &key); 1674 if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { 1675 #if 0 1676 printf("\n\nTest %d failed\n", i); 1677 if (memcmp(tmp[0], tests[i].ct, 16)) { 1678 printf("CT: "); 1679 for (i = 0; i < 16; i++) { 1680 printf("%02x ", tmp[0][i]); 1681 } 1682 printf("\n"); 1683 } else { 1684 printf("PT: "); 1685 for (i = 0; i < 16; i++) { 1686 printf("%02x ", tmp[1][i]); 1687 } 1688 printf("\n"); 1689 } 1690 #endif /* 0 */ 1691 return CRYPT_FAIL_TESTVECTOR; 1692 } 1693 1694 /* 1695 now see if we can encrypt all zero bytes 1000 times, 1696 decrypt and come back where we started 1697 */ 1698 for (y = 0; y < 16; y++) tmp[0][y] = 0; 1699 for (y = 0; y < 1000; y++) aes_ecb_encrypt(tmp[0], tmp[0], &key); 1700 for (y = 0; y < 1000; y++) aes_ecb_decrypt(tmp[0], tmp[0], &key); 1701 for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; 1702 } 1703 return CRYPT_OK; 1704 } 1705 #endif /* PEERSEC_TEST */ 1706 1707 #endif /* USE_AES */ 1708 /******************************************************************************/ -
src/crypto/peersec/md5.c
diff -urN matrixssl.old/src/crypto/peersec/md5.c matrixssl/src/crypto/peersec/md5.c
old new 334 334 #ifdef CLEAN_STACK 335 335 psZeromem(md, sizeof(hash_state)); 336 336 #endif /* CLEAN_STACK */ 337 return 16;337 return SSL_MD5_HASH_SIZE; 338 338 } 339 339 340 340 #ifdef PEERSEC_TEST -
src/crypto/peersec/pscrypto.h
diff -urN matrixssl.old/src/crypto/peersec/pscrypto.h matrixssl/src/crypto/peersec/pscrypto.h
old new 40 40 PeerSec crypto-specific defines. 41 41 */ 42 42 #define SMALL_CODE 43 # defineCLEAN_STACK43 #undef CLEAN_STACK 44 44 /* 45 45 If Native 64 bit integers are not supported, we must set the 16 bit flag 46 46 to produce 32 bit mp_words in mpi.h -
src/crypto/peersec/sha1.c
diff -urN matrixssl.old/src/crypto/peersec/sha1.c matrixssl/src/crypto/peersec/sha1.c
old new 273 273 #ifdef CLEAN_STACK 274 274 psZeromem(md, sizeof(hash_state)); 275 275 #endif /* CLEAN_STACK */ 276 return 20;276 return SSL_SHA1_HASH_SIZE; 277 277 } 278 278 279 279 #ifdef PEERSEC_TEST -
src/Makefile
diff -urN matrixssl.old/src/Makefile matrixssl/src/Makefile
old new 15 15 E = 16 16 17 17 LIBRARY = libmatrixssl$(SO) 18 STATIC = libmatrixsslstatic$(A) 18 19 SOVERSION_MAJ := 1 20 SOVERSION_MIN := 2 21 SOVERSION_REV := 4 22 SONAME := $(LIBRARY).$(SOVERSION_MAJ) 23 SOREAL := $(LIBRARY).$(SOVERSION_MAJ).$(SOVERSION_MIN).$(SOVERSION_REV) 24 25 +STATIC = libmatrixsslstatic$(A) 19 26 20 27 OBJECTS = \ 21 28 cipherSuite$(O) \ … … 24 31 sslEncode$(O) \ 25 32 sslv3$(O) \ 26 33 os/linux/linux$(O) \ 34 crypto/peersec/aes$(O) \ 27 35 crypto/peersec/arc4$(O) \ 28 36 crypto/peersec/asn1$(O) \ 29 37 crypto/peersec/base64$(O) \ … … 66 74 # 67 75 SHARED = -shared 68 76 CFLAGS = $(DFLAGS) -DLINUX -I./ -Icrypto/peersec 69 LDFLAGS = -lc -lpthread - lcrypto77 LDFLAGS = -lc -lpthread -Wl,-soname,$(SONAME) 70 78 71 79 # 72 80 # Override variables for compilation on Mac OS X (Darwin) … … 105 113 # Build the library 106 114 # 107 115 $(LIBRARY): $(OBJECTS) 108 $(CC) $(SHARED) -o $@ $^ $(LDFLAGS) 109 $(STRIP) $(LIBRARY) 116 $(CC) $(SHARED) -o $(SOREAL) $^ $(LDFLAGS) 117 ln -sf $(SOREAL) $(SONAME) 118 ln -sf $(SONAME) $(LIBRARY) 110 119 111 120 # 112 121 # Build the static library … … 119 128 # Clean up all generated files 120 129 # 121 130 clean: 122 rm -f $(LIBRARY) $(OBJECTS) $(S TATIC)131 rm -f $(LIBRARY) $(OBJECTS) $(SONAME) $(SOREAL) -
src/matrixSsl.c
diff -urN matrixssl.old/src/matrixSsl.c matrixssl/src/matrixSsl.c
old new 950 950 sslAssert(ssl->hsPool == NULL); 951 951 } 952 952 953 954 /******************************************************************************/ 955 /* 956 Compute an MD5 digest 957 */ 958 unsigned char *matrixMd5Digest( 959 const unsigned char *buf, unsigned long len, unsigned char *hash) 960 { 961 sslMd5Context_t ctx; 962 static unsigned char hashBuf[SSL_MD5_HASH_SIZE]; 963 964 if (hash == NULL) { 965 hash = hashBuf; 966 } 967 968 matrixMd5Init(&ctx); 969 matrixMd5Update(&ctx, buf, len); 970 matrixMd5Final(&ctx, hash); 971 972 return hash; 973 } 974 975 /******************************************************************************/ 976 /* 977 Compute an SHA1 digest 978 */ 979 unsigned char *matrixSha1Digest( 980 const unsigned char *buf, unsigned long len, unsigned char *hash) 981 { 982 sslSha1Context_t ctx; 983 static unsigned char hashBuf[SSL_SHA1_HASH_SIZE]; 984 985 if (hash == NULL) { 986 hash = hashBuf; 987 } 988 989 matrixSha1Init(&ctx); 990 matrixSha1Update(&ctx, buf, len); 991 matrixSha1Final(&ctx, hash); 992 993 return hash; 994 } 995 953 996 /******************************************************************************/ 954 997 /* 955 998 Debugging APIs
Note:
See TracBrowser
for help on using the repository browser.
