|
|
1.1 ! root 1: sed 's/^ //' >README <<\*-*-END-*-* ! 2: To compile: ! 3: ! 4: cc -o hash2.0 hash2.0.c standardSBoxes2.c ! 5: ! 6: To run: ! 7: ! 8: <inputFile hash2.0 ! 9: ! 10: The inputFile is read and a hash value computed from it. The hash ! 11: value is then printed on standard out. ! 12: ! 13: options: ! 14: ! 15: You can increase the number of iterations to 4 by saying: ! 16: ! 17: <inputFile hash2.0 4 ! 18: ! 19: You can increase the size of the output to 256 bits by saying: ! 20: ! 21: <inputFile hash2.0 4 256 ! 22: *-*-END-*-* ! 23: sed 's/^ //' >hash2.0.c <<\*-*-END-*-* ! 24: /* This is a reference implementation of Snefru. Snefru is a one-way hash ! 25: function that provides authentication. It does not provide secrecy. ! 26: ! 27: Snefru is named after a Pharaoh of ancient Egypt. ! 28: ! 29: ! 30: ! 31: Copyright (c) Xerox Corporation 1989 All rights reserved. ! 32: ! 33: License to copy and use this software is granted provided that it is ! 34: identified as the 'Xerox Secure Hash Function' in all material mentioning ! 35: or referencing this software or this hash function. ! 36: ! 37: License is also granted to make and use derivative works provided that such ! 38: works are identified as 'derived from the Xerox Secure Hash Function' in ! 39: all material mentioning or referencing the derived work. ! 40: ! 41: Xerox Corporation makes no representations concerning either the ! 42: merchantability of this software or the suitability of this software for ! 43: any particular purpose. It is provided "as is" without express or implied ! 44: warranty of any kind. ! 45: ! 46: These notices must be retained in any copies of any part of this software. ! 47: ! 48: ! 49: ! 50: This is version 2.0, July 31, 1989. ! 51: ! 52: Version 2.0 is algorithmically different from versions 1.4 and 1.3. ! 53: In particular, version 2.0 makes the following changes: ! 54: ! 55: 1.) The S-boxes in version 2.0 have been computed in accordance with a ! 56: publicly known algorithm. ! 57: ! 58: 2.) The special case handling of inputs shorter than 64 bytes has been ! 59: deleted. This special case code offered little performance advantage and ! 60: increased the complexity of the algorithm. In addition, Coppersmith ! 61: noticed a weakness that affected the 128-bit-input/128-bit-output version ! 62: of Snefru (though not the 512-bit input/128-bit or 256-bit output version). ! 63: ! 64: 3.) The parameters p0, p1, and p2 have been eliminated. There are several ! 65: reasons for this change. The principle reason is that they increase the ! 66: complexity both of the code and the conceptual complexity of the hash ! 67: function, and provide only modest improvement in security. ! 68: ! 69: 4.) Because the parameter mechanism was used to distinguish between inputs ! 70: that differ only in the number of trailing 0 bits, a different mechanism ! 71: has been adopted. This new mechanism simply counts the number of bits in ! 72: the input, and then places this 64-bit bit-count into the rightmost ! 73: 64-bits of the last block hashed. A slightly different method of applying ! 74: the hash also been adopted. ! 75: ! 76: 5.) Several people requested a larger output (to provide greater ! 77: security). Because this will not always be needed, the algorithm was ! 78: modified to generate either 128 bits or 256 bits of output, depending on a ! 79: command line option. Notice that 128 bits of output only provides 64 ! 80: "real" bits of security (because of square root attacks) and similarly 256 ! 81: bits of output provides only 128 "real" bits of security. Use of the ! 82: higher security 256-bit output will slow down the algorithm by about 1/3 ! 83: (32 bytes per application of Hash512 versus 48 bytes per application of ! 84: Hash512). ! 85: ! 86: 6.) Other non-algorithmic changes have been made to the code, in keeping ! 87: with various criticisms and comments. ! 88: ! 89: ! 90: ! 91: A 128 bit output should provide adequate security for most commercial ! 92: applications (barring discovery of some unexpected weakness in the ! 93: algorithm). Where higher security is desired, the 256-bit output ! 94: size can be used. ! 95: ! 96: Version 1.4 differs from Version 1.3 only in the wording of the export ! 97: notice. Version 1.3 forbids export entirely. ! 98: ! 99: Version 1.3 fixes a security bug in handling short files (64 bytes or less). ! 100: Such files should use the length of the file as a parameter to the hash, ! 101: to prevent two files of different lengths from producing the same hash ! 102: value if one file is a prefix of another. This had been done for long ! 103: files (greater than 64 bytes in length) but was overlooked for short ! 104: files. ! 105: ! 106: In addition, Version 1.3 improves the way in which the parameter is mixed ! 107: into the hash. In essence, the change mixes in the parameter one more ! 108: time. Although a similar effect can be achieved by increasing the security ! 109: parameter by 1 (e.g., from 2 to 3) this also increases the amount of ! 110: computation required by 50%. ! 111: ! 112: Version 1.3 also makes some more changes in the notices that accompany the ! 113: code. ! 114: ! 115: Version 1.2 makes no changes in the code. Only the notices that accompany ! 116: the code have changed, and some changes in the comments. ! 117: ! 118: Version 1.1 added the routine 'convertBytes' to convert an array of 'char' ! 119: into an array of unsigned long int. This conversion is a no-op on the SUN ! 120: and many other computers, but will have an effect on the VAX and computers ! 121: with 'backwards' byte ordering. It will also SLOW DOWN THE HASH FUNCTION, ! 122: so it should be removed whenever possible if speed is an issue. ! 123: ! 124: This program reads from the standard input until EOF is reached (the first ! 125: 'read' that does not return a full buffer of data). The data on the ! 126: standard input is 'hashed' with a cryptographically secure one-way hash ! 127: function (also known as a 'message digest', 'fingerprint', 'Manipulation ! 128: Detection Code' or 'MDC'). The hash is then printed on the standard ! 129: output. ! 130: ! 131: The input can be of any size. The output is either 128 bits printed as 32 ! 132: characters in hex, or 256 bits printed as 64 characters in hex. ! 133: ! 134: The primary use of one-way hash functions is to determine if there have been ! 135: any unauthorized, malicious, or accidental changes made to a file. For ! 136: example, if an executable program file produces the hash '209884c4 ! 137: 2e89d967 5456ac0e 61269550', then any change to that program file will ! 138: cause the hash to be changed. Thus, the tampering can be detected by ! 139: comparing the current output value with the previously computed (and ! 140: presumably correct) output value. ! 141: ! 142: Hash512 is the centrol routine in this program. It is used in this program ! 143: in a linear fashion -- i.e., a sequential file is hashed down by repeated ! 144: applications of Hash512. Changing a single bit in the file would then ! 145: require completely re-computing the hash from the point of change onward. ! 146: ! 147: Hash512 can be used in a tree-structured fashion to authenticate a large ! 148: table of data. This would imply that changing a single bit would not force ! 149: a complete re-computation of the hash value, but would instead require ! 150: only log n re-computations of Hash512 to 'patch up' the changes along the ! 151: path from the root to the changed leaf entry. A tree-structured ! 152: application also has the advantage that any single entry in the table can ! 153: subsequently be authenticated by someone who knows only the ! 154: 'authentication path' from the root of the tree to the leaf entry. These ! 155: concepts are discussed more thoroughly in 'Secrecy, Authentication, and ! 156: Public Key Systems' by Ralph C. Merkle, UMI Research Press, 1982 (see ! 157: particularly Chapter 2, 'One Way Hash Functions'). The use of a ! 158: tree-structured pattern of applications of a one-way hash function is ! 159: covered by U.S. Patent #4,309,569, 'Method of Providing Digital ! 160: Signatures' (contact Stanford University, Office of Technology Licensing). ! 161: ! 162: ! 163: At the present time (July 31, 1989) the author knows of no method for ! 164: 'breaking' this one-way function, (i.e., finding two input files that ! 165: produce the same output value). The algorithm has undergone some review ! 166: for security. Further review is expected. Use of this algorithm for ! 167: production use is not recomended at this time. Note that we are ! 168: specifically examining the security of Hash512 with a 512-bit input and a ! 169: 128-bit output, and Hash512 with a 512-bit input and a 256-bit output. ! 170: Use of other sizes is not recomended at this time. In particular, we ! 171: recomend against the use of output sizes smaller than 128 bits, and ! 172: recomend against the use of an input that is less than 2 (two) times the ! 173: size of the output. When the input size equals the output size, Snefru ! 174: suffers a serious degradation in security (an observation due to ! 175: Coppersmith). ! 176: ! 177: If anyone using this program finds two different inputs that produce the same ! 178: output, please contact Ralph C. Merkle via E-mail ([email protected]) or ! 179: via normal mail at: Xerox PARC 3333 Coyote Hill Road Palo Alto, CA 94304 ! 180: (415) 494-4000 ! 181: ! 182: ! 183: See the paper 'A Software One Way Hash Function', by Ralph C. Merkle, for a ! 184: more detailed explanation. ! 185: ! 186: The following test cases were taken directly from a terminal, and can be used ! 187: to verify the correct functioning of an implementation of Snefru. The ! 188: first input is simply a carriage return. The second input is '1', the ! 189: third input is '12', etc. The test sequence is repeated with security ! 190: parameter "4" and with the output size set to "256". ! 191: ! 192: % hash ! 193: ! 194: 13af7619 ab98d4b5 f5e0a9e6 b26b5452 ! 195: % hash ! 196: 1 ! 197: 578c83f8 8fe1f6a8 c119d2ba 3a9256c2 ! 198: % hash ! 199: 12 ! 200: 255468d4 b4bd985b 696a7313 6027fc80 ! 201: % hash ! 202: 123 ! 203: f5339a52 9c4dafc5 34fe3f0d 7a66baf7 ! 204: % hash ! 205: 1234 ! 206: 2645ff86 9a6c0ec6 5c49c20d d9050165 ! 207: % hash ! 208: 12345 ! 209: 387d2929 8ed52ece 88e64f38 fe4fdb11 ! 210: % hash ! 211: 123456 ! 212: f29f8915 d23a0e02 838cc2e2 75f5dfe7 ! 213: % hash ! 214: 1234567 ! 215: 4fb0f76e 9af16a2d 61844b9c e833e18f ! 216: % hash ! 217: 12345678 ! 218: aacc56fc 85910fef e81fc697 6b061f4e ! 219: % hash ! 220: 123456789 ! 221: e6997849 44ed68a1 c762ea1e 90c77967 ! 222: ! 223: ! 224: % hash 4 256 ! 225: ! 226: 6c504351 ce7f4b7a 93adb29a f9781ff9 2150f157 fee18661 eef511a3 fc83ddf ! 227: % hash 4 256 ! 228: 1 ! 229: 65d657f8 85ad8b4a b35999cc 3ded8b82 7cf71fa4 25424750 35778910 d6c2e320 ! 230: % hash 4 256 ! 231: 12 ! 232: 7636f3d1 af139cf9 58f46f99 66221282 a444732a 7de59da5 d3481c6b bd6e7092 ! 233: % hash 4 256 ! 234: 123 ! 235: cd3c7163 5b14c7c2 c24be864 4baab592 b8ab5b99 91ee5ee5 b3cf7a7f c6426ad7 ! 236: % hash 4 256 ! 237: 1234 ! 238: 9ba783a1 290cb21e fe196a02 3286ece5 49394c75 1ddd607e 5d67c4dc 549c62eb ! 239: % hash 4 256 ! 240: 12345 ! 241: c9680da8 ef00d2f8 4459a8e9 b50ada71 c63cae6f dcb6f774 f6998783 30a4a1f4 ! 242: % hash 4 256 ! 243: 123456 ! 244: 7656d389 f980bbe8 94152abe c6dc5f16 faf21c60 3b8f5098 861acf3c c059467b ! 245: % hash 4 256 ! 246: 1234567 ! 247: d96eb599 8377bb1d 74a02a2f ac9a85 3175250e 4796af36 36609747 372bba80 ! 248: % hash 4 256 ! 249: 12345678 ! 250: b7818f09 2118e98a 140af09a 6cca4e6f 1eba88e7 52c20174 653637c9 d628f33f ! 251: % hash 4 256 ! 252: 123456789 ! 253: c2242249 1187baaa 94725400 8dffd5b 38f01557 9f3f2390 50969991 fdc1a810 ! 254: % ! 255: ! 256: ! 257: ! 258: Note that 'unsigned long int' MUST be 32 bits ! 259: ! 260: Implementor: Ralph C. Merkle ! 261: ! 262: */ ! 263: ! 264: ! 265: ! 266: ! 267: #define inputFile 0 /* normally set up for standard in */ ! 268: #define errorFile 2 /* normally set up for standard error */ ! 269: ! 270: /* WARNING: Changing the following parameter may affect security in ! 271: non-obvious ways */ ! 272: #define inputBlockSize 16 /* size in 32-bit words of an input block to ! 273: the hash routine */ ! 274: #define maxOutputBlockSize 8 /* size in 32-bit words of largest output ! 275: block from the hash routine */ ! 276: ! 277: ! 278: ! 279: #define bufferSize 3072 /* MUST be 3 * 2**n, n > 5 */ ! 280: #define bufferSizeInWords 768 /* MUST be bufferSize/4 */ ! 281: #define maxSBoxCount 8 ! 282: #define maxSBoxCountDiv2 4 /* has to equal maxSBoxCount/2, of course */ ! 283: #define maxWordCount 16 /* maximum valid value for wordCount */ ! 284: ! 285: /* Note that the following variable should be set either to 4 or to 8. */ ! 286: int outputBlockSize = 4; /* default to normal 4 32-bit word or 128 bit ! 287: output size */ ! 288: ! 289: /* default to normal 48-byte chunk size. Must be ! 290: inputBlockSize-outputBlockSize */ ! 291: int chunkSize = 12; ! 292: ! 293: /* initialize the default value for the security parameter */ ! 294: int securityLevel = 2; ! 295: ! 296: int shiftTable[4] = {16, 8, 16, 24}; ! 297: ! 298: typedef unsigned long int sBox[256]; ! 299: ! 300: ! 301: /* The standard S boxes must be defined in another file */ ! 302: extern sBox standardSBoxes[maxSBoxCount]; ! 303: ! 304: ! 305: /* an array needed only for the fast version of HashN -- Hash512. It's safe ! 306: to ignore this array if you don't need to understand the speeded up ! 307: version. Note that the 32-bit word specified by ! 308: 'rotatedRightStandardSBoxes[i][j][k]' is rotated right by i*8 bits */ ! 309: sBox rotatedRightStandardSBoxes[4][maxSBoxCount]; ! 310: ! 311: ! 312: ! 313: /* The following routine is a simple error exit routine -- it prints a ! 314: message and aborts */ ! 315: void errAbort (s) ! 316: char *s; ! 317: { ! 318: int length; ! 319: ! 320: for (length = 0; s[length] != 0; length++); ! 321: if (write (errorFile, s, length) != length) ! 322: exit (2); ! 323: if (write (errorFile, "\n", 1) != 1) ! 324: exit (2); ! 325: exit (1); ! 326: }; ! 327: ! 328: ! 329: /* The following routine converts a byte array to an array of unsigned long ! 330: int. It is primarily intended to eliminate the byte-ordering problem. ! 331: VAXes order the bytes in a character array differently than SUN's do. Note ! 332: that this routine will SLOW DOWN THE HASH FUNCTION */ ! 333: void convertBytes (buffer, wordBuffer) ! 334: char buffer[bufferSize]; ! 335: unsigned long int wordBuffer[bufferSizeInWords]; ! 336: ! 337: { ! 338: int i; ! 339: unsigned long int t0, t1, t2, t3; ! 340: ! 341: /* buffer -- an input buffer of characters ! 342: ! 343: wordBuffer -- an output buffer of unsigned long int's ! 344: ! 345: */ ! 346: ! 347: for (i = 0; i < bufferSizeInWords; i++) { ! 348: ! 349: t0 = buffer[4 * i]; ! 350: t1 = buffer[4 * i + 1]; ! 351: t2 = buffer[4 * i + 2]; ! 352: t3 = buffer[4 * i + 3]; ! 353: t0 &= 0xff; ! 354: t1 &= 0xff; ! 355: t2 &= 0xff; ! 356: t3 &= 0xff; ! 357: wordBuffer[i] = (t0 << 24) | (t1 << 16) | (t2 << 8) | t3; ! 358: ! 359: }; ! 360: ! 361: }; ! 362: ! 363: ! 364: ! 365: void HashN (output, wordCount, input, localSecurityLevel) ! 366: unsigned long int output[maxOutputBlockSize]; ! 367: int wordCount; ! 368: unsigned long int input[]; ! 369: int localSecurityLevel; ! 370: ! 371: { ! 372: ! 373: /* Note that we are computing localSecurityLevel * wordCount * 4 ! 374: rounds. */ ! 375: ! 376: unsigned long int mask; ! 377: unsigned long int block[maxWordCount]; /* holds the array of data ! 378: being hashed */ ! 379: unsigned long int SBoxEntry; /* just a temporary */ ! 380: int shift; ! 381: int i; ! 382: int index; ! 383: int next, last; ! 384: int byteInWord; ! 385: ! 386: ! 387: mask = wordCount - 1; /* presumes wordCount is a power of 2 */ ! 388: ! 389: ! 390: /* Test for various error conditions and logic problems */ ! 391: ! 392: if (localSecurityLevel * 2 > maxSBoxCount) ! 393: errAbort ("Too few S-boxes"); ! 394: if (wordCount > maxWordCount) ! 395: errAbort ("Logic error, wordCount > maxWordCount"); ! 396: if (wordCount != 16) ! 397: errAbort ("Security warning, input size not equal to 512 bits"); ! 398: /* note that this routine will fail spectacularly on 8 byte blocks, ! 399: hence the following ban. */ ! 400: if (wordCount < 4) ! 401: errAbort (" wordCount too small"); ! 402: if ((wordCount & mask) != 0) ! 403: errAbort ("logic error, wordCount not a power of 2"); ! 404: if (outputBlockSize > wordCount) ! 405: errAbort ("logic error, outputBlockSize is too big"); ! 406: if ((outputBlockSize != 4) & (outputBlockSize != 8)) ! 407: errAbort ("Output size neither 128 nor 256 bits"); ! 408: ! 409: /* All the error condtions have now been checked -- everything should ! 410: work smoothly */ ! 411: ! 412: ! 413: /* initialize the block to be encrypted from the input */ ! 414: for (i = 0; i < wordCount; i++) ! 415: block[i] = input[i]; ! 416: ! 417: ! 418: ! 419: for (index = 0; index < localSecurityLevel; index++) { ! 420: ! 421: ! 422: for (byteInWord = 0; byteInWord < 4; byteInWord++) { ! 423: ! 424: ! 425: for (i = 0; i < wordCount; i++) { ! 426: next = (i + 1) & mask; ! 427: last = (i + mask) & mask; /* really last = (i-1) ! 428: MOD wordCount */ ! 429: ! 430: SBoxEntry = standardSBoxes[2 * index + ((i / 2) & 1)][block[i] & 0xff]; ! 431: block[next] ^= SBoxEntry; ! 432: block[last] ^= SBoxEntry; ! 433: }; ! 434: ! 435: ! 436: /* Rotate right all 32-bit words in the entire block ! 437: at once. */ ! 438: shift = shiftTable[byteInWord]; ! 439: for (i = 0; i < wordCount; i++) ! 440: block[i] = (block[i] >> shift) | (block[i] << (32 - shift)); ! 441: ! 442: ! 443: }; /* end of byteInWord going from 0 to 3 */ ! 444: ! 445: ! 446: }; /* end of index going from 0 to ! 447: localSecurityLevel-1 */ ! 448: ! 449: ! 450: ! 451: for (i = 0; i < outputBlockSize; i++) ! 452: output[i] = input[i] ^ block[mask - i]; ! 453: ! 454: ! 455: }; ! 456: ! 457: ! 458: ! 459: ! 460: void Hash512 (output, input, localSecurityLevel) ! 461: unsigned long int output[maxOutputBlockSize]; ! 462: unsigned long int input[]; ! 463: int localSecurityLevel; ! 464: ! 465: { ! 466: ! 467: /* This routine is a specialized version of HashN. It is optimized ! 468: for speed, and assumes that the input is always 16 words long ! 469: It hashes 512 bits, hence its name. */ ! 470: /* You need not try to figure out this routine unless you wish to ! 471: figure out a fast implementation of Snefru */ ! 472: ! 473: /* the following are two pointers to S-boxes */ ! 474: unsigned long int *SBox0; ! 475: unsigned long int *SBox1; ! 476: ! 477: ! 478: /* the array 'block' is divided into 16 distinct variables */ ! 479: unsigned long int block0, block1, block2, block3; ! 480: unsigned long int block4, block5, block6, block7; ! 481: unsigned long int block8, block9, block10, block11; ! 482: unsigned long int block12, block13, block14, block15; ! 483: ! 484: unsigned long int SBoxEntry; /* just a temporary */ ! 485: int index; ! 486: ! 487: if (inputBlockSize != 16) ! 488: errAbort ("Hash512 called with inputBlockSize != 16"); ! 489: if ((outputBlockSize != 4) & (outputBlockSize != 8)) ! 490: errAbort ("Hash512 called with outputBlockSize != 4 or 8"); ! 491: ! 492: /* initialize the block to be encrypted from the input */ ! 493: /* Note that in theory block<i> should be kept in register. Not all ! 494: compilers can do this, even when there are enough registers -- ! 495: this will degrade performance significantly. */ ! 496: block0 = input[0]; ! 497: block1 = input[1]; ! 498: block2 = input[2]; ! 499: block3 = input[3]; ! 500: block4 = input[4]; ! 501: block5 = input[5]; ! 502: block6 = input[6]; ! 503: block7 = input[7]; ! 504: block8 = input[8]; ! 505: block9 = input[9]; ! 506: block10 = input[10]; ! 507: block11 = input[11]; ! 508: block12 = input[12]; ! 509: block13 = input[13]; ! 510: block14 = input[14]; ! 511: block15 = input[15]; ! 512: ! 513: ! 514: ! 515: for (index = 0; index < 2 * localSecurityLevel; index += 2) { ! 516: ! 517: ! 518: /* set up the base address for the two S-box pointers. */ ! 519: SBox0 = rotatedRightStandardSBoxes[0][index]; ! 520: SBox1 = SBox0 + 256; ! 521: ! 522: ! 523: /* In the following unrolled code, the basic 'assembly ! 524: language' block that is repeated is: ! 525: ! 526: 1 temp1 = shift(block<i>, shiftConstant) ! 527: 2 temp2 = temp1 & 0x3fc ! 528: 3 temp3 = SBox<0 or 1> + temp2 ! 529: 4 temp4 = *temp3 ! 530: 5 block<i-1> ^= temp4 ! 531: 6 block<i+1> ^= temp4 ! 532: ! 533: In step 1, we simply shift the ith 32-bit block to bring the ! 534: 8-bit byte into the right position. Note that we will ! 535: also build-in a left-shift by 2 bits at this stage, to ! 536: eliminate the left shift required later because we are ! 537: indexing into an array of 4-byte table entries. ! 538: ! 539: In step 2, we mask off the desired 8 bits. Note that 0x3fc ! 540: is simply 0xff << 2. ! 541: ! 542: In step 3, we use a normal integer add to compute the actual ! 543: address of the S-box entry. Note that one of two pointers ! 544: is used, as appropriate. Temp3 then holds the actual byte ! 545: address of the desired S-box entry. ! 546: ! 547: In step 4, we load the 4-byte S-box entry. ! 548: ! 549: In steps 5 and 6, we XOR the loaded S-box entry with both the ! 550: previous and the next 32-bit entries in the 'block' array. ! 551: ! 552: Typical optimizing comilers might fail to put all the ! 553: block<i> variables into registers. This can result in ! 554: significant performance degradation. Also, most compilers ! 555: will use a separate left-shift-by-2 after masking off the ! 556: needed 8 bits, but the performance degradation caused by ! 557: this oversight should be modest. ! 558: ! 559: */ ! 560: ! 561: SBoxEntry = SBox0[block0 & 0xff]; ! 562: block1 ^= SBoxEntry; ! 563: block15 ^= SBoxEntry; ! 564: SBoxEntry = SBox0[block1 & 0xff]; ! 565: block2 ^= SBoxEntry; ! 566: block0 ^= SBoxEntry; ! 567: SBoxEntry = SBox1[block2 & 0xff]; ! 568: block3 ^= SBoxEntry; ! 569: block1 ^= SBoxEntry; ! 570: SBoxEntry = SBox1[block3 & 0xff]; ! 571: block4 ^= SBoxEntry; ! 572: block2 ^= SBoxEntry; ! 573: SBoxEntry = SBox0[block4 & 0xff]; ! 574: block5 ^= SBoxEntry; ! 575: block3 ^= SBoxEntry; ! 576: SBoxEntry = SBox0[block5 & 0xff]; ! 577: block6 ^= SBoxEntry; ! 578: block4 ^= SBoxEntry; ! 579: SBoxEntry = SBox1[block6 & 0xff]; ! 580: block7 ^= SBoxEntry; ! 581: block5 ^= SBoxEntry; ! 582: SBoxEntry = SBox1[block7 & 0xff]; ! 583: block8 ^= SBoxEntry; ! 584: block6 ^= SBoxEntry; ! 585: SBoxEntry = SBox0[block8 & 0xff]; ! 586: block9 ^= SBoxEntry; ! 587: block7 ^= SBoxEntry; ! 588: SBoxEntry = SBox0[block9 & 0xff]; ! 589: block10 ^= SBoxEntry; ! 590: block8 ^= SBoxEntry; ! 591: SBoxEntry = SBox1[block10 & 0xff]; ! 592: block11 ^= SBoxEntry; ! 593: block9 ^= SBoxEntry; ! 594: SBoxEntry = SBox1[block11 & 0xff]; ! 595: block12 ^= SBoxEntry; ! 596: block10 ^= SBoxEntry; ! 597: SBoxEntry = SBox0[block12 & 0xff]; ! 598: block13 ^= SBoxEntry; ! 599: block11 ^= SBoxEntry; ! 600: SBoxEntry = SBox0[block13 & 0xff]; ! 601: block14 ^= SBoxEntry; ! 602: block12 ^= SBoxEntry; ! 603: SBoxEntry = SBox1[block14 & 0xff]; ! 604: block15 ^= SBoxEntry; ! 605: block13 ^= SBoxEntry; ! 606: SBoxEntry = SBox1[block15 & 0xff]; ! 607: block0 ^= SBoxEntry; ! 608: block14 ^= SBoxEntry; ! 609: ! 610: /* SBox0 = rotatedRightStandardSBoxes[2][index]; */ ! 611: SBox0 += 2 * maxSBoxCount * 256; ! 612: SBox1 = SBox0 + 256; ! 613: ! 614: SBoxEntry = SBox0[(block0 >> 16) & 0xff]; ! 615: block1 ^= SBoxEntry; ! 616: block15 ^= SBoxEntry; ! 617: SBoxEntry = SBox0[(block1 >> 16) & 0xff]; ! 618: block2 ^= SBoxEntry; ! 619: block0 ^= SBoxEntry; ! 620: SBoxEntry = SBox1[(block2 >> 16) & 0xff]; ! 621: block3 ^= SBoxEntry; ! 622: block1 ^= SBoxEntry; ! 623: SBoxEntry = SBox1[(block3 >> 16) & 0xff]; ! 624: block4 ^= SBoxEntry; ! 625: block2 ^= SBoxEntry; ! 626: SBoxEntry = SBox0[(block4 >> 16) & 0xff]; ! 627: block5 ^= SBoxEntry; ! 628: block3 ^= SBoxEntry; ! 629: SBoxEntry = SBox0[(block5 >> 16) & 0xff]; ! 630: block6 ^= SBoxEntry; ! 631: block4 ^= SBoxEntry; ! 632: SBoxEntry = SBox1[(block6 >> 16) & 0xff]; ! 633: block7 ^= SBoxEntry; ! 634: block5 ^= SBoxEntry; ! 635: SBoxEntry = SBox1[(block7 >> 16) & 0xff]; ! 636: block8 ^= SBoxEntry; ! 637: block6 ^= SBoxEntry; ! 638: SBoxEntry = SBox0[(block8 >> 16) & 0xff]; ! 639: block9 ^= SBoxEntry; ! 640: block7 ^= SBoxEntry; ! 641: SBoxEntry = SBox0[(block9 >> 16) & 0xff]; ! 642: block10 ^= SBoxEntry; ! 643: block8 ^= SBoxEntry; ! 644: SBoxEntry = SBox1[(block10 >> 16) & 0xff]; ! 645: block11 ^= SBoxEntry; ! 646: block9 ^= SBoxEntry; ! 647: SBoxEntry = SBox1[(block11 >> 16) & 0xff]; ! 648: block12 ^= SBoxEntry; ! 649: block10 ^= SBoxEntry; ! 650: SBoxEntry = SBox0[(block12 >> 16) & 0xff]; ! 651: block13 ^= SBoxEntry; ! 652: block11 ^= SBoxEntry; ! 653: SBoxEntry = SBox0[(block13 >> 16) & 0xff]; ! 654: block14 ^= SBoxEntry; ! 655: block12 ^= SBoxEntry; ! 656: SBoxEntry = SBox1[(block14 >> 16) & 0xff]; ! 657: block15 ^= SBoxEntry; ! 658: block13 ^= SBoxEntry; ! 659: SBoxEntry = SBox1[(block15 >> 16) & 0xff]; ! 660: block0 ^= SBoxEntry; ! 661: block14 ^= SBoxEntry; ! 662: ! 663: ! 664: /* SBox0 = rotatedRightStandardSBoxes[1][index]; */ ! 665: SBox0 -= maxSBoxCount * 256; ! 666: SBox1 = SBox0 + 256; ! 667: ! 668: SBoxEntry = SBox0[block0 >> 24]; ! 669: block1 ^= SBoxEntry; ! 670: block15 ^= SBoxEntry; ! 671: SBoxEntry = SBox0[block1 >> 24]; ! 672: block2 ^= SBoxEntry; ! 673: block0 ^= SBoxEntry; ! 674: SBoxEntry = SBox1[block2 >> 24]; ! 675: block3 ^= SBoxEntry; ! 676: block1 ^= SBoxEntry; ! 677: SBoxEntry = SBox1[block3 >> 24]; ! 678: block4 ^= SBoxEntry; ! 679: block2 ^= SBoxEntry; ! 680: SBoxEntry = SBox0[block4 >> 24]; ! 681: block5 ^= SBoxEntry; ! 682: block3 ^= SBoxEntry; ! 683: SBoxEntry = SBox0[block5 >> 24]; ! 684: block6 ^= SBoxEntry; ! 685: block4 ^= SBoxEntry; ! 686: SBoxEntry = SBox1[block6 >> 24]; ! 687: block7 ^= SBoxEntry; ! 688: block5 ^= SBoxEntry; ! 689: SBoxEntry = SBox1[block7 >> 24]; ! 690: block8 ^= SBoxEntry; ! 691: block6 ^= SBoxEntry; ! 692: SBoxEntry = SBox0[block8 >> 24]; ! 693: block9 ^= SBoxEntry; ! 694: block7 ^= SBoxEntry; ! 695: SBoxEntry = SBox0[block9 >> 24]; ! 696: block10 ^= SBoxEntry; ! 697: block8 ^= SBoxEntry; ! 698: SBoxEntry = SBox1[block10 >> 24]; ! 699: block11 ^= SBoxEntry; ! 700: block9 ^= SBoxEntry; ! 701: SBoxEntry = SBox1[block11 >> 24]; ! 702: block12 ^= SBoxEntry; ! 703: block10 ^= SBoxEntry; ! 704: SBoxEntry = SBox0[block12 >> 24]; ! 705: block13 ^= SBoxEntry; ! 706: block11 ^= SBoxEntry; ! 707: SBoxEntry = SBox0[block13 >> 24]; ! 708: block14 ^= SBoxEntry; ! 709: block12 ^= SBoxEntry; ! 710: SBoxEntry = SBox1[block14 >> 24]; ! 711: block15 ^= SBoxEntry; ! 712: block13 ^= SBoxEntry; ! 713: SBoxEntry = SBox1[block15 >> 24]; ! 714: block0 ^= SBoxEntry; ! 715: block14 ^= SBoxEntry; ! 716: ! 717: ! 718: /* SBox0 = rotatedRightStandardSBoxes[3][index]; */ ! 719: SBox0 += 2 * maxSBoxCount * 256; ! 720: SBox1 = SBox0 + 256; ! 721: ! 722: SBoxEntry = SBox0[(block0 >> 8) & 0xff]; ! 723: block1 ^= SBoxEntry; ! 724: block15 ^= SBoxEntry; ! 725: SBoxEntry = SBox0[(block1 >> 8) & 0xff]; ! 726: block2 ^= SBoxEntry; ! 727: block0 ^= SBoxEntry; ! 728: SBoxEntry = SBox1[(block2 >> 8) & 0xff]; ! 729: block3 ^= SBoxEntry; ! 730: block1 ^= SBoxEntry; ! 731: SBoxEntry = SBox1[(block3 >> 8) & 0xff]; ! 732: block4 ^= SBoxEntry; ! 733: block2 ^= SBoxEntry; ! 734: SBoxEntry = SBox0[(block4 >> 8) & 0xff]; ! 735: block5 ^= SBoxEntry; ! 736: block3 ^= SBoxEntry; ! 737: SBoxEntry = SBox0[(block5 >> 8) & 0xff]; ! 738: block6 ^= SBoxEntry; ! 739: block4 ^= SBoxEntry; ! 740: SBoxEntry = SBox1[(block6 >> 8) & 0xff]; ! 741: block7 ^= SBoxEntry; ! 742: block5 ^= SBoxEntry; ! 743: SBoxEntry = SBox1[(block7 >> 8) & 0xff]; ! 744: block8 ^= SBoxEntry; ! 745: block6 ^= SBoxEntry; ! 746: SBoxEntry = SBox0[(block8 >> 8) & 0xff]; ! 747: block9 ^= SBoxEntry; ! 748: block7 ^= SBoxEntry; ! 749: SBoxEntry = SBox0[(block9 >> 8) & 0xff]; ! 750: block10 ^= SBoxEntry; ! 751: block8 ^= SBoxEntry; ! 752: SBoxEntry = SBox1[(block10 >> 8) & 0xff]; ! 753: block11 ^= SBoxEntry; ! 754: block9 ^= SBoxEntry; ! 755: SBoxEntry = SBox1[(block11 >> 8) & 0xff]; ! 756: block12 ^= SBoxEntry; ! 757: block10 ^= SBoxEntry; ! 758: SBoxEntry = SBox0[(block12 >> 8) & 0xff]; ! 759: block13 ^= SBoxEntry; ! 760: block11 ^= SBoxEntry; ! 761: SBoxEntry = SBox0[(block13 >> 8) & 0xff]; ! 762: block14 ^= SBoxEntry; ! 763: block12 ^= SBoxEntry; ! 764: SBoxEntry = SBox1[(block14 >> 8) & 0xff]; ! 765: block15 ^= SBoxEntry; ! 766: block13 ^= SBoxEntry; ! 767: SBoxEntry = SBox1[(block15 >> 8) & 0xff]; ! 768: block0 ^= SBoxEntry; ! 769: block14 ^= SBoxEntry; ! 770: ! 771: ! 772: ! 773: }; /* end of index going from 0 to ! 774: 2*localSecurityLevel-2 in steps of 2 */ ! 775: ! 776: ! 777: output[0] = input[0] ^ block15; ! 778: output[1] = input[1] ^ block14; ! 779: output[2] = input[2] ^ block13; ! 780: output[3] = input[3] ^ block12; ! 781: ! 782: /* generate an extra 128 bits if the output is 256 bits */ ! 783: if (outputBlockSize == 8) { ! 784: output[4] = input[4] ^ block11; ! 785: output[5] = input[5] ^ block10; ! 786: output[6] = input[6] ^ block9; ! 787: output[7] = input[7] ^ block8; ! 788: }; ! 789: ! 790: ! 791: }; ! 792: ! 793: ! 794: /* Hash512twice does exactly that. It hashes 512 bits using both Hash512 and ! 795: HashN. The output of the two implementations is then compared, and if ! 796: they differ an error message is issued. This insures that two different ! 797: quite different C routines compute the same value, and is quite ! 798: helpful in catching bugs, implementation errors, etc. ! 799: ! 800: It should be particularly helpful to the implementor trying to "tune" the ! 801: hash function for speed, as it provides a constant check on correctness. ! 802: ! 803: */ ! 804: ! 805: void Hash512twice (output, input, localSecurityLevel) ! 806: unsigned long int output[maxOutputBlockSize]; ! 807: unsigned long int input[]; ! 808: int localSecurityLevel; ! 809: ! 810: { ! 811: unsigned long int out1[maxOutputBlockSize]; ! 812: unsigned long int out2[maxOutputBlockSize]; ! 813: int i; ! 814: ! 815: HashN (out1, inputBlockSize, input, localSecurityLevel); ! 816: Hash512 (out2, input, localSecurityLevel); ! 817: for (i = 0; i < outputBlockSize; i++) ! 818: if (out1[i] != out2[i]) ! 819: errAbort (" Hash512 and HashN differ"); ! 820: for (i = 0; i < outputBlockSize; i++) ! 821: output[i] = out1[i]; ! 822: }; ! 823: ! 824: ! 825: ! 826: /* The main program reads the input, hashes it, and prints the result. Much ! 827: of the logic in the main program is taken up with the trivia of buffer ! 828: management, error checking, command-line parameter checking, self-tests, ! 829: and the like. The actual use of the hash function occupies a modest ! 830: portion of the overall program. ! 831: ! 832: The basic idea is simple. As an example, if H is the hash function that ! 833: produces either 128-bit (or 256-bit) outputs, and if we pick an input ! 834: string that is 3 "chunks" long then we are computing: ! 835: ! 836: output = H( H( H( H( ! 837: 0 || chunk[0]) || chunk[1]) || chunk[2]) || bit-length) ! 838: ! 839: "bit-length" is a "chunk" sized field into which has been put the length of ! 840: the input, in bits, right justified. Note that the size of a "chunk" is ! 841: just the input size minus the output size. ! 842: ! 843: "0" is a vector of 0 bits of the same size (in bits) as the output of H ! 844: (i.e., either 128 or 256 bits). ! 845: ! 846: "||" is the concatenation operator, and is used to concatenate the output ! 847: field of the preceding computation of H with the next "chunk" of bits from ! 848: the input. ! 849: ! 850: "chunk" is an array which holds the input string. The final element of the ! 851: array is left justified and zero-filled on the right. ! 852: ! 853: */ ! 854: ! 855: void main (argc, argv) ! 856: int argc; ! 857: char *argv[]; ! 858: ! 859: { ! 860: ! 861: int i; ! 862: char buffer[bufferSize]; ! 863: int hitEOF = 0; /* 0 means we haven't hit EOF, 1 means we ! 864: have */ ! 865: unsigned long int wordBuffer[bufferSizeInWords]; ! 866: unsigned long int hash[maxOutputBlockSize]; ! 867: unsigned long int hashArray[inputBlockSize]; ! 868: unsigned long int bitCount[2]; /* the 64-bit count of the number of ! 869: bits in the input */ ! 870: int byteCount; /* the count of the number of bytes we have ! 871: in the buffer */ ! 872: int dataLoc; /* the location of the next block of data we ! 873: wish to hash down. Note this is the index ! 874: into an array of 32-bit elements, not ! 875: bytes */ ! 876: ! 877: ! 878: ! 879: /* self-test, to make sure everything is okay. */ ! 880: /* First, test the standard S boxes to make sure they haven't been ! 881: damaged. */ ! 882: /* Test to make sure each column is a permutation. */ ! 883: for (i = 0; i < maxSBoxCount; i++) { ! 884: char testArray[256]; ! 885: int testShift = 0; ! 886: int j; ! 887: ! 888: for (testShift = 0; testShift < 32; testShift += 8) { ! 889: for (j = 0; j < 256; j++) ! 890: testArray[j] = 0; ! 891: for (j = 0; j < 256; j++) ! 892: testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++; ! 893: for (j = 0; j < 256; j++) ! 894: if (testArray[j] != 1) ! 895: errAbort ("Table error -- the standard S box is corrupted"); ! 896: }; ! 897: }; ! 898: /* Okay, the standard S-box hasn't been damaged */ ! 899: ! 900: ! 901: ! 902: /* Set up the rotated array for the fast hash routine */ ! 903: { ! 904: int index; /* ranges over the S box indices */ ! 905: int rotation; /* ranges over the four possible ! 906: byte-rotations */ ! 907: int i; /* ranges over the 256 possible S-box entries */ ! 908: ! 909: for (index = 0; index < maxSBoxCount; index++) ! 910: for (rotation = 0; rotation < 4; rotation++) ! 911: for (i = 0; i < 256; i++) ! 912: rotatedRightStandardSBoxes[rotation][index][i] = ! 913: (standardSBoxes[index][i] >> (rotation * 8)) | ! 914: (standardSBoxes[index][i] << (32 - rotation * 8)); ! 915: ! 916: ! 917: }; ! 918: ! 919: ! 920: ! 921: /* Now try hashing something. Note that we're testing both HashN and ! 922: Hash512 here */ ! 923: { ! 924: unsigned long int testInput[inputBlockSize]; ! 925: unsigned long int testOutput[maxOutputBlockSize]; ! 926: int j; ! 927: int k; ! 928: ! 929: /* Set output size to 256 bits -- just for this test routine */ ! 930: outputBlockSize = maxOutputBlockSize; ! 931: chunkSize = inputBlockSize - outputBlockSize; ! 932: ! 933: if (maxOutputBlockSize != 8) ! 934: errAbort ("The output block size has changed, update the self-test"); ! 935: if (inputBlockSize != 16) ! 936: errAbort ("The input block size has changed, update the self-test"); ! 937: if (maxSBoxCount != 8) ! 938: errAbort ("Wrong number of S boxes, update the self-test"); ! 939: ! 940: for (i = 0; i < inputBlockSize; i++) ! 941: testInput[i] = 0; /* zero the input */ ! 942: k = 0; /* zero the pointer into the input buffer */ ! 943: for (i = 0; i < 50; i++) { ! 944: Hash512twice (testOutput, testInput, 4); ! 945: /* Copy the output into a new slot in the input buffer */ ! 946: for (j = 0; j < maxOutputBlockSize; j++) ! 947: testInput[k+j] = testOutput[j]; ! 948: k += maxOutputBlockSize; ! 949: /* reset pointer into input buffer ! 950: if it might overflow next time */ ! 951: if ( (k+maxOutputBlockSize) > inputBlockSize) k=0; ! 952: }; ! 953: if ((testOutput[0] != 1967985403) || (testOutput[1] != 2688653266) || ! 954: (testOutput[2] != 3911883902) || (testOutput[3] != 1117323144) || ! 955: (testOutput[4] != 4238876879) || (testOutput[5] != 877649382) || ! 956: (testOutput[6] != 1112396746) || (testOutput[7] != 324992866) ! 957: ) ! 958: errAbort ("Test hash of 64 bytes of 0 failed"); ! 959: }; ! 960: /* Okay, we can hash at least 50 64-byte values correctly. */ ! 961: ! 962: ! 963: ! 964: outputBlockSize = 4; /* default is 4 32-bit words, or 128 bits */ ! 965: chunkSize = inputBlockSize - outputBlockSize; ! 966: ! 967: /* Check command line arguments */ ! 968: if (argc == 3) { ! 969: /* Two arguments -- generate the Large Economy Size Output of ! 970: 256 bits */ ! 971: outputBlockSize = 8; /* 8 32-bit words */ ! 972: chunkSize = inputBlockSize - outputBlockSize; ! 973: if ((argv[2][0] != '2') | ! 974: (argv[2][1] != '5') | ! 975: (argv[2][2] != '6')) ! 976: errAbort ("usage: hash <security level> [256]"); ! 977: argc--; ! 978: }; ! 979: ! 980: if ((bufferSizeInWords % chunkSize) != 0) ! 981: errAbort ("Buffer size is fouled up"); ! 982: ! 983: if (argc > 2) ! 984: errAbort ("usage: hash [ <security level> [ <output size> ] ]"); ! 985: else if (argc == 2) { ! 986: securityLevel = 0; ! 987: if (argv[1][0] == '2') ! 988: securityLevel = 2; ! 989: else if (argv[1][0] == '3') ! 990: securityLevel = 3; ! 991: else if (argv[1][0] == '4') ! 992: securityLevel = 4; ! 993: ! 994: if ((argv[1][1] != 0) || (securityLevel == 0)) ! 995: errAbort ("The security level can only be 2, 3, or 4 (4 is most secure)."); ! 996: }; ! 997: ! 998: ! 999: /* Apply the one-way hash function to the standard input */ ! 1000: ! 1001: ! 1002: bitCount[0] = 0; ! 1003: bitCount[1] = 0; ! 1004: byteCount = read (inputFile, buffer, bufferSize); ! 1005: if (byteCount < 0) ! 1006: errAbort ("Error on first read from standard input"); ! 1007: if (byteCount != bufferSize) ! 1008: hitEOF = 1; /* set EOF flag true if didn't fill buffer */ ! 1009: ! 1010: ! 1011: bitCount[1] += byteCount * 8; /* increment the total number of bits ! 1012: read */ ! 1013: /* bump the upper 32 bits when the lower 32-bits wraps around */ ! 1014: if (bitCount[1] < (byteCount * 8)) ! 1015: bitCount[0] += 1; ! 1016: ! 1017: /* zero out rest of buffer */ ! 1018: for (i = byteCount; i < bufferSize; i++) ! 1019: buffer[i] = 0; ! 1020: ! 1021: /* following conversion required for machines with byte-ordering ! 1022: unlike the SUN */ ! 1023: convertBytes (buffer, wordBuffer); ! 1024: dataLoc = 0; /* 4-byte-word location in data input buffer */ ! 1025: ! 1026: ! 1027: ! 1028: /* Now we hash it down with multiple applications of Hash512 */ ! 1029: ! 1030: for (i = 0; i < inputBlockSize; i++) ! 1031: hashArray[i] = 0; /* initialize hashArray */ ! 1032: ! 1033: /* Hash each chunk in the input (either 48 byte chunks or 32 byte ! 1034: chunks) -- and keep the result in hashArray. Note that the first ! 1035: 16 (32) bytes of hashArray holds the output of the previous hash ! 1036: computation. */ ! 1037: ! 1038: while (byteCount > 0) { ! 1039: if (dataLoc + chunkSize > bufferSize) ! 1040: errAbort ("logic error, buffer over run"); ! 1041: ! 1042: /* Get the next chunk */ ! 1043: for (i = 0; i < chunkSize; i++) ! 1044: hashArray[outputBlockSize + i] = wordBuffer[dataLoc + i]; ! 1045: /* and hash it in */ ! 1046: Hash512 (hashArray, hashArray, securityLevel); ! 1047: ! 1048: /* increment index to next 48-byte input chunk */ ! 1049: dataLoc += chunkSize; ! 1050: ! 1051: ! 1052: /* decrement the number of bytes left to process */ ! 1053: /* Yes, if byteCount was less than chunkSize this might make ! 1054: byteCount negative. It's ok, it's caught in the following ! 1055: "if" statement */ ! 1056: byteCount -= chunkSize * 4; ! 1057: ! 1058: /* Out of data -- read some more */ ! 1059: if (byteCount <= 0) { ! 1060: if (hitEOF == 1) ! 1061: byteCount = 0; ! 1062: else { ! 1063: if (byteCount != 0) ! 1064: errAbort ("Logic error near EOF"); ! 1065: byteCount = read (inputFile, buffer, bufferSize); ! 1066: if (byteCount < 0) ! 1067: errAbort ("Error while reading from input"); ! 1068: if (byteCount != bufferSize) ! 1069: hitEOF = 1; ! 1070: }; ! 1071: ! 1072: bitCount[1] += byteCount * 8; /* increment the ! 1073: bit-count */ ! 1074: /* bump the upper 32 bits when the lower 32-bits ! 1075: wraps around */ ! 1076: if (bitCount[1] < (byteCount * 8)) ! 1077: bitCount[0] += 1; ! 1078: ! 1079: /* zero out rest of buffer */ ! 1080: for (i = byteCount; i < bufferSize; i++) ! 1081: buffer[i] = 0; ! 1082: ! 1083: convertBytes (buffer, wordBuffer); ! 1084: dataLoc = 0; ! 1085: }; ! 1086: }; /* end of while */ ! 1087: ! 1088: ! 1089: /* Zero out the remainder of hashArray */ ! 1090: for (i = 0; i < chunkSize; i++) ! 1091: hashArray[outputBlockSize + i] = 0; ! 1092: ! 1093: /* Put the 64-bit bit-count into the final 64-bits of the block about ! 1094: to be hashed */ ! 1095: hashArray[inputBlockSize - 2] = bitCount[0]; /* upper 32 bits of ! 1096: count */ ! 1097: hashArray[inputBlockSize - 1] = bitCount[1]; /* lower 32 bits of ! 1098: count */ ! 1099: ! 1100: /* Final hash down. */ ! 1101: Hash512 (hash, hashArray, securityLevel); ! 1102: ! 1103: /* 'hash' now holds the hashed result, which is printed on standard ! 1104: output */ ! 1105: for (i = 0; i < outputBlockSize; i++) ! 1106: printf (" %x", hash[i]); ! 1107: printf ("\n"); ! 1108: exit (0); ! 1109: }; ! 1110: *-*-END-*-* ! 1111: sed 's/^ //' >hashComment <<\*-*-END-*-* ! 1112: Following are the hash totals computed for the files "hash2.0.c" ! 1113: and "standardSBoxes2.c". The user should be aware that any change ! 1114: in these files at all (e.g., addition of a blank at the end of any line, ! 1115: conversion of a tab into an equivalent number of spaces, etc) will ! 1116: result in a different value of the checksum. However, in ! 1117: a purely logical sense it does little good to verify the correctness ! 1118: of the contents of a file using as a test the checksum program ! 1119: which has just been copied from that very same file..... ! 1120: ! 1121: Despite this annoying circularity, I have included the checksum ! 1122: values. They at least serve as a guard against simple errors ! 1123: and clumsy efforts at subversion. ! 1124: ! 1125: Also, if the recipient should ever manage to receive a correct copy ! 1126: of the hash total program, then this correct version can be used ! 1127: to verify all further updates, changes, etc. ! 1128: ! 1129: hash2.0.c: a3878c2d c96c6f8e b4026ae2 9669f027 ! 1130: standardSBoxes2.c: 49b91919 1a896a dc976159 c6885587 ! 1131: *-*-END-*-* ! 1132: sed 's/^ //' >stdSBoxes2.c <<\*-*-END-*-* ! 1133: /* This is the standard S box used by the one-way hash function Snefru. ! 1134: See the paper 'A Software One Way Hash Function', by Ralph C. Merkle, ! 1135: for a more detailed explanation. ! 1136: ! 1137: Version 2.0 ! 1138: ! 1139: NOTE: This set of tables is different from Version 1.0. ! 1140: Version 2.0 is recomended, Version 1.0 should not be used. ! 1141: ! 1142: August 1, 1989 ! 1143: ! 1144: Copyright (c) Xerox Corporation 1989 ! 1145: All rights reserved. ! 1146: ! 1147: License to copy and use this software is granted provided that it is identified ! 1148: as the 'Tables For the Xerox Secure Hash Function' in all material mentioning ! 1149: or referencing this software. ! 1150: ! 1151: License is also granted to make and use derivative works provided that such ! 1152: works are identified as 'derived from the Tables For the Xerox Secure Hash ! 1153: Function' in all material mentioning or referencing the derived work. ! 1154: ! 1155: Xerox Corporation makes no representations concerning either the ! 1156: merchantability of this software or the suitability of this software for any ! 1157: particular purpose. It is provided "as is" without express or implied ! 1158: warranty of any kind. ! 1159: ! 1160: ! 1161: These notices must be retained in any copies of any part of this software. ! 1162: ! 1163: ! 1164: ! 1165: Implementor: Ralph C. Merkle ! 1166: ! 1167: */ ! 1168: ! 1169: #define maxSBoxCount 8 ! 1170: ! 1171: ! 1172: ! 1173: long int standardSBoxes[maxSBoxCount][256] = { ! 1174: ! 1175: { /* Start of S Box 0 */ ! 1176: 0x64F9001B, /* 0 */ ! 1177: 0xFEDDCDF6, /* 1 */ ! 1178: 0x7C8FF1E2, /* 2 */ ! 1179: 0x11D71514, /* 3 */ ! 1180: 0x8B8C18D3, /* 4 */ ! 1181: 0xDDDF881E, /* 5 */ ! 1182: 0x6EAB5056, /* 6 */ ! 1183: 0x88CED8E1, /* 7 */ ! 1184: 0x49148959, /* 8 */ ! 1185: 0x69C56FD5, /* 9 */ ! 1186: 0xB7994F03, /* 10 */ ! 1187: 0xFBCEE3E, /* 11 */ ! 1188: 0x3C264940, /* 12 */ ! 1189: 0x21557E58, /* 13 */ ! 1190: 0xE14B3FC2, /* 14 */ ! 1191: 0x2E5CF591, /* 15 */ ! 1192: 0xDCEFF8CE, /* 16 */ ! 1193: 0x92A1648, /* 17 */ ! 1194: 0xBE812936, /* 18 */ ! 1195: 0xFF7B0C6A, /* 19 */ ! 1196: 0xD5251037, /* 20 */ ! 1197: 0xAFA448F1, /* 21 */ ! 1198: 0x7DAFC95A, /* 22 */ ! 1199: 0x1EA69C3F, /* 23 */ ! 1200: 0xA417ABE7, /* 24 */ ! 1201: 0x5890E423, /* 25 */ ! 1202: 0xB0CB70C0, /* 26 */ ! 1203: 0xC85025F7, /* 27 */ ! 1204: 0x244D97E3, /* 28 */ ! 1205: 0x1FF3595F, /* 29 */ ! 1206: 0xC4EC6396, /* 30 */ ! 1207: 0x59181E17, /* 31 */ ! 1208: 0xE635B477, /* 32 */ ! 1209: 0x354E7DBF, /* 33 */ ! 1210: 0x796F7753, /* 34 */ ! 1211: 0x66EB52CC, /* 35 */ ! 1212: 0x77C3F995, /* 36 */ ! 1213: 0x32E3A927, /* 37 */ ! 1214: 0x80CCAED6, /* 38 */ ! 1215: 0x4E2BE89D, /* 39 */ ! 1216: 0x375BBD28, /* 40 */ ! 1217: 0xAD1A3D05, /* 41 */ ! 1218: 0x2B1B42B3, /* 42 */ ! 1219: 0x16C44C71, /* 43 */ ! 1220: 0x4D54BFA8, /* 44 */ ! 1221: 0xE57DDC7A, /* 45 */ ! 1222: 0xEC6D8144, /* 46 */ ! 1223: 0x5A71046B, /* 47 */ ! 1224: 0xD8229650, /* 48 */ ! 1225: 0x87FC8F24, /* 49 */ ! 1226: 0xCBC60E09, /* 50 */ ! 1227: 0xB6390366, /* 51 */ ! 1228: 0xD9F76092, /* 52 */ ! 1229: 0xD393A70B, /* 53 */ ! 1230: 0x1D31A08A, /* 54 */ ! 1231: 0x9CD971C9, /* 55 */ ! 1232: 0x5C1EF445, /* 56 */ ! 1233: 0x86FAB694, /* 57 */ ! 1234: 0xFDB44165, /* 58 */ ! 1235: 0x8EAAFCBE, /* 59 */ ! 1236: 0x4BCAC6EB, /* 60 */ ! 1237: 0xFB7A94E5, /* 61 */ ! 1238: 0x5789D04E, /* 62 */ ! 1239: 0xFA13CF35, /* 63 */ ! 1240: 0x236B8DA9, /* 64 */ ! 1241: 0x4133F000, /* 65 */ ! 1242: 0x6224261C, /* 66 */ ! 1243: 0xF412F23B, /* 67 */ ! 1244: 0xE75E56A4, /* 68 */ ! 1245: 0x30022116, /* 69 */ ! 1246: 0xBAF17F1F, /* 70 */ ! 1247: 0xD09872F9, /* 71 */ ! 1248: 0xC1A3699C, /* 72 */ ! 1249: 0xF1E802AA, /* 73 */ ! 1250: 0xDD145DC, /* 74 */ ! 1251: 0x4FDCE093, /* 75 */ ! 1252: 0x8D8412F0, /* 76 */ ! 1253: 0x6CD0F376, /* 77 */ ! 1254: 0x3DE6B73D, /* 78 */ ! 1255: 0x84BA737F, /* 79 */ ! 1256: 0xB43A30F2, /* 80 */ ! 1257: 0x44569F69, /* 81 */ ! 1258: 0xE4EACA, /* 82 */ ! 1259: 0xB58DE3B0, /* 83 */ ! 1260: 0x959113C8, /* 84 */ ! 1261: 0xD62EFEE9, /* 85 */ ! 1262: 0x90861F83, /* 86 */ ! 1263: 0xCED69874, /* 87 */ ! 1264: 0x2F793CEE, /* 88 */ ! 1265: 0xE8571C30, /* 89 */ ! 1266: 0x483665D1, /* 90 */ ! 1267: 0xAB07B031, /* 91 */ ! 1268: 0x914C844F, /* 92 */ ! 1269: 0x15BF3BE8, /* 93 */ ! 1270: 0x2C3F2A9A, /* 94 */ ! 1271: 0x9EB95FD4, /* 95 */ ! 1272: 0x92E7472D, /* 96 */ ! 1273: 0x2297CC5B, /* 97 */ ! 1274: 0xEE5F2782, /* 98 */ ! 1275: 0x5377B562, /* 99 */ ! 1276: 0xDB8EBBCF, /* 100 */ ! 1277: 0xF961DEDD, /* 101 */ ! 1278: 0xC59B5C60, /* 102 */ ! 1279: 0x1BD3910D, /* 103 */ ! 1280: 0x26D206AD, /* 104 */ ! 1281: 0xB28514D8, /* 105 */ ! 1282: 0x5ECF6B52, /* 106 */ ! 1283: 0x7FEA78BB, /* 107 */ ! 1284: 0x504879AC, /* 108 */ ! 1285: 0xED34A884, /* 109 */ ! 1286: 0x36E51D3C, /* 110 */ ! 1287: 0x1753741D, /* 111 */ ! 1288: 0x8C47CAED, /* 112 */ ! 1289: 0x9D0A40EF, /* 113 */ ! 1290: 0x3145E221, /* 114 */ ! 1291: 0xDA27EB70, /* 115 */ ! 1292: 0xDF730BA3, /* 116 */ ! 1293: 0x183C8789, /* 117 */ ! 1294: 0x739AC0A6, /* 118 */ ! 1295: 0x9A58DFC6, /* 119 */ ! 1296: 0x54B134C1, /* 120 */ ! 1297: 0xAC3E242E, /* 121 */ ! 1298: 0xCC493902, /* 122 */ ! 1299: 0x7B2DDA99, /* 123 */ ! 1300: 0x8F15BC01, /* 124 */ ! 1301: 0x29FD38C7, /* 125 */ ! 1302: 0x27D5318F, /* 126 */ ! 1303: 0x604AAFF5, /* 127 */ ! 1304: 0xF29C6818, /* 128 */ ! 1305: 0xC38AA2EC, /* 129 */ ! 1306: 0x1019D4C3, /* 130 */ ! 1307: 0xA8FB936E, /* 131 */ ! 1308: 0x20ED7B39, /* 132 */ ! 1309: 0xB686119, /* 133 */ ! 1310: 0x89A0906F, /* 134 */ ! 1311: 0x1CC7829E, /* 135 */ ! 1312: 0x9952EF4B, /* 136 */ ! 1313: 0x850E9E8C, /* 137 */ ! 1314: 0xCD063A90, /* 138 */ ! 1315: 0x67002F8E, /* 139 */ ! 1316: 0xCFAC8CB7, /* 140 */ ! 1317: 0xEAA24B11, /* 141 */ ! 1318: 0x988B4E6C, /* 142 */ ! 1319: 0x46F066DF, /* 143 */ ! 1320: 0xCA7EEC08, /* 144 */ ! 1321: 0xC7BBA664, /* 145 */ ! 1322: 0x831D17BD, /* 146 */ ! 1323: 0x63F575E6, /* 147 */ ! 1324: 0x9764350E, /* 148 */ ! 1325: 0x47870D42, /* 149 */ ! 1326: 0x26CA4A2, /* 150 */ ! 1327: 0x8167D587, /* 151 */ ! 1328: 0x61B6ADAB, /* 152 */ ! 1329: 0xAA6564D2, /* 153 */ ! 1330: 0x70DA237B, /* 154 */ ! 1331: 0x25E1C74A, /* 155 */ ! 1332: 0xA1C901A0, /* 156 */ ! 1333: 0xEB0A5DA, /* 157 */ ! 1334: 0x7670F741, /* 158 */ ! 1335: 0x51C05AEA, /* 159 */ ! 1336: 0x933DFA32, /* 160 */ ! 1337: 0x759FF1A, /* 161 */ ! 1338: 0x56010AB8, /* 162 */ ! 1339: 0x5FDECB78, /* 163 */ ! 1340: 0x3F32EDF8, /* 164 */ ! 1341: 0xAEBEDBB9, /* 165 */ ! 1342: 0x39F8326D, /* 166 */ ! 1343: 0xD20858C5, /* 167 */ ! 1344: 0x9B638BE4, /* 168 */ ! 1345: 0xA572C80A, /* 169 */ ! 1346: 0x28E0A19F, /* 170 */ ! 1347: 0x432099FC, /* 171 */ ! 1348: 0x3A37C3CD, /* 172 */ ! 1349: 0xBF95C585, /* 173 */ ! 1350: 0xB392C12A, /* 174 */ ! 1351: 0x6AA707D7, /* 175 */ ! 1352: 0x52F66A61, /* 176 */ ! 1353: 0x12D483B1, /* 177 */ ! 1354: 0x96435B5E, /* 178 */ ! 1355: 0x3E75802B, /* 179 */ ! 1356: 0x3BA52B33, /* 180 */ ! 1357: 0xA99F51A5, /* 181 */ ! 1358: 0xBDA1E157, /* 182 */ ! 1359: 0x78C2E70C, /* 183 */ ! 1360: 0xFCAE7CE0, /* 184 */ ! 1361: 0xD1602267, /* 185 */ ! 1362: 0x2AFFAC4D, /* 186 */ ! 1363: 0x4A510947, /* 187 */ ! 1364: 0xAB2B83A, /* 188 */ ! 1365: 0x7A04E579, /* 189 */ ! 1366: 0x340DFD80, /* 190 */ ! 1367: 0xB916E922, /* 191 */ ! 1368: 0xE29D5E9B, /* 192 */ ! 1369: 0xF5624AF4, /* 193 */ ! 1370: 0x4CA9D9AF, /* 194 */ ! 1371: 0x6BBD2CFE, /* 195 */ ! 1372: 0xE3B7F620, /* 196 */ ! 1373: 0xC2746E07, /* 197 */ ! 1374: 0x5B42B9B6, /* 198 */ ! 1375: 0xA06919BC, /* 199 */ ! 1376: 0xF0F2C40F, /* 200 */ ! 1377: 0x72217AB5, /* 201 */ ! 1378: 0x14C19DF3, /* 202 */ ! 1379: 0xF3802DAE, /* 203 */ ! 1380: 0xE094BEB4, /* 204 */ ! 1381: 0xA2101AFF, /* 205 */ ! 1382: 0x529575D, /* 206 */ ! 1383: 0x55CDB27C, /* 207 */ ! 1384: 0xA33BDDB2, /* 208 */ ! 1385: 0x6528B37D, /* 209 */ ! 1386: 0x740C05DB, /* 210 */ ! 1387: 0xE96A62C4, /* 211 */ ! 1388: 0x40782846, /* 212 */ ! 1389: 0x6D30D706, /* 213 */ ! 1390: 0xBBF48E2C, /* 214 */ ! 1391: 0xBCE2D3DE, /* 215 */ ! 1392: 0x49E37FA, /* 216 */ ! 1393: 0x1B5E634, /* 217 */ ! 1394: 0x2D886D8D, /* 218 */ ! 1395: 0x7E5A2E7E, /* 219 */ ! 1396: 0xD7412013, /* 220 */ ! 1397: 0x6E90F97, /* 221 */ ! 1398: 0xE45D3EBA, /* 222 */ ! 1399: 0xB8AD3386, /* 223 */ ! 1400: 0x13051B25, /* 224 */ ! 1401: 0xC035354, /* 225 */ ! 1402: 0x71C89B75, /* 226 */ ! 1403: 0xC638FBD0, /* 227 */ ! 1404: 0x197F11A1, /* 228 */ ! 1405: 0xEF0F08FB, /* 229 */ ! 1406: 0xF8448651, /* 230 */ ! 1407: 0x38409563, /* 231 */ ! 1408: 0x452F4443, /* 232 */ ! 1409: 0x5D464D55, /* 233 */ ! 1410: 0x3D8764C, /* 234 */ ! 1411: 0xB1B8D638, /* 235 */ ! 1412: 0xA70BBA2F, /* 236 */ ! 1413: 0x94B3D210, /* 237 */ ! 1414: 0xEB6692A7, /* 238 */ ! 1415: 0xD409C2D9, /* 239 */ ! 1416: 0x68838526, /* 240 */ ! 1417: 0xA6DB8A15, /* 241 */ ! 1418: 0x751F6C98, /* 242 */ ! 1419: 0xDE769A88, /* 243 */ ! 1420: 0xC9EE4668, /* 244 */ ! 1421: 0x1A82A373, /* 245 */ ! 1422: 0x896AA49, /* 246 */ ! 1423: 0x42233681, /* 247 */ ! 1424: 0xF62C55CB, /* 248 */ ! 1425: 0x9F1C5404, /* 249 */ ! 1426: 0xF74FB15C, /* 250 */ ! 1427: 0xC06E4312, /* 251 */ ! 1428: 0x6FFE5D72, /* 252 */ ! 1429: 0x8AA8678B, /* 253 */ ! 1430: 0x337CD129, /* 254 */ ! 1431: 0x8211CEFD /* 255 */ ! 1432: /* End of S Box 0 */ }, ! 1433: ! 1434: ! 1435: { ! 1436: /* Start of S Box 1 */ ! 1437: ! 1438: 0x74A1D09, /* 0 */ ! 1439: 0x52A10E5A, /* 1 */ ! 1440: 0x9275A3F8, /* 2 */ ! 1441: 0x4B82506C, /* 3 */ ! 1442: 0x37DF7E1B, /* 4 */ ! 1443: 0x4C78B3C5, /* 5 */ ! 1444: 0xCEFAB1DA, /* 6 */ ! 1445: 0xF472267E, /* 7 */ ! 1446: 0xB63045F6, /* 8 */ ! 1447: 0xD66A1FC0, /* 9 */ ! 1448: 0x400298E3, /* 10 */ ! 1449: 0x27E60C94, /* 11 */ ! 1450: 0x87D2F1B8, /* 12 */ ! 1451: 0xDF9E56CC, /* 13 */ ! 1452: 0x45CD1803, /* 14 */ ! 1453: 0x1D35E098, /* 15 */ ! 1454: 0xCCE7C736, /* 16 */ ! 1455: 0x3483BF1, /* 17 */ ! 1456: 0x1F7307D7, /* 18 */ ! 1457: 0xC6E8F948, /* 19 */ ! 1458: 0xE613C111, /* 20 */ ! 1459: 0x3955C6FF, /* 21 */ ! 1460: 0x1170ED7C, /* 22 */ ! 1461: 0x8E95DA41, /* 23 */ ! 1462: 0x99C31BF4, /* 24 */ ! 1463: 0xA4DA8021, /* 25 */ ! 1464: 0x7B5F94FB, /* 26 */ ! 1465: 0xDD0DA51F, /* 27 */ ! 1466: 0x6562AA77, /* 28 */ ! 1467: 0x556BCB23, /* 29 */ ! 1468: 0xDB1BACC6, /* 30 */ ! 1469: 0x798040B9, /* 31 */ ! 1470: 0xBFE5378F, /* 32 */ ! 1471: 0x731D55E6, /* 33 */ ! 1472: 0xDAA5BFEE, /* 34 */ ! 1473: 0x389BBC60, /* 35 */ ! 1474: 0x1B33FBA4, /* 36 */ ! 1475: 0x9C567204, /* 37 */ ! 1476: 0x36C26C68, /* 38 */ ! 1477: 0x77EE9D69, /* 39 */ ! 1478: 0x8AEB3E88, /* 40 */ ! 1479: 0x2D50B5CE, /* 41 */ ! 1480: 0x9579E790, /* 42 */ ! 1481: 0x42B13CFC, /* 43 */ ! 1482: 0x33FBD32B, /* 44 */ ! 1483: 0xEE0503A7, /* 45 */ ! 1484: 0xB5862824, /* 46 */ ! 1485: 0x15E41EAD, /* 47 */ ! 1486: 0xC8412EF7, /* 48 */ ! 1487: 0x9D441275, /* 49 */ ! 1488: 0x2FCEC582, /* 50 */ ! 1489: 0x5FF483B7, /* 51 */ ! 1490: 0x8F3931DF, /* 52 */ ! 1491: 0x2E5D2A7B, /* 53 */ ! 1492: 0x49467BF9, /* 54 */ ! 1493: 0x653DEA9, /* 55 */ ! 1494: 0x2684CE35, /* 56 */ ! 1495: 0x7E655E5C, /* 57 */ ! 1496: 0xF12771D8, /* 58 */ ! 1497: 0xBB15CC67, /* 59 */ ! 1498: 0xAB097CA1, /* 60 */ ! 1499: 0x983DCF52, /* 61 */ ! 1500: 0x10DDF026, /* 62 */ ! 1501: 0x21267F57, /* 63 */ ! 1502: 0x2C58F6B4, /* 64 */ ! 1503: 0x31043265, /* 65 */ ! 1504: 0xBAB8C01, /* 66 */ ! 1505: 0xD5492099, /* 67 */ ! 1506: 0xACAAE619, /* 68 */ ! 1507: 0x944CE54A, /* 69 */ ! 1508: 0xF2D13D39, /* 70 */ ! 1509: 0xADD3FC32, /* 71 */ ! 1510: 0xCDA08A40, /* 72 */ ! 1511: 0xE2B0D451, /* 73 */ ! 1512: 0x9EFE08AE, /* 74 */ ! 1513: 0xB9D50FD2, /* 75 */ ! 1514: 0xEA5CD7FD, /* 76 */ ! 1515: 0xC9A749DD, /* 77 */ ! 1516: 0x13EA2253, /* 78 */ ! 1517: 0x832DEBAA, /* 79 */ ! 1518: 0x24BE640F, /* 80 */ ! 1519: 0xE03E926A, /* 81 */ ! 1520: 0x29E01CDE, /* 82 */ ! 1521: 0x8BF59F18, /* 83 */ ! 1522: 0xF9D00B6, /* 84 */ ! 1523: 0xE1238B46, /* 85 */ ! 1524: 0x1E7D8E34, /* 86 */ ! 1525: 0x93619ADB, /* 87 */ ! 1526: 0x76B32F9F, /* 88 */ ! 1527: 0xBD972CEC, /* 89 */ ! 1528: 0xE31FA976, /* 90 */ ! 1529: 0xA68FBB10, /* 91 */ ! 1530: 0xFB3BA49D, /* 92 */ ! 1531: 0x8587C41D, /* 93 */ ! 1532: 0xA5ADD1D0, /* 94 */ ! 1533: 0xF3CF84BF, /* 95 */ ! 1534: 0xD4E11150, /* 96 */ ! 1535: 0xD9FFA6BC, /* 97 */ ! 1536: 0xC3F6018C, /* 98 */ ! 1537: 0xAEF10572, /* 99 */ ! 1538: 0x74A64B2F, /* 100 */ ! 1539: 0xE7DC9559, /* 101 */ ! 1540: 0x2AAE35D5, /* 102 */ ! 1541: 0x5B6F587F, /* 103 */ ! 1542: 0xA9E353FE, /* 104 */ ! 1543: 0xCA4FB674, /* 105 */ ! 1544: 0x4BA24A8, /* 106 */ ! 1545: 0xE5C6875F, /* 107 */ ! 1546: 0xDCBC6266, /* 108 */ ! 1547: 0x6BC5C03F, /* 109 */ ! 1548: 0x661EEF02, /* 110 */ ! 1549: 0xED740BAB, /* 111 */ ! 1550: 0x58E34E4, /* 112 */ ! 1551: 0xB7E946CF, /* 113 */ ! 1552: 0x88698125, /* 114 */ ! 1553: 0x72EC48ED, /* 115 */ ! 1554: 0xB11073A3, /* 116 */ ! 1555: 0xA13485EB, /* 117 */ ! 1556: 0xA2A2429C, /* 118 */ ! 1557: 0xFA407547, /* 119 */ ! 1558: 0x50B76713, /* 120 */ ! 1559: 0x5418C37D, /* 121 */ ! 1560: 0x96192DA5, /* 122 */ ! 1561: 0x170BB04B, /* 123 */ ! 1562: 0x518A021E, /* 124 */ ! 1563: 0xB0AC13D1, /* 125 */ ! 1564: 0x963FA2A, /* 126 */ ! 1565: 0x4A6E10E1, /* 127 */ ! 1566: 0x58472BDC, /* 128 */ ! 1567: 0xF7F8D962, /* 129 */ ! 1568: 0x979139EA, /* 130 */ ! 1569: 0x8D856538, /* 131 */ ! 1570: 0xC0997042, /* 132 */ ! 1571: 0x48324D7A, /* 133 */ ! 1572: 0x447623CB, /* 134 */ ! 1573: 0x8CBBE364, /* 135 */ ! 1574: 0x6E0C6B0E, /* 136 */ ! 1575: 0xD36D63B0, /* 137 */ ! 1576: 0x3F244C84, /* 138 */ ! 1577: 0x3542C971, /* 139 */ ! 1578: 0x2B228DC1, /* 140 */ ! 1579: 0xCB0325BB, /* 141 */ ! 1580: 0xF8C0D6E9, /* 142 */ ! 1581: 0xDE11066B, /* 143 */ ! 1582: 0xA8649327, /* 144 */ ! 1583: 0xFC31F83E, /* 145 */ ! 1584: 0x7DD80406, /* 146 */ ! 1585: 0xF916DD61, /* 147 */ ! 1586: 0xD89F79D3, /* 148 */ ! 1587: 0x615144C2, /* 149 */ ! 1588: 0xEBB45D31, /* 150 */ ! 1589: 0x28002958, /* 151 */ ! 1590: 0x56890A37, /* 152 */ ! 1591: 0xF05B3808, /* 153 */ ! 1592: 0x123AE844, /* 154 */ ! 1593: 0x86839E16, /* 155 */ ! 1594: 0x914B0D83, /* 156 */ ! 1595: 0xC506B43C, /* 157 */ ! 1596: 0xCF3CBA5E, /* 158 */ ! 1597: 0x7C60F5C9, /* 159 */ ! 1598: 0x22DEB2A0, /* 160 */ ! 1599: 0x5D9C2715, /* 161 */ ! 1600: 0xC77BA0EF, /* 162 */ ! 1601: 0x4F45360B, /* 163 */ ! 1602: 0xC1017D8B, /* 164 */ ! 1603: 0xE45ADC29, /* 165 */ ! 1604: 0xA759909B, /* 166 */ ! 1605: 0x412CD293, /* 167 */ ! 1606: 0xD7D796B1, /* 168 */ ! 1607: 0xC8FF30, /* 169 */ ! 1608: 0x23A34A80, /* 170 */ ! 1609: 0x4EC15C91, /* 171 */ ! 1610: 0x714E78B5, /* 172 */ ! 1611: 0x47B9E42E, /* 173 */ ! 1612: 0x78F3EA4D, /* 174 */ ! 1613: 0x7F078F5B, /* 175 */ ! 1614: 0x346C593A, /* 176 */ ! 1615: 0xA3A87A1A, /* 177 */ ! 1616: 0x9BCBFE12, /* 178 */ ! 1617: 0x3D439963, /* 179 */ ! 1618: 0xB2EF6D8E, /* 180 */ ! 1619: 0xB8D46028, /* 181 */ ! 1620: 0x6C2FD5CA, /* 182 */ ! 1621: 0x62675256, /* 183 */ ! 1622: 0x1F2A2F3, /* 184 */ ! 1623: 0xBC96AE0A, /* 185 */ ! 1624: 0x709A8920, /* 186 */ ! 1625: 0xB4146E87, /* 187 */ ! 1626: 0x6308B9E2, /* 188 */ ! 1627: 0x64BDA7BA, /* 189 */ ! 1628: 0xAFED6892, /* 190 */ ! 1629: 0x6037F2A2, /* 191 */ ! 1630: 0xF52969E0, /* 192 */ ! 1631: 0xADB43A6, /* 193 */ ! 1632: 0x82811400, /* 194 */ ! 1633: 0x90D0BDF0, /* 195 */ ! 1634: 0x19C9549E, /* 196 */ ! 1635: 0x203F6A73, /* 197 */ ! 1636: 0x1ACCAF4F, /* 198 */ ! 1637: 0x89714E6D, /* 199 */ ! 1638: 0x164D4705, /* 200 */ ! 1639: 0x67665F07, /* 201 */ ! 1640: 0xEC206170, /* 202 */ ! 1641: 0xC2182B2, /* 203 */ ! 1642: 0xA02B9C81, /* 204 */ ! 1643: 0x53289722, /* 205 */ ! 1644: 0xF6A97686, /* 206 */ ! 1645: 0x140E4179, /* 207 */ ! 1646: 0x9F778849, /* 208 */ ! 1647: 0x9A88E15D, /* 209 */ ! 1648: 0x25CADB54, /* 210 */ ! 1649: 0xD157F36F, /* 211 */ ! 1650: 0x32A421C3, /* 212 */ ! 1651: 0xB368E98A, /* 213 */ ! 1652: 0x5A92CD0D, /* 214 */ ! 1653: 0x757AA8D4, /* 215 */ ! 1654: 0xC20AC278, /* 216 */ ! 1655: 0x8B551C7, /* 217 */ ! 1656: 0x849491E8, /* 218 */ ! 1657: 0x4DC75AD6, /* 219 */ ! 1658: 0x697C33BE, /* 220 */ ! 1659: 0xBAF0CA33, /* 221 */ ! 1660: 0x46125B4E, /* 222 */ ! 1661: 0x59D677B3, /* 223 */ ! 1662: 0x30D9C8F2, /* 224 */ ! 1663: 0xD0AF860C, /* 225 */ ! 1664: 0x1C7FD0FA, /* 226 */ ! 1665: 0xFE0FF72C, /* 227 */ ! 1666: 0x5C8D6F43, /* 228 */ ! 1667: 0x57FDEC3B, /* 229 */ ! 1668: 0x6AB6AD97, /* 230 */ ! 1669: 0xD22ADF89, /* 231 */ ! 1670: 0x18171785, /* 232 */ ! 1671: 0x2BFE22D, /* 233 */ ! 1672: 0x6DB80917, /* 234 */ ! 1673: 0x80B216AF, /* 235 */ ! 1674: 0xE85E4F9A, /* 236 */ ! 1675: 0x7A1C306E, /* 237 */ ! 1676: 0x6FC49BF5, /* 238 */ ! 1677: 0x3AF7A11C, /* 239 */ ! 1678: 0x81E215E7, /* 240 */ ! 1679: 0x68363FCD, /* 241 */ ! 1680: 0x3E9357C8, /* 242 */ ! 1681: 0xEF52FD55, /* 243 */ ! 1682: 0x3B8BAB4C, /* 244 */ ! 1683: 0x3C8CF495, /* 245 */ ! 1684: 0xBEFCEEBD, /* 246 */ ! 1685: 0xFD25B714, /* 247 */ ! 1686: 0xC498D83D, /* 248 */ ! 1687: 0xD2E1A8D, /* 249 */ ! 1688: 0xE9F966AC, /* 250 */ ! 1689: 0xE387445, /* 251 */ ! 1690: 0x435419E5, /* 252 */ ! 1691: 0x5E7EBEC4, /* 253 */ ! 1692: 0xAA90B8D9, /* 254 */ ! 1693: 0xFF1A3A96}, /* 255 */ ! 1694: ! 1695: { ! 1696: /* Start of S-box 2 */ ! 1697: ! 1698: 0x4A8FE4E3, /* 0 */ ! 1699: 0xF27D99CD, /* 1 */ ! 1700: 0xD04A40CA, /* 2 */ ! 1701: 0xCB5FF194, /* 3 */ ! 1702: 0x3668275A, /* 4 */ ! 1703: 0xFF4816BE, /* 5 */ ! 1704: 0xA78B394C, /* 6 */ ! 1705: 0x4C6BE9DB, /* 7 */ ! 1706: 0x4EEC38D2, /* 8 */ ! 1707: 0x4296EC80, /* 9 */ ! 1708: 0xCDCE96F8, /* 10 */ ! 1709: 0x888C2F38, /* 11 */ ! 1710: 0xE75508F5, /* 12 */ ! 1711: 0x7B916414, /* 13 */ ! 1712: 0x60AA14A, /* 14 */ ! 1713: 0xA214F327, /* 15 */ ! 1714: 0xBE608DAF, /* 16 */ ! 1715: 0x1EBBDEC2, /* 17 */ ! 1716: 0x61F98CE9, /* 18 */ ! 1717: 0xE92156FE, /* 19 */ ! 1718: 0x4F22D7A3, /* 20 */ ! 1719: 0x3F76A8D9, /* 21 */ ! 1720: 0x559A4B33, /* 22 */ ! 1721: 0x38AD2959, /* 23 */ ! 1722: 0xF3F17E9E, /* 24 */ ! 1723: 0x85E1BA91, /* 25 */ ! 1724: 0xE5EBA6FB, /* 26 */ ! 1725: 0x73DCD48C, /* 27 */ ! 1726: 0xF5C3FF78, /* 28 */ ! 1727: 0x481B6058, /* 29 */ ! 1728: 0x8A3297F7, /* 30 */ ! 1729: 0x8F1F3BF4, /* 31 */ ! 1730: 0x93785AB2, /* 32 */ ! 1731: 0x477A4A5B, /* 33 */ ! 1732: 0x6334EB5D, /* 34 */ ! 1733: 0x6D251B2E, /* 35 */ ! 1734: 0x74A9102D, /* 36 */ ! 1735: 0x7E38FFA, /* 37 */ ! 1736: 0x915C9C62, /* 38 */ ! 1737: 0xCCC275EA, /* 39 */ ! 1738: 0x6BE273EC, /* 40 */ ! 1739: 0x3EBDDD70, /* 41 */ ! 1740: 0xD895796C, /* 42 */ ! 1741: 0xDC54A91B, /* 43 */ ! 1742: 0xC9AFDF81, /* 44 */ ! 1743: 0x23633F73, /* 45 */ ! 1744: 0x275119B4, /* 46 */ ! 1745: 0xB19F6B67, /* 47 */ ! 1746: 0x50756E22, /* 48 */ ! 1747: 0x2BB152E2, /* 49 */ ! 1748: 0x76EA46A2, /* 50 */ ! 1749: 0xA353E232, /* 51 */ ! 1750: 0x2F596AD6, /* 52 */ ! 1751: 0xB1EDB0B, /* 53 */ ! 1752: 0x2D3D9A4, /* 54 */ ! 1753: 0x78B47843, /* 55 */ ! 1754: 0x64893E90, /* 56 */ ! 1755: 0x40F0CAAD, /* 57 */ ! 1756: 0xF68D3AD7, /* 58 */ ! 1757: 0x46FD1707, /* 59 */ ! 1758: 0x1C9C67EF, /* 60 */ ! 1759: 0xB5E086DE, /* 61 */ ! 1760: 0x96EE6CA6, /* 62 */ ! 1761: 0x9AA34774, /* 63 */ ! 1762: 0x1BA4F48A, /* 64 */ ! 1763: 0x8D01ABFD, /* 65 */ ! 1764: 0x183EE1F6, /* 66 */ ! 1765: 0x5FF8AA7A, /* 67 */ ! 1766: 0x17E4FAAE, /* 68 */ ! 1767: 0x303983B0, /* 69 */ ! 1768: 0x6C08668B, /* 70 */ ! 1769: 0xD4AC4382, /* 71 */ ! 1770: 0xE6C5849F, /* 72 */ ! 1771: 0x92FEFB53, /* 73 */ ! 1772: 0xC1CAC4CE, /* 74 */ ! 1773: 0x43501388, /* 75 */ ! 1774: 0x441118CF, /* 76 */ ! 1775: 0xEC4FB308, /* 77 */ ! 1776: 0x53A08E86, /* 78 */ ! 1777: 0x9E0FE0C5, /* 79 */ ! 1778: 0xF91C1525, /* 80 */ ! 1779: 0xAC45BE05, /* 81 */ ! 1780: 0xD7987CB5, /* 82 */ ! 1781: 0x49BA1487, /* 83 */ ! 1782: 0x57938940, /* 84 */ ! 1783: 0xD5877648, /* 85 */ ! 1784: 0xA958727F, /* 86 */ ! 1785: 0x58DFE3C3, /* 87 */ ! 1786: 0xF436CF77, /* 88 */ ! 1787: 0x399E4D11, /* 89 */ ! 1788: 0xF0A5BFA9, /* 90 */ ! 1789: 0xEF61A33B, /* 91 */ ! 1790: 0xA64CAC60, /* 92 */ ! 1791: 0x4A8D0BA, /* 93 */ ! 1792: 0x30DD572, /* 94 */ ! 1793: 0xB83D320F, /* 95 */ ! 1794: 0xCAB23045, /* 96 */ ! 1795: 0xE366F2F0, /* 97 */ ! 1796: 0x815D008D, /* 98 */ ! 1797: 0xC897A43A, /* 99 */ ! 1798: 0x1D352DF3, /* 100 */ ! 1799: 0xB9CC571D, /* 101 */ ! 1800: 0x8BF38744, /* 102 */ ! 1801: 0x72209092, /* 103 */ ! 1802: 0xEBA124EB, /* 104 */ ! 1803: 0xFB99CE5E, /* 105 */ ! 1804: 0x3BB94293, /* 106 */ ! 1805: 0x28DA549C, /* 107 */ ! 1806: 0xAAB8A228, /* 108 */ ! 1807: 0xA4197785, /* 109 */ ! 1808: 0x33C70296, /* 110 */ ! 1809: 0x25F6259B, /* 111 */ ! 1810: 0x5C85DA21, /* 112 */ ! 1811: 0xDF15BDEE, /* 113 */ ! 1812: 0x15B7C7E8, /* 114 */ ! 1813: 0xE2ABEF75, /* 115 */ ! 1814: 0xFCC19BC1, /* 116 */ ! 1815: 0x417FF868, /* 117 */ ! 1816: 0x14884434, /* 118 */ ! 1817: 0x62825179, /* 119 */ ! 1818: 0xC6D5C11C, /* 120 */ ! 1819: 0xE4705DC, /* 121 */ ! 1820: 0x22700DE0, /* 122 */ ! 1821: 0xD3D2AF18, /* 123 */ ! 1822: 0x9BE822A0, /* 124 */ ! 1823: 0x35B669F1, /* 125 */ ! 1824: 0xC42BB55C, /* 126 */ ! 1825: 0xA801252, /* 127 */ ! 1826: 0x115BF0FC, /* 128 */ ! 1827: 0x3CD7D856, /* 129 */ ! 1828: 0xB43F5F9D, /* 130 */ ! 1829: 0xC2306516, /* 131 */ ! 1830: 0xA1231C47, /* 132 */ ! 1831: 0xF149207E, /* 133 */ ! 1832: 0x5209A795, /* 134 */ ! 1833: 0x34B3CCD8, /* 135 */ ! 1834: 0x67AEFE54, /* 136 */ ! 1835: 0x2C83924E, /* 137 */ ! 1836: 0x6662CBAC, /* 138 */ ! 1837: 0x5EEDD161, /* 139 */ ! 1838: 0x84E681AA, /* 140 */ ! 1839: 0x5D57D26B, /* 141 */ ! 1840: 0xFA465CC4, /* 142 */ ! 1841: 0x7E3AC3A8, /* 143 */ ! 1842: 0xBF7C0CC6, /* 144 */ ! 1843: 0xE18A9AA1, /* 145 */ ! 1844: 0xC32F0A6F, /* 146 */ ! 1845: 0xB22CC00D, /* 147 */ ! 1846: 0x3D280369, /* 148 */ ! 1847: 0x994E554F, /* 149 */ ! 1848: 0x68F480D3, /* 150 */ ! 1849: 0xADCFF5E6, /* 151 */ ! 1850: 0x3A8EB265, /* 152 */ ! 1851: 0x83269831, /* 153 */ ! 1852: 0xBD568A09, /* 154 */ ! 1853: 0x4BC8AE6A, /* 155 */ ! 1854: 0x69F56D2B, /* 156 */ ! 1855: 0xF17EAC8, /* 157 */ ! 1856: 0x772EB6C7, /* 158 */ ! 1857: 0x9F41343C, /* 159 */ ! 1858: 0xAB1D0742, /* 160 */ ! 1859: 0x826A6F50, /* 161 */ ! 1860: 0xFEA2097C, /* 162 */ ! 1861: 0x1912C283, /* 163 */ ! 1862: 0xCE185899, /* 164 */ ! 1863: 0xE4444839, /* 165 */ ! 1864: 0x2D8635D5, /* 166 */ ! 1865: 0x65D0B1FF, /* 167 */ ! 1866: 0x865A7F17, /* 168 */ ! 1867: 0x326D9FB1, /* 169 */ ! 1868: 0x59E52820, /* 170 */ ! 1869: 0x90ADE1, /* 171 */ ! 1870: 0x753C7149, /* 172 */ ! 1871: 0x9DDD8B98, /* 173 */ ! 1872: 0xA5A691DA, /* 174 */ ! 1873: 0xD0382BB, /* 175 */ ! 1874: 0x8904C930, /* 176 */ ! 1875: 0x86CB000, /* 177 */ ! 1876: 0x6E69D3BD, /* 178 */ ! 1877: 0x24D4E7A7, /* 179 */ ! 1878: 0x5244FD0, /* 180 */ ! 1879: 0x101A5E0C, /* 181 */ ! 1880: 0x6A947DCB, /* 182 */ ! 1881: 0xE840F77B, /* 183 */ ! 1882: 0x7D0C5003, /* 184 */ ! 1883: 0x7C370F1F, /* 185 */ ! 1884: 0x805245ED, /* 186 */ ! 1885: 0xE05E3D3F, /* 187 */ ! 1886: 0x7906880E, /* 188 */ ! 1887: 0xBABFCD35, /* 189 */ ! 1888: 0x1A7EC697, /* 190 */ ! 1889: 0x8C052324, /* 191 */ ! 1890: 0xC6EC8DF, /* 192 */ ! 1891: 0xD129A589, /* 193 */ ! 1892: 0xC7A75B02, /* 194 */ ! 1893: 0x12D81DE7, /* 195 */ ! 1894: 0xD9BE2A66, /* 196 */ ! 1895: 0x1F4263AB, /* 197 */ ! 1896: 0xDE73FDB6, /* 198 */ ! 1897: 0x2A00680A, /* 199 */ ! 1898: 0x56649E36, /* 200 */ ! 1899: 0x3133ED55, /* 201 */ ! 1900: 0x90FA0BF2, /* 202 */ ! 1901: 0x2910A02A, /* 203 */ ! 1902: 0x949D9D46, /* 204 */ ! 1903: 0xA0D1DCDD, /* 205 */ ! 1904: 0xCFC9B7D4, /* 206 */ ! 1905: 0xD2677BE5, /* 207 */ ! 1906: 0x95CB36B3, /* 208 */ ! 1907: 0x13CD9410, /* 209 */ ! 1908: 0xDBF73313, /* 210 */ ! 1909: 0xB7C6E8C0, /* 211 */ ! 1910: 0xF781414B, /* 212 */ ! 1911: 0x510B016D, /* 213 */ ! 1912: 0xB0DE1157, /* 214 */ ! 1913: 0xD6B0F62C, /* 215 */ ! 1914: 0xBB074ECC, /* 216 */ ! 1915: 0x7F1395B7, /* 217 */ ! 1916: 0xEE792CF9, /* 218 */ ! 1917: 0xEA6FD63E, /* 219 */ ! 1918: 0x5BD6938E, /* 220 */ ! 1919: 0xAF02FC64, /* 221 */ ! 1920: 0xDAB57AB8, /* 222 */ ! 1921: 0x8EDB3784, /* 223 */ ! 1922: 0x8716318F, /* 224 */ ! 1923: 0x164D1A01, /* 225 */ ! 1924: 0x26F26141, /* 226 */ ! 1925: 0xB372E6B9, /* 227 */ ! 1926: 0xF8FC2B06, /* 228 */ ! 1927: 0x7AC00E04, /* 229 */ ! 1928: 0x3727B89A, /* 230 */ ! 1929: 0x97E9BCA5, /* 231 */ ! 1930: 0x9C2A742F, /* 232 */ ! 1931: 0xBC3B1F7D, /* 233 */ ! 1932: 0x7165B471, /* 234 */ ! 1933: 0x609B4C29, /* 235 */ ! 1934: 0x20925351, /* 236 */ ! 1935: 0x5AE72112, /* 237 */ ! 1936: 0x454BE5D1, /* 238 */ ! 1937: 0xC0FFB95F, /* 239 */ ! 1938: 0xDD0EF919, /* 240 */ ! 1939: 0x6F2D70C9, /* 241 */ ! 1940: 0x974C5BF, /* 242 */ ! 1941: 0x98AA6263, /* 243 */ ! 1942: 0x1D91E4D, /* 244 */ ! 1943: 0x2184BB6E, /* 245 */ ! 1944: 0x70C43C1E, /* 246 */ ! 1945: 0x4D435915, /* 247 */ ! 1946: 0xAE7B8523, /* 248 */ ! 1947: 0xB6FB06BC, /* 249 */ ! 1948: 0x5431EE76, /* 250 */ ! 1949: 0xFDBC5D26, /* 251 */ ! 1950: 0xED77493D, /* 252 */ ! 1951: 0xC5712EE4, /* 253 */ ! 1952: 0xA8380437, /* 254 */ ! 1953: 0x2EEF261A}, /* 255 */ ! 1954: ! 1955: { ! 1956: /* Start of S Box 3 */ ! 1957: ! 1958: 0x5A79392B, /* 0 */ ! 1959: 0xB8AF32C2, /* 1 */ ! 1960: 0x41F7720A, /* 2 */ ! 1961: 0x833A61EC, /* 3 */ ! 1962: 0x13DFEDAC, /* 4 */ ! 1963: 0xC4990BC4, /* 5 */ ! 1964: 0xDC0F54BC, /* 6 */ ! 1965: 0xFEDD5E88, /* 7 */ ! 1966: 0x80DA1881, /* 8 */ ! 1967: 0x4DEA1AFD, /* 9 */ ! 1968: 0xFD402CC6, /* 10 */ ! 1969: 0xAE67CC7A, /* 11 */ ! 1970: 0xC5238525, /* 12 */ ! 1971: 0x8EA01254, /* 13 */ ! 1972: 0xB56B9BD5, /* 14 */ ! 1973: 0x862FBD6D, /* 15 */ ! 1974: 0xAC8575D3, /* 16 */ ! 1975: 0x6FBA3714, /* 17 */ ! 1976: 0xDA7EBF46, /* 18 */ ! 1977: 0x59CD5238, /* 19 */ ! 1978: 0x8AC9DBFE, /* 20 */ ! 1979: 0x353729FC, /* 21 */ ! 1980: 0xE497D7F2, /* 22 */ ! 1981: 0xC3AB84E0, /* 23 */ ! 1982: 0xF05A114B, /* 24 */ ! 1983: 0x7B887A75, /* 25 */ ! 1984: 0xEDC603DD, /* 26 */ ! 1985: 0x5E6FE680, /* 27 */ ! 1986: 0x2C84B399, /* 28 */ ! 1987: 0x884EB1DA, /* 29 */ ! 1988: 0x1CB8C8BF, /* 30 */ ! 1989: 0xAA51098A, /* 31 */ ! 1990: 0xC862231C, /* 32 */ ! 1991: 0x8BAC2221, /* 33 */ ! 1992: 0x21B387E5, /* 34 */ ! 1993: 0x208A430D, /* 35 */ ! 1994: 0x2A3F0F8B, /* 36 */ ! 1995: 0xA5FF9CD2, /* 37 */ ! 1996: 0x6012A2EA, /* 38 */ ! 1997: 0x147A9EE7, /* 39 */ ! 1998: 0xF62A501D, /* 40 */ ! 1999: 0xB4B2E51A, /* 41 */ ! 2000: 0x3EF3484C, /* 42 */ ! 2001: 0xC0253C59, /* 43 */ ! 2002: 0x2B82B536, /* 44 */ ! 2003: 0xAA9696B, /* 45 */ ! 2004: 0xBE0C109B, /* 46 */ ! 2005: 0xC70B7929, /* 47 */ ! 2006: 0xCE3E8A19, /* 48 */ ! 2007: 0x2F66950E, /* 49 */ ! 2008: 0x459F1C2C, /* 50 */ ! 2009: 0xE68FB93D, /* 51 */ ! 2010: 0xA3C3FF3E, /* 52 */ ! 2011: 0x62B45C62, /* 53 */ ! 2012: 0x300991CB, /* 54 */ ! 2013: 0x1914C57, /* 55 */ ! 2014: 0x7F7BC06A, /* 56 */ ! 2015: 0x182831F5, /* 57 */ ! 2016: 0xE7B74BCA, /* 58 */ ! 2017: 0xFA50F6D0, /* 59 */ ! 2018: 0x523CAA61, /* 60 */ ! 2019: 0xE3A7CF05, /* 61 */ ! 2020: 0xE9E41311, /* 62 */ ! 2021: 0x280A21D1, /* 63 */ ! 2022: 0x6A4297E1, /* 64 */ ! 2023: 0xF24DC67E, /* 65 */ ! 2024: 0xFC3189E6, /* 66 */ ! 2025: 0xB72BF34F, /* 67 */ ! 2026: 0x4B1E67AF, /* 68 */ ! 2027: 0x543402CE, /* 69 */ ! 2028: 0x79A59867, /* 70 */ ! 2029: 0x648E02A, /* 71 */ ! 2030: 0xA3AC17, /* 72 */ ! 2031: 0xC6208D35, /* 73 */ ! 2032: 0x6E7F5F76, /* 74 */ ! 2033: 0xA45BB4BE, /* 75 */ ! 2034: 0xF168FA63, /* 76 */ ! 2035: 0x3F4125F3, /* 77 */ ! 2036: 0xF311406F, /* 78 */ ! 2037: 0x2706565, /* 79 */ ! 2038: 0xBFE58022, /* 80 */ ! 2039: 0xCFCFDD9, /* 81 */ ! 2040: 0x735A7F7, /* 82 */ ! 2041: 0x8F049092, /* 83 */ ! 2042: 0xD98EDC27, /* 84 */ ! 2043: 0xF5C5D55C, /* 85 */ ! 2044: 0xE0F201DB, /* 86 */ ! 2045: 0xDCAFC9A, /* 87 */ ! 2046: 0x7727FB79, /* 88 */ ! 2047: 0xAF43ABF4, /* 89 */ ! 2048: 0x26E938C1, /* 90 */ ! 2049: 0x401B26A6, /* 91 */ ! 2050: 0x900720FA, /* 92 */ ! 2051: 0x2752D97B, /* 93 */ ! 2052: 0xCFF1D1B3, /* 94 */ ! 2053: 0xA9D9E424, /* 95 */ ! 2054: 0x42DB99AB, /* 96 */ ! 2055: 0x6CF8BE5F, /* 97 */ ! 2056: 0xE82CEBE3, /* 98 */ ! 2057: 0x3AFB733B, /* 99 */ ! 2058: 0x6B734EB6, /* 100 */ ! 2059: 0x1036414A, /* 101 */ ! 2060: 0x975F667C, /* 102 */ ! 2061: 0x49D6377, /* 103 */ ! 2062: 0xBA587C60, /* 104 */ ! 2063: 0xB1D10483, /* 105 */ ! 2064: 0xDE1AEFCC, /* 106 */ ! 2065: 0x1129D055, /* 107 */ ! 2066: 0x72051E91, /* 108 */ ! 2067: 0x6946D623, /* 109 */ ! 2068: 0xF9E86EA7, /* 110 */ ! 2069: 0x48768C00, /* 111 */ ! 2070: 0xB0166C93, /* 112 */ ! 2071: 0x9956BBF0, /* 113 */ ! 2072: 0x1F1F6D84, /* 114 */ ! 2073: 0xFB15E18E, /* 115 */ ! 2074: 0x33B495D, /* 116 */ ! 2075: 0x56E3362E, /* 117 */ ! 2076: 0x4F44C53C, /* 118 */ ! 2077: 0x747CBA51, /* 119 */ ! 2078: 0x89D37872, /* 120 */ ! 2079: 0x5D9C331B, /* 121 */ ! 2080: 0xD2EF9FA8, /* 122 */ ! 2081: 0x254917F8, /* 123 */ ! 2082: 0x1B106F47, /* 124 */ ! 2083: 0x37D75553, /* 125 */ ! 2084: 0xB3F053B0, /* 126 */ ! 2085: 0x7DCCD8EF, /* 127 */ ! 2086: 0xD30EB802, /* 128 */ ! 2087: 0x5889F42D, /* 129 */ ! 2088: 0x610206D7, /* 130 */ ! 2089: 0x1A7D34A1, /* 131 */ ! 2090: 0x92D87DD8, /* 132 */ ! 2091: 0xE5F4A315, /* 133 */ ! 2092: 0xD1CF0E71, /* 134 */ ! 2093: 0xB22DFE45, /* 135 */ ! 2094: 0xB901E8EB, /* 136 */ ! 2095: 0xFC0CE5E, /* 137 */ ! 2096: 0x2EFA60C9, /* 138 */ ! 2097: 0x2DE74290, /* 139 */ ! 2098: 0x36D0C906, /* 140 */ ! 2099: 0x381C70E4, /* 141 */ ! 2100: 0x4C6DA5B5, /* 142 */ ! 2101: 0x3D81A682, /* 143 */ ! 2102: 0x7E381F34, /* 144 */ ! 2103: 0x396C4F52, /* 145 */ ! 2104: 0x95AD5901, /* 146 */ ! 2105: 0x1DB50C5A, /* 147 */ ! 2106: 0x29982E9E, /* 148 */ ! 2107: 0x1557689F, /* 149 */ ! 2108: 0x3471EE42, /* 150 */ ! 2109: 0xD7E2F7C0, /* 151 */ ! 2110: 0x8795A1E2, /* 152 */ ! 2111: 0xBC324D8D, /* 153 */ ! 2112: 0xE224C3C8, /* 154 */ ! 2113: 0x12837E39, /* 155 */ ! 2114: 0xCDEE3D74, /* 156 */ ! 2115: 0x7AD2143F, /* 157 */ ! 2116: 0xE13D40C, /* 158 */ ! 2117: 0x78BD4A68, /* 159 */ ! 2118: 0xA2EB194D, /* 160 */ ! 2119: 0xDB9451F9, /* 161 */ ! 2120: 0x859B71DC, /* 162 */ ! 2121: 0x5C4F5B89, /* 163 */ ! 2122: 0xCA14A8A4, /* 164 */ ! 2123: 0xEF92F003, /* 165 */ ! 2124: 0x16741D98, /* 166 */ ! 2125: 0x33AA4444, /* 167 */ ! 2126: 0x9E967FBB, /* 168 */ ! 2127: 0x92E3020, /* 169 */ ! 2128: 0xD86A35B8, /* 170 */ ! 2129: 0x8CC17B10, /* 171 */ ! 2130: 0xE1BF08AE, /* 172 */ ! 2131: 0x55693FC5, /* 173 */ ! 2132: 0x7680AD13, /* 174 */ ! 2133: 0x1E6546E8, /* 175 */ ! 2134: 0x23B6E7B9, /* 176 */ ! 2135: 0xEE77A4B2, /* 177 */ ! 2136: 0x8ED0533, /* 178 */ ! 2137: 0x44FD2895, /* 179 */ ! 2138: 0xB6393B69, /* 180 */ ! 2139: 0x5D6CACF, /* 181 */ ! 2140: 0x9819B209, /* 182 */ ! 2141: 0xECBBB72F, /* 183 */ ! 2142: 0x9A75779C, /* 184 */ ! 2143: 0xEAEC0749, /* 185 */ ! 2144: 0x94A65AEE, /* 186 */ ! 2145: 0xBDF52DC3, /* 187 */ ! 2146: 0xD6A25D04, /* 188 */ ! 2147: 0x82008E4E, /* 189 */ ! 2148: 0xA6DE160F, /* 190 */ ! 2149: 0x9B036AFB, /* 191 */ ! 2150: 0x228B3A66, /* 192 */ ! 2151: 0x5FB10A70, /* 193 */ ! 2152: 0xCC338B58, /* 194 */ ! 2153: 0x5378A9DF, /* 195 */ ! 2154: 0xC908BCA9, /* 196 */ ! 2155: 0x4959E25B, /* 197 */ ! 2156: 0x46909A97, /* 198 */ ! 2157: 0x66AE8F6E, /* 199 */ ! 2158: 0xDD0683E9, /* 200 */ ! 2159: 0x65F994B4, /* 201 */ ! 2160: 0x6426CDA5, /* 202 */ ! 2161: 0xC24B8840, /* 203 */ ! 2162: 0x32539DA0, /* 204 */ ! 2163: 0x63175650, /* 205 */ ! 2164: 0xD0C815FF, /* 206 */ ! 2165: 0x50CBC41E, /* 207 */ ! 2166: 0xF7C774A3, /* 208 */ ! 2167: 0x31B0C231, /* 209 */ ! 2168: 0x8D0D8116, /* 210 */ ! 2169: 0x24BEF16C, /* 211 */ ! 2170: 0xD555D256, /* 212 */ ! 2171: 0xDF47EA8C, /* 213 */ ! 2172: 0x6D21ECCD, /* 214 */ ! 2173: 0xA887A012, /* 215 */ ! 2174: 0x84542AED, /* 216 */ ! 2175: 0xA7B9C1BD, /* 217 */ ! 2176: 0x914C1BB1, /* 218 */ ! 2177: 0xA0D5B67D, /* 219 */ ! 2178: 0x438CE937, /* 220 */ ! 2179: 0x7030F873, /* 221 */ ! 2180: 0x71F6B0C7, /* 222 */ ! 2181: 0x574576BA, /* 223 */ ! 2182: 0xF8BC4541, /* 224 */ ! 2183: 0x9C61D348, /* 225 */ ! 2184: 0x1960579D, /* 226 */ ! 2185: 0x17C4DAAD, /* 227 */ ! 2186: 0x96A4CB0B, /* 228 */ ! 2187: 0xC193F2F6, /* 229 */ ! 2188: 0x756EAFA2, /* 230 */ ! 2189: 0x7C1D2F94, /* 231 */ ! 2190: 0xF4FE2B43, /* 232 */ ! 2191: 0xCB86E33A, /* 233 */ ! 2192: 0xEBD4C728, /* 234 */ ! 2193: 0x9D18AE64, /* 235 */ ! 2194: 0x9FE13E30, /* 236 */ ! 2195: 0x3CE0F5DE, /* 237 */ ! 2196: 0xABA1F985, /* 238 */ ! 2197: 0xADDC2718, /* 239 */ ! 2198: 0x68CE6278, /* 240 */ ! 2199: 0xD45E241F, /* 241 */ ! 2200: 0xA15C82B7, /* 242 */ ! 2201: 0x3B2293D4, /* 243 */ ! 2202: 0x739EDD32, /* 244 */ ! 2203: 0x674A6BF1, /* 245 */ ! 2204: 0x5B5D587F, /* 246 */ ! 2205: 0x4772DEAA, /* 247 */ ! 2206: 0x4A63968F, /* 248 */ ! 2207: 0xBE68686, /* 249 */ ! 2208: 0x513D6426, /* 250 */ ! 2209: 0x939A4787, /* 251 */ ! 2210: 0xBBA89296, /* 252 */ ! 2211: 0x4EC20007, /* 253 */ ! 2212: 0x818D0D08, /* 254 */ ! 2213: 0xFF64DFD6}, /* 255 */ ! 2214: ! 2215: { ! 2216: /* Start of S Box 4 */ ! 2217: ! 2218: 0xCB2297CB, /* 0 */ ! 2219: 0xDB48A144, /* 1 */ ! 2220: 0xA16CBE4B, /* 2 */ ! 2221: 0xBBEA1D6C, /* 3 */ ! 2222: 0x5AF6B6B7, /* 4 */ ! 2223: 0x8A8110B6, /* 5 */ ! 2224: 0xF9236EF9, /* 6 */ ! 2225: 0xC98F83E6, /* 7 */ ! 2226: 0xF9C65B8, /* 8 */ ! 2227: 0x252D4A89, /* 9 */ ! 2228: 0xA497F068, /* 10 */ ! 2229: 0xA5D7ED2D, /* 11 */ ! 2230: 0x94C22845, /* 12 */ ! 2231: 0x9DA1C8C4, /* 13 */ ! 2232: 0xE27C2E2E, /* 14 */ ! 2233: 0x6E8BA2B4, /* 15 */ ! 2234: 0xC3DD17FB, /* 16 */ ! 2235: 0x498CD482, /* 17 */ ! 2236: 0xDFE6A9F, /* 18 */ ! 2237: 0xB0705829, /* 19 */ ! 2238: 0x9A1E6DC1, /* 20 */ ! 2239: 0xF829717C, /* 21 */ ! 2240: 0x7BB8E3A, /* 22 */ ! 2241: 0xDA3C0B02, /* 23 */ ! 2242: 0x1AF82FC7, /* 24 */ ! 2243: 0x73B70955, /* 25 */ ! 2244: 0x7A04379C, /* 26 */ ! 2245: 0x5EE20A28, /* 27 */ ! 2246: 0x83712AE5, /* 28 */ ! 2247: 0xF4C47C6D, /* 29 */ ! 2248: 0xDF72BA56, /* 30 */ ! 2249: 0xD794858D, /* 31 */ ! 2250: 0x8C0CF709, /* 32 */ ! 2251: 0x18F0F390, /* 33 */ ! 2252: 0xB6C69B35, /* 34 */ ! 2253: 0xBF2F01DB, /* 35 */ ! 2254: 0x2FA74DCA, /* 36 */ ! 2255: 0xD0CD9127, /* 37 */ ! 2256: 0xBDE66CEC, /* 38 */ ! 2257: 0x3DEEBD46, /* 39 */ ! 2258: 0x57C88FC3, /* 40 */ ! 2259: 0xCEE1406F, /* 41 */ ! 2260: 0x66385A, /* 42 */ ! 2261: 0xF3C3444F, /* 43 */ ! 2262: 0x3A79D5D5, /* 44 */ ! 2263: 0x75751EB9, /* 45 */ ! 2264: 0x3E7F8185, /* 46 */ ! 2265: 0x521C2605, /* 47 */ ! 2266: 0xE1AAAB6E, /* 48 */ ! 2267: 0x38EBB80F, /* 49 */ ! 2268: 0xBEE7E904, /* 50 */ ! 2269: 0x61CB9647, /* 51 */ ! 2270: 0xEA54904E, /* 52 */ ! 2271: 0x5AE00E4, /* 53 */ ! 2272: 0x2D7AC65F, /* 54 */ ! 2273: 0x87751A1, /* 55 */ ! 2274: 0xDCD82915, /* 56 */ ! 2275: 0x921EE16, /* 57 */ ! 2276: 0xDD86D33B, /* 58 */ ! 2277: 0xD6BD491A, /* 59 */ ! 2278: 0x40FBADF0, /* 60 */ ! 2279: 0x4232CBD2, /* 61 */ ! 2280: 0x33808D10, /* 62 */ ! 2281: 0x39098C42, /* 63 */ ! 2282: 0x193F3199, /* 64 */ ! 2283: 0xBC1E47A, /* 65 */ ! 2284: 0x4A82B149, /* 66 */ ! 2285: 0x2B65A8A, /* 67 */ ! 2286: 0x104CDC8E, /* 68 */ ! 2287: 0x24A8F52C, /* 69 */ ! 2288: 0x685C6077, /* 70 */ ! 2289: 0xC79F95C9, /* 71 */ ! 2290: 0x1D11FE50, /* 72 */ ! 2291: 0xC08DAFCD, /* 73 */ ! 2292: 0x7B1A9A03, /* 74 */ ! 2293: 0x1C1F11D8, /* 75 */ ! 2294: 0x84250E7F, /* 76 */ ! 2295: 0x979DB248, /* 77 */ ! 2296: 0xEBDC0501, /* 78 */ ! 2297: 0xB9553395, /* 79 */ ! 2298: 0xE3C05EA8, /* 80 */ ! 2299: 0xB1E51C4C, /* 81 */ ! 2300: 0x13B0E681, /* 82 */ ! 2301: 0x3B407766, /* 83 */ ! 2302: 0x36DB3087, /* 84 */ ! 2303: 0xEE17C9FC, /* 85 */ ! 2304: 0x6C53ECF2, /* 86 */ ! 2305: 0xADCCC58F, /* 87 */ ! 2306: 0xC427660B, /* 88 */ ! 2307: 0xEFD5867D, /* 89 */ ! 2308: 0x9B6D54A5, /* 90 */ ! 2309: 0x6FF1AEFF, /* 91 */ ! 2310: 0x8E787952, /* 92 */ ! 2311: 0x9E2BFFE0, /* 93 */ ! 2312: 0x8761D034, /* 94 */ ! 2313: 0xE00BDBAD, /* 95 */ ! 2314: 0xAE99A8D3, /* 96 */ ! 2315: 0xCC03F6E2, /* 97 */ ! 2316: 0xFD0ED807, /* 98 */ ! 2317: 0xE508AE3, /* 99 */ ! 2318: 0xB74182AB, /* 100 */ ! 2319: 0x4349245D, /* 101 */ ! 2320: 0xD120A465, /* 102 */ ! 2321: 0xB246A641, /* 103 */ ! 2322: 0xAF3B7AB0, /* 104 */ ! 2323: 0x2A6488BB, /* 105 */ ! 2324: 0x4B3A0D1F, /* 106 */ ! 2325: 0xE7C7E58C, /* 107 */ ! 2326: 0x3FAFF2EB, /* 108 */ ! 2327: 0x90445FFD, /* 109 */ ! 2328: 0xCF38C393, /* 110 */ ! 2329: 0x995D07E7, /* 111 */ ! 2330: 0xF24F1B36, /* 112 */ ! 2331: 0x356F6891, /* 113 */ ! 2332: 0x6D6EBCBE, /* 114 */ ! 2333: 0x8DA9E262, /* 115 */ ! 2334: 0x50FD520E, /* 116 */ ! 2335: 0x5BCA9E1E, /* 117 */ ! 2336: 0x37472CF3, /* 118 */ ! 2337: 0x69075057, /* 119 */ ! 2338: 0x7EC5FDED, /* 120 */ ! 2339: 0xCAB892A, /* 121 */ ! 2340: 0xFB2412BA, /* 122 */ ! 2341: 0x1728DEBF, /* 123 */ ! 2342: 0xA000A988, /* 124 */ ! 2343: 0xD843CE79, /* 125 */ ! 2344: 0x42E20DD, /* 126 */ ! 2345: 0x4FE8F853, /* 127 */ ! 2346: 0x56659C3C, /* 128 */ ! 2347: 0x2739D119, /* 129 */ ! 2348: 0xA78A6120, /* 130 */ ! 2349: 0x80960375, /* 131 */ ! 2350: 0x70420611, /* 132 */ ! 2351: 0x85E09F78, /* 133 */ ! 2352: 0xABD17E96, /* 134 */ ! 2353: 0x1B513EAF, /* 135 */ ! 2354: 0x1E01EB63, /* 136 */ ! 2355: 0x26AD2133, /* 137 */ ! 2356: 0xA890C094, /* 138 */ ! 2357: 0x7613CF60, /* 139 */ ! 2358: 0x817E781B, /* 140 */ ! 2359: 0xA39113D7, /* 141 */ ! 2360: 0xE957FA58, /* 142 */ ! 2361: 0x4131B99E, /* 143 */ ! 2362: 0x28B1EFDA, /* 144 */ ! 2363: 0x66ACFBA7, /* 145 */ ! 2364: 0xFF68944A, /* 146 */ ! 2365: 0x77A44FD1, /* 147 */ ! 2366: 0x7F331522, /* 148 */ ! 2367: 0x59FFB3FA, /* 149 */ ! 2368: 0xA6DF935B, /* 150 */ ! 2369: 0xFA12D9DF, /* 151 */ ! 2370: 0xC6BF6F3F, /* 152 */ ! 2371: 0x89520CF6, /* 153 */ ! 2372: 0x659EDD6A, /* 154 */ ! 2373: 0x544DA739, /* 155 */ ! 2374: 0x8B052538, /* 156 */ ! 2375: 0x7C30EA21, /* 157 */ ! 2376: 0xC2345525, /* 158 */ ! 2377: 0x15927FB2, /* 159 */ ! 2378: 0x144A436B, /* 160 */ ! 2379: 0xBA107B8B, /* 161 */ ! 2380: 0x1219AC97, /* 162 */ ! 2381: 0x6730432, /* 163 */ ! 2382: 0x31831AB3, /* 164 */ ! 2383: 0xC55A5C24, /* 165 */ ! 2384: 0xAA0FCD3E, /* 166 */ ! 2385: 0xE5606BE8, /* 167 */ ! 2386: 0x5C88F19B, /* 168 */ ! 2387: 0x4C0841EE, /* 169 */ ! 2388: 0x1FE37267, /* 170 */ ! 2389: 0x11F9C4F4, /* 171 */ ! 2390: 0x9F1B9DAE, /* 172 */ ! 2391: 0x864E76D0, /* 173 */ ! 2392: 0xE637C731, /* 174 */ ! 2393: 0xD97D23A6, /* 175 */ ! 2394: 0x32F53D5C, /* 176 */ ! 2395: 0xB8161980, /* 177 */ ! 2396: 0x93FA0F84, /* 178 */ ! 2397: 0xCAEF0870, /* 179 */ ! 2398: 0x8874487E, /* 180 */ ! 2399: 0x98F2CC73, /* 181 */ ! 2400: 0x645FB5C6, /* 182 */ ! 2401: 0xCD853659, /* 183 */ ! 2402: 0x2062470D, /* 184 */ ! 2403: 0x16EDE8E9, /* 185 */ ! 2404: 0x6B06DAB5, /* 186 */ ! 2405: 0x78B43900, /* 187 */ ! 2406: 0xFC95B786, /* 188 */ ! 2407: 0x5D8E7DE1, /* 189 */ ! 2408: 0x465B5954, /* 190 */ ! 2409: 0xFE7BA014, /* 191 */ ! 2410: 0xF7D23F7B, /* 192 */ ! 2411: 0x92BC8B18, /* 193 */ ! 2412: 0x3593592, /* 194 */ ! 2413: 0x55CEF4F7, /* 195 */ ! 2414: 0x74B27317, /* 196 */ ! 2415: 0x79DE1FC2, /* 197 */ ! 2416: 0xC8A0BFBD, /* 198 */ ! 2417: 0x229398CC, /* 199 */ ! 2418: 0x62A602CE, /* 200 */ ! 2419: 0xBCB94661, /* 201 */ ! 2420: 0x5336D206, /* 202 */ ! 2421: 0xD2A375FE, /* 203 */ ! 2422: 0x6A6AB483, /* 204 */ ! 2423: 0x4702A5A4, /* 205 */ ! 2424: 0xA2E9D73D, /* 206 */ ! 2425: 0x23A2E0F1, /* 207 */ ! 2426: 0x9189140A, /* 208 */ ! 2427: 0x581D18DC, /* 209 */ ! 2428: 0xB39A922B, /* 210 */ ! 2429: 0x82356212, /* 211 */ ! 2430: 0xD5F432A9, /* 212 */ ! 2431: 0xD356C2A3, /* 213 */ ! 2432: 0x5F765B4D, /* 214 */ ! 2433: 0x450AFCC8, /* 215 */ ! 2434: 0x4415E137, /* 216 */ ! 2435: 0xE8ECDFBC, /* 217 */ ! 2436: 0xED0DE3EA, /* 218 */ ! 2437: 0x60D42B13, /* 219 */ ! 2438: 0xF13DF971, /* 220 */ ! 2439: 0x71FC5DA2, /* 221 */ ! 2440: 0xC1455340, /* 222 */ ! 2441: 0xF087742F, /* 223 */ ! 2442: 0xF55E5751, /* 224 */ ! 2443: 0x67B3C1F8, /* 225 */ ! 2444: 0xAC6B8774, /* 226 */ ! 2445: 0x7DCFAAAC, /* 227 */ ! 2446: 0x95983BC0, /* 228 */ ! 2447: 0x489BB0B1, /* 229 */ ! 2448: 0x2C184223, /* 230 */ ! 2449: 0x964B6726, /* 231 */ ! 2450: 0x2BD3271C, /* 232 */ ! 2451: 0x72266472, /* 233 */ ! 2452: 0xDED64530, /* 234 */ ! 2453: 0xA2AA343, /* 235 */ ! 2454: 0xD4F716A0, /* 236 */ ! 2455: 0xB4DAD6D9, /* 237 */ ! 2456: 0x2184345E, /* 238 */ ! 2457: 0x512C990C, /* 239 */ ! 2458: 0x29D92D08, /* 240 */ ! 2459: 0x2EBE709A, /* 241 */ ! 2460: 0x1144C69, /* 242 */ ! 2461: 0x34584B9D, /* 243 */ ! 2462: 0xE4634ED6, /* 244 */ ! 2463: 0xECC963CF, /* 245 */ ! 2464: 0x3C6984AA, /* 246 */ ! 2465: 0x4ED056EF, /* 247 */ ! 2466: 0x9CA56976, /* 248 */ ! 2467: 0x8F3E80D4, /* 249 */ ! 2468: 0xB5BAE7C5, /* 250 */ ! 2469: 0x30B5CAF5, /* 251 */ ! 2470: 0x63F33A64, /* 252 */ ! 2471: 0xA9E4BBDE, /* 253 */ ! 2472: 0xF6B82298, /* 254 */ ! 2473: 0x4D673C1D}, /* 255 */ ! 2474: ! 2475: { ! 2476: /* Start of S Box 5 */ ! 2477: ! 2478: 0x4B4F1121, /* 0 */ ! 2479: 0xBA183081, /* 1 */ ! 2480: 0xC784F41F, /* 2 */ ! 2481: 0xD17D0BAC, /* 3 */ ! 2482: 0x83D2267, /* 4 */ ! 2483: 0x37B1361E, /* 5 */ ! 2484: 0x3581AD05, /* 6 */ ! 2485: 0xFDA2F6BC, /* 7 */ ! 2486: 0x1E892CDD, /* 8 */ ! 2487: 0xB56D3C3A, /* 9 */ ! 2488: 0x32140E46, /* 10 */ ! 2489: 0x138D8AAB, /* 11 */ ! 2490: 0xE14773D4, /* 12 */ ! 2491: 0x5B0E71DF, /* 13 */ ! 2492: 0x5D1FE055, /* 14 */ ! 2493: 0x3FB991D3, /* 15 */ ! 2494: 0xF1F46C71, /* 16 */ ! 2495: 0xA325988C, /* 17 */ ! 2496: 0x10F66E80, /* 18 */ ! 2497: 0xB1006348, /* 19 */ ! 2498: 0x726A9F60, /* 20 */ ! 2499: 0x3B67F8BA, /* 21 */ ! 2500: 0x4E114EF4, /* 22 */ ! 2501: 0x5C52115, /* 23 */ ! 2502: 0x4C5CA11C, /* 24 */ ! 2503: 0x99E1EFD8, /* 25 */ ! 2504: 0x471B83B3, /* 26 */ ! 2505: 0xCBF7E524, /* 27 */ ! 2506: 0x43AD82F5, /* 28 */ ! 2507: 0x690CA93B, /* 29 */ ! 2508: 0xFAA61BB2, /* 30 */ ! 2509: 0x12A832B5, /* 31 */ ! 2510: 0xB734F943, /* 32 */ ! 2511: 0xBD22AEA7, /* 33 */ ! 2512: 0x88FEC626, /* 34 */ ! 2513: 0x5E80C3E7, /* 35 */ ! 2514: 0xBE3EAF5E, /* 36 */ ! 2515: 0x44617652, /* 37 */ ! 2516: 0xA5724475, /* 38 */ ! 2517: 0xBB3B9695, /* 39 */ ! 2518: 0x7F3FEE8F, /* 40 */ ! 2519: 0x964E7DEB, /* 41 */ ! 2520: 0x518C052D, /* 42 */ ! 2521: 0x2A0BBC2B, /* 43 */ ! 2522: 0xC2175F5C, /* 44 */ ! 2523: 0x9A7B3889, /* 45 */ ! 2524: 0xA70D8D0C, /* 46 */ ! 2525: 0xEACCDD29, /* 47 */ ! 2526: 0xCCCD6658, /* 48 */ ! 2527: 0x34BB25E6, /* 49 */ ! 2528: 0xB8391090, /* 50 */ ! 2529: 0xF651356F, /* 51 */ ! 2530: 0x52987C9E, /* 52 */ ! 2531: 0xC16C1CD, /* 53 */ ! 2532: 0x8E372D3C, /* 54 */ ! 2533: 0x2FC6EBBD, /* 55 */ ! 2534: 0x6E5DA3E3, /* 56 */ ! 2535: 0xB0E27239, /* 57 */ ! 2536: 0x5F685738, /* 58 */ ! 2537: 0x45411786, /* 59 */ ! 2538: 0x67F65F8, /* 60 */ ! 2539: 0x61778B40, /* 61 */ ! 2540: 0x81AB2E65, /* 62 */ ! 2541: 0x14C8F0F9, /* 63 */ ! 2542: 0xA6B7B4CE, /* 64 */ ! 2543: 0x4036EAEC, /* 65 */ ! 2544: 0xBF62B00A, /* 66 */ ! 2545: 0xECFD5E02, /* 67 */ ! 2546: 0x45449A6, /* 68 */ ! 2547: 0xB20AFD28, /* 69 */ ! 2548: 0x2166D273, /* 70 */ ! 2549: 0xD13A863, /* 71 */ ! 2550: 0x89508756, /* 72 */ ! 2551: 0xD51A7530, /* 73 */ ! 2552: 0x2D653F7A, /* 74 */ ! 2553: 0x3CDBDBC3, /* 75 */ ! 2554: 0x80C9DF4F, /* 76 */ ! 2555: 0x3D5812D9, /* 77 */ ! 2556: 0x53FBB1F3, /* 78 */ ! 2557: 0xC0F185C0, /* 79 */ ! 2558: 0x7A3C3D7E, /* 80 */ ! 2559: 0x68646410, /* 81 */ ! 2560: 0x857607A0, /* 82 */ ! 2561: 0x1D12622E, /* 83 */ ! 2562: 0x97F33466, /* 84 */ ! 2563: 0xDB4C9917, /* 85 */ ! 2564: 0x6469607C, /* 86 */ ! 2565: 0x566E043D, /* 87 */ ! 2566: 0x79EF1EDB, /* 88 */ ! 2567: 0x2C05898D, /* 89 */ ! 2568: 0xC9578E25, /* 90 */ ! 2569: 0xCD380101, /* 91 */ ! 2570: 0x46E04377, /* 92 */ ! 2571: 0x7D1CC7A9, /* 93 */ ! 2572: 0x6552B837, /* 94 */ ! 2573: 0x20192608, /* 95 */ ! 2574: 0xB97500C5, /* 96 */ ! 2575: 0xED296B44, /* 97 */ ! 2576: 0x368648B4, /* 98 */ ! 2577: 0x62995CD5, /* 99 */ ! 2578: 0x82731400, /* 100 */ ! 2579: 0xF9AEBD8B, /* 101 */ ! 2580: 0x3844C0C7, /* 102 */ ! 2581: 0x7C2DE794, /* 103 */ ! 2582: 0x33A1A770, /* 104 */ ! 2583: 0x8AE528C2, /* 105 */ ! 2584: 0x5A2BE812, /* 106 */ ! 2585: 0x1F8F4A07, /* 107 */ ! 2586: 0x2B5ED7CA, /* 108 */ ! 2587: 0x937EB564, /* 109 */ ! 2588: 0x6FDA7E11, /* 110 */ ! 2589: 0xE49B5D6C, /* 111 */ ! 2590: 0xB4B3244E, /* 112 */ ! 2591: 0x18AA53A4, /* 113 */ ! 2592: 0x3A061334, /* 114 */ ! 2593: 0x4D6067A3, /* 115 */ ! 2594: 0x83BA5868, /* 116 */ ! 2595: 0x9BDF4DFE, /* 117 */ ! 2596: 0x7449F261, /* 118 */ ! 2597: 0x709F8450, /* 119 */ ! 2598: 0xCAD133CB, /* 120 */ ! 2599: 0xDE941C3F, /* 121 */ ! 2600: 0xF52AE484, /* 122 */ ! 2601: 0x781D77ED, /* 123 */ ! 2602: 0x7E4395F0, /* 124 */ ! 2603: 0xAE103B59, /* 125 */ ! 2604: 0x922331BB, /* 126 */ ! 2605: 0x42CE50C8, /* 127 */ ! 2606: 0xE6F08153, /* 128 */ ! 2607: 0xE7D941D0, /* 129 */ ! 2608: 0x5028ED6B, /* 130 */ ! 2609: 0xB3D2C49B, /* 131 */ ! 2610: 0xAD4D9C3E, /* 132 */ ! 2611: 0xD201FB6E, /* 133 */ ! 2612: 0xA45BD5BE, /* 134 */ ! 2613: 0xFFCB7F4B, /* 135 */ ! 2614: 0x579D7806, /* 136 */ ! 2615: 0xF821BB5B, /* 137 */ ! 2616: 0x59D592AD, /* 138 */ ! 2617: 0xD0BE0C31, /* 139 */ ! 2618: 0xD4E3B676, /* 140 */ ! 2619: 0x107165A, /* 141 */ ! 2620: 0xFE939D2, /* 142 */ ! 2621: 0x49BCAAFD, /* 143 */ ! 2622: 0x55FFCFE5, /* 144 */ ! 2623: 0x2EC1F783, /* 145 */ ! 2624: 0xF39A09A5, /* 146 */ ! 2625: 0x3EB42772, /* 147 */ ! 2626: 0x19B55A5D, /* 148 */ ! 2627: 0x24A0679, /* 149 */ ! 2628: 0x8C83B3F7, /* 150 */ ! 2629: 0x8642BA1D, /* 151 */ ! 2630: 0xACACD9EA, /* 152 */ ! 2631: 0x87D352C4, /* 153 */ ! 2632: 0x60931F45, /* 154 */ ! 2633: 0xA05F97D7, /* 155 */ ! 2634: 0x1CECD42C, /* 156 */ ! 2635: 0xE2FCC87B, /* 157 */ ! 2636: 0xB60F94E2, /* 158 */ ! 2637: 0x67A34B0B, /* 159 */ ! 2638: 0xFCDD40C9, /* 160 */ ! 2639: 0xB150A27, /* 161 */ ! 2640: 0xD3EE9E04, /* 162 */ ! 2641: 0x582E29E9, /* 163 */ ! 2642: 0x4AC22B41, /* 164 */ ! 2643: 0x6AC4E1B8, /* 165 */ ! 2644: 0xBCCAA51A, /* 166 */ ! 2645: 0x237AF30E, /* 167 */ ! 2646: 0xEBC3B709, /* 168 */ ! 2647: 0xC4A59D19, /* 169 */ ! 2648: 0x284BC98A, /* 170 */ ! 2649: 0xE9D41A93, /* 171 */ ! 2650: 0x6BFA2018, /* 172 */ ! 2651: 0x73B2D651, /* 173 */ ! 2652: 0x11F9A2FA, /* 174 */ ! 2653: 0xCE09BFF1, /* 175 */ ! 2654: 0x41A470AA, /* 176 */ ! 2655: 0x25888F22, /* 177 */ ! 2656: 0x77E754E8, /* 178 */ ! 2657: 0xF7330D8E, /* 179 */ ! 2658: 0x158EAB16, /* 180 */ ! 2659: 0xC5D68842, /* 181 */ ! 2660: 0xC685A6F6, /* 182 */ ! 2661: 0xE5B82FDE, /* 183 */ ! 2662: 0x9EA3A96, /* 184 */ ! 2663: 0x6DDE1536, /* 185 */ ! 2664: 0x4FA919DA, /* 186 */ ! 2665: 0x26C0BE9F, /* 187 */ ! 2666: 0x9EED6F69, /* 188 */ ! 2667: 0xF05555F2, /* 189 */ ! 2668: 0xE06FC285, /* 190 */ ! 2669: 0x9CD76D23, /* 191 */ ! 2670: 0xAF452A92, /* 192 */ ! 2671: 0xEFC74CB7, /* 193 */ ! 2672: 0x9D6B4732, /* 194 */ ! 2673: 0x8BE408EE, /* 195 */ ! 2674: 0x22401D0D, /* 196 */ ! 2675: 0xEE6C459D, /* 197 */ ! 2676: 0x7587CB82, /* 198 */ ! 2677: 0xE8746862, /* 199 */ ! 2678: 0x5CBDDE87, /* 200 */ ! 2679: 0x98794278, /* 201 */ ! 2680: 0x31AFB94D, /* 202 */ ! 2681: 0xC11E0F2F, /* 203 */ ! 2682: 0x30E8FC2A, /* 204 */ ! 2683: 0xCF3261EF, /* 205 */ ! 2684: 0x1A3023E1, /* 206 */ ! 2685: 0xAA2F86CF, /* 207 */ ! 2686: 0xF202E24A, /* 208 */ ! 2687: 0x8D08DCFF, /* 209 */ ! 2688: 0x764837C6, /* 210 */ ! 2689: 0xA26374CC, /* 211 */ ! 2690: 0x9F7C3E88, /* 212 */ ! 2691: 0x949CC57D, /* 213 */ ! 2692: 0xDD26A07F, /* 214 */ ! 2693: 0xC39EFAB0, /* 215 */ ! 2694: 0xC8F879A1, /* 216 */ ! 2695: 0xDCE67BB9, /* 217 */ ! 2696: 0xF4B0A435, /* 218 */ ! 2697: 0x912C9AE0, /* 219 */ ! 2698: 0xD85603E4, /* 220 */ ! 2699: 0x953A9BBF, /* 221 */ ! 2700: 0xFB8290D6, /* 222 */ ! 2701: 0xAEBCD5F, /* 223 */ ! 2702: 0x16206A9A, /* 224 */ ! 2703: 0x6C787A14, /* 225 */ ! 2704: 0xD9A0F16A, /* 226 */ ! 2705: 0x29BF4F74, /* 227 */ ! 2706: 0x8F8BCE91, /* 228 */ ! 2707: 0xE5A9354, /* 229 */ ! 2708: 0xAB038CB1, /* 230 */ ! 2709: 0x1B8AD11B, /* 231 */ ! 2710: 0xE327FF49, /* 232 */ ! 2711: 0x53DA20, /* 233 */ ! 2712: 0x90CF51DC, /* 234 */ ! 2713: 0xDA92FE6D, /* 235 */ ! 2714: 0x390CA47, /* 236 */ ! 2715: 0xA8958097, /* 237 */ ! 2716: 0xA9DC5BAF, /* 238 */ ! 2717: 0x3931E3C1, /* 239 */ ! 2718: 0x840446B6, /* 240 */ ! 2719: 0x63D069FB, /* 241 */ ! 2720: 0xD7460299, /* 242 */ ! 2721: 0x7124ECD1, /* 243 */ ! 2722: 0x791E613, /* 244 */ ! 2723: 0x485918FC, /* 245 */ ! 2724: 0xD635D04C, /* 246 */ ! 2725: 0xDF96AC33, /* 247 */ ! 2726: 0x66F2D303, /* 248 */ ! 2727: 0x247056AE, /* 249 */ ! 2728: 0xA1A7B2A8, /* 250 */ ! 2729: 0x27D8CC9C, /* 251 */ ! 2730: 0x17B6E998, /* 252 */ ! 2731: 0x7BF5590F, /* 253 */ ! 2732: 0xFE97F557, /* 254 */ ! 2733: 0x5471D8A2}, /* 255 */ ! 2734: ! 2735: { ! 2736: /* Start of S Box 6 */ ! 2737: ! 2738: 0x83A327A1, /* 0 */ ! 2739: 0x9F379F51, /* 1 */ ! 2740: 0x40A7D007, /* 2 */ ! 2741: 0x11307423, /* 3 */ ! 2742: 0x224587C1, /* 4 */ ! 2743: 0xAC27D63B, /* 5 */ ! 2744: 0x3B7E64EA, /* 6 */ ! 2745: 0x2E1CBFA6, /* 7 */ ! 2746: 0x9996000, /* 8 */ ! 2747: 0x3BC0E2C, /* 9 */ ! 2748: 0xD4C4478A, /* 10 */ ! 2749: 0x4542E0AB, /* 11 */ ! 2750: 0xFEDA26D4, /* 12 */ ! 2751: 0xC1D10FCB, /* 13 */ ! 2752: 0x8252F596, /* 14 */ ! 2753: 0x4494EB5C, /* 15 */ ! 2754: 0xA362F314, /* 16 */ ! 2755: 0xF5BA81FD, /* 17 */ ! 2756: 0x75C3A376, /* 18 */ ! 2757: 0x4CA214CA, /* 19 */ ! 2758: 0xE164DEDD, /* 20 */ ! 2759: 0x5088FA97, /* 21 */ ! 2760: 0x4B0930E0, /* 22 */ ! 2761: 0x2FCFB7E8, /* 23 */ ! 2762: 0x33A6F4B2, /* 24 */ ! 2763: 0xC7E94211, /* 25 */ ! 2764: 0x2D66C774, /* 26 */ ! 2765: 0x43BE8BAE, /* 27 */ ! 2766: 0xC663D445, /* 28 */ ! 2767: 0x908EB130, /* 29 */ ! 2768: 0xF4E3BE15, /* 30 */ ! 2769: 0x63B9D566, /* 31 */ ! 2770: 0x529396B5, /* 32 */ ! 2771: 0x1E1BE743, /* 33 */ ! 2772: 0x4D5FF63F, /* 34 */ ! 2773: 0x985E4A83, /* 35 */ ! 2774: 0x71AB9DF7, /* 36 */ ! 2775: 0xC516C6F5, /* 37 */ ! 2776: 0x85C19AB4, /* 38 */ ! 2777: 0x1F4DAEE4, /* 39 */ ! 2778: 0xF2973431, /* 40 */ ! 2779: 0xB713DC5E, /* 41 */ ! 2780: 0x3F2E159A, /* 42 */ ! 2781: 0xC824DA16, /* 43 */ ! 2782: 0x6BF376A, /* 44 */ ! 2783: 0xB2FE23EC, /* 45 */ ! 2784: 0xE39B1C22, /* 46 */ ! 2785: 0xF1EECB5F, /* 47 */ ! 2786: 0x8E82D52, /* 48 */ ! 2787: 0x565686C2, /* 49 */ ! 2788: 0xAB0AEA93, /* 50 */ ! 2789: 0xFD47219F, /* 51 */ ! 2790: 0xEBDBABD7, /* 52 */ ! 2791: 0x2404A185, /* 53 */ ! 2792: 0x8C7312B9, /* 54 */ ! 2793: 0xA8F2D828, /* 55 */ ! 2794: 0xC8902DA, /* 56 */ ! 2795: 0x65B42B63, /* 57 */ ! 2796: 0xC0BBEF62, /* 58 */ ! 2797: 0x4E3E4CEF, /* 59 */ ! 2798: 0x788F8018, /* 60 */ ! 2799: 0xEE1EBAB7, /* 61 */ ! 2800: 0x93928F9D, /* 62 */ ! 2801: 0x683D2903, /* 63 */ ! 2802: 0xD3B60689, /* 64 */ ! 2803: 0xAFCB0DDC, /* 65 */ ! 2804: 0x88A4C47A, /* 66 */ ! 2805: 0xF6DD9C3D, /* 67 */ ! 2806: 0x7EA5FCA0, /* 68 */ ! 2807: 0x8A6D7244, /* 69 */ ! 2808: 0xBE11F120, /* 70 */ ! 2809: 0x4FF91B8, /* 71 */ ! 2810: 0x8D2DC8C0, /* 72 */ ! 2811: 0x27F97FDB, /* 73 */ ! 2812: 0x7F9E1F47, /* 74 */ ! 2813: 0x1734F0C7, /* 75 */ ! 2814: 0x26F3ED8E, /* 76 */ ! 2815: 0xDF8F2BF, /* 77 */ ! 2816: 0xB0833D9E, /* 78 */ ! 2817: 0xE420A4E5, /* 79 */ ! 2818: 0xA423CAE6, /* 80 */ ! 2819: 0x95616772, /* 81 */ ! 2820: 0x9AE6C049, /* 82 */ ! 2821: 0x75941F2, /* 83 */ ! 2822: 0xD8E12812, /* 84 */ ! 2823: 0xF6F4F, /* 85 */ ! 2824: 0x3C0D6B05, /* 86 */ ! 2825: 0x6CEF921C, /* 87 */ ! 2826: 0xB82BC264, /* 88 */ ! 2827: 0x396CB008, /* 89 */ ! 2828: 0x5D608A6F, /* 90 */ ! 2829: 0x6D7782C8, /* 91 */ ! 2830: 0x186550AA, /* 92 */ ! 2831: 0x6B6FEC09, /* 93 */ ! 2832: 0x28E70B13, /* 94 */ ! 2833: 0x57CE5688, /* 95 */ ! 2834: 0xECD3AF84, /* 96 */ ! 2835: 0x23335A95, /* 97 */ ! 2836: 0x91F40CD2, /* 98 */ ! 2837: 0x7B6A3B26, /* 99 */ ! 2838: 0xBD32B3B6, /* 100 */ ! 2839: 0x3754A6FB, /* 101 */ ! 2840: 0x8ED088F0, /* 102 */ ! 2841: 0xF867E87C, /* 103 */ ! 2842: 0x20851746, /* 104 */ ! 2843: 0x6410F9C6, /* 105 */ ! 2844: 0x35380442, /* 106 */ ! 2845: 0xC2CA10A7, /* 107 */ ! 2846: 0x1ADEA27F, /* 108 */ ! 2847: 0x76BDDD79, /* 109 */ ! 2848: 0x92742CF4, /* 110 */ ! 2849: 0xE98F7EE, /* 111 */ ! 2850: 0x164E931D, /* 112 */ ! 2851: 0xB9C835B3, /* 113 */ ! 2852: 0x69060A99, /* 114 */ ! 2853: 0xB44C531E, /* 115 */ ! 2854: 0xFA7B66FE, /* 116 */ ! 2855: 0xC98A5B53, /* 117 */ ! 2856: 0x7D95AAE9, /* 118 */ ! 2857: 0x302F467B, /* 119 */ ! 2858: 0x74B811DE, /* 120 */ ! 2859: 0xF3866ABD, /* 121 */ ! 2860: 0xB5B3D32D, /* 122 */ ! 2861: 0xFC3157A4, /* 123 */ ! 2862: 0xD251FE19, /* 124 */ ! 2863: 0xB5D8EAC, /* 125 */ ! 2864: 0xDA71FFD5, /* 126 */ ! 2865: 0x47EA05A3, /* 127 */ ! 2866: 0x5C6A9E1, /* 128 */ ! 2867: 0xCA0EE958, /* 129 */ ! 2868: 0x9939034D, /* 130 */ ! 2869: 0x25DC5EDF, /* 131 */ ! 2870: 0x79083CB1, /* 132 */ ! 2871: 0x86768450, /* 133 */ ! 2872: 0xCF757D6D, /* 134 */ ! 2873: 0x5972B6BC, /* 135 */ ! 2874: 0xA78D59C9, /* 136 */ ! 2875: 0xC4AD8D41, /* 137 */ ! 2876: 0x2A362AD3, /* 138 */ ! 2877: 0xD1179991, /* 139 */ ! 2878: 0x601407FF, /* 140 */ ! 2879: 0xDCF50917, /* 141 */ ! 2880: 0x587069D0, /* 142 */ ! 2881: 0xE0821ED6, /* 143 */ ! 2882: 0xDBB59427, /* 144 */ ! 2883: 0x73911A4B, /* 145 */ ! 2884: 0x7C904FC3, /* 146 */ ! 2885: 0x844AFB92, /* 147 */ ! 2886: 0x6F8C955D, /* 148 */ ! 2887: 0xE8C0C5BB, /* 149 */ ! 2888: 0xB67AB987, /* 150 */ ! 2889: 0xA529D96C, /* 151 */ ! 2890: 0xF91F7181, /* 152 */ ! 2891: 0x618B1B06, /* 153 */ ! 2892: 0xE718BB0C, /* 154 */ ! 2893: 0x8BD7615B, /* 155 */ ! 2894: 0xD5A93A59, /* 156 */ ! 2895: 0x54AEF81B, /* 157 */ ! 2896: 0x772136E3, /* 158 */ ! 2897: 0xCE44FD9C, /* 159 */ ! 2898: 0x10CDA57E, /* 160 */ ! 2899: 0x87D66E0B, /* 161 */ ! 2900: 0x3D798967, /* 162 */ ! 2901: 0x1B2C1804, /* 163 */ ! 2902: 0x3EDFBD68, /* 164 */ ! 2903: 0x15F6E62B, /* 165 */ ! 2904: 0xEF68B854, /* 166 */ ! 2905: 0x3896DB35, /* 167 */ ! 2906: 0x12B7B5E2, /* 168 */ ! 2907: 0xCB489029, /* 169 */ ! 2908: 0x9E4F98A5, /* 170 */ ! 2909: 0x62EB77A8, /* 171 */ ! 2910: 0x217C24A2, /* 172 */ ! 2911: 0x964152F6, /* 173 */ ! 2912: 0x49B2080A, /* 174 */ ! 2913: 0x53D23EE7, /* 175 */ ! 2914: 0x48FB6D69, /* 176 */ ! 2915: 0x1903D190, /* 177 */ ! 2916: 0x9449E494, /* 178 */ ! 2917: 0xBF6E7886, /* 179 */ ! 2918: 0xFB356CFA, /* 180 */ ! 2919: 0x3A261365, /* 181 */ ! 2920: 0x424BC1EB, /* 182 */ ! 2921: 0xA1192570, /* 183 */ ! 2922: 0x19CA782, /* 184 */ ! 2923: 0x9D3F7E0E, /* 185 */ ! 2924: 0x9C127575, /* 186 */ ! 2925: 0xEDF02039, /* 187 */ ! 2926: 0xAD57BCCE, /* 188 */ ! 2927: 0x5C153277, /* 189 */ ! 2928: 0x81A84540, /* 190 */ ! 2929: 0xBCAA7356, /* 191 */ ! 2930: 0xCCD59B60, /* 192 */ ! 2931: 0xA62A629B, /* 193 */ ! 2932: 0xA25CCD10, /* 194 */ ! 2933: 0x2B5B65CF, /* 195 */ ! 2934: 0x1C535832, /* 196 */ ! 2935: 0x55FD4E3A, /* 197 */ ! 2936: 0x31D9790D, /* 198 */ ! 2937: 0xF06BC37D, /* 199 */ ! 2938: 0x4AFC1D71, /* 200 */ ! 2939: 0xAEED5533, /* 201 */ ! 2940: 0xBA461634, /* 202 */ ! 2941: 0xBB694B78, /* 203 */ ! 2942: 0x5F3A5C73, /* 204 */ ! 2943: 0x6A3C764A, /* 205 */ ! 2944: 0x8FB0CCA9, /* 206 */ ! 2945: 0xF725684C, /* 207 */ ! 2946: 0x4FE5382F, /* 208 */ ! 2947: 0x1D0163AF, /* 209 */ ! 2948: 0x5AA07A8F, /* 210 */ ! 2949: 0xE205A8ED, /* 211 */ ! 2950: 0xC30BAD38, /* 212 */ ! 2951: 0xFF22CF1F, /* 213 */ ! 2952: 0x72432E2E, /* 214 */ ! 2953: 0x32C2518B, /* 215 */ ! 2954: 0x3487CE4E, /* 216 */ ! 2955: 0x7AE0AC02, /* 217 */ ! 2956: 0x709FA098, /* 218 */ ! 2957: 0xA3B395A, /* 219 */ ! 2958: 0x5B4043F8, /* 220 */ ! 2959: 0xA9E48C36, /* 221 */ ! 2960: 0x149A8521, /* 222 */ ! 2961: 0xD07DEE6B, /* 223 */ ! 2962: 0x46ACD2F3, /* 224 */ ! 2963: 0x8958DFFC, /* 225 */ ! 2964: 0xB3A1223C, /* 226 */ ! 2965: 0xB11D31C4, /* 227 */ ! 2966: 0xCD7F4D3E, /* 228 */ ! 2967: 0xF28E3AD, /* 229 */ ! 2968: 0xE5B100BE, /* 230 */ ! 2969: 0xAAC54824, /* 231 */ ! 2970: 0xE9C9D7BA, /* 232 */ ! 2971: 0x9BD47001, /* 233 */ ! 2972: 0x80F149B0, /* 234 */ ! 2973: 0x66022F0F, /* 235 */ ! 2974: 0x20C4048, /* 236 */ ! 2975: 0x6EFA192A, /* 237 */ ! 2976: 0x67073F8D, /* 238 */ ! 2977: 0x13EC7BF9, /* 239 */ ! 2978: 0x3655011A, /* 240 */ ! 2979: 0xE6AFE157, /* 241 */ ! 2980: 0xD9845F6E, /* 242 */ ! 2981: 0xDECC4425, /* 243 */ ! 2982: 0x511AE2CC, /* 244 */ ! 2983: 0xDF81B4D8, /* 245 */ ! 2984: 0xD7809E55, /* 246 */ ! 2985: 0xD6D883D9, /* 247 */ ! 2986: 0x2CC7978C, /* 248 */ ! 2987: 0x5E787CC5, /* 249 */ ! 2988: 0xDD0033D1, /* 250 */ ! 2989: 0xA050C937, /* 251 */ ! 2990: 0x97F75DCD, /* 252 */ ! 2991: 0x299DE580, /* 253 */ ! 2992: 0x41E2B261, /* 254 */ ! 2993: 0xEA5A54F1}, /* 255 */ ! 2994: ! 2995: { ! 2996: /* Start of S Box 7 */ ! 2997: ! 2998: 0x7E672590, /* 0 */ ! 2999: 0xBEA513BB, /* 1 */ ! 3000: 0x2C906FE6, /* 2 */ ! 3001: 0x86029C2B, /* 3 */ ! 3002: 0x55DC4F74, /* 4 */ ! 3003: 0x553398E, /* 5 */ ! 3004: 0x63E09647, /* 6 */ ! 3005: 0xCAFD0BAB, /* 7 */ ! 3006: 0x264C37DF, /* 8 */ ! 3007: 0x8272210F, /* 9 */ ! 3008: 0x67AFA669, /* 10 */ ! 3009: 0x12D98A5F, /* 11 */ ! 3010: 0x8CAB23C4, /* 12 */ ! 3011: 0x75C68BD1, /* 13 */ ! 3012: 0xC3370470, /* 14 */ ! 3013: 0x33F37F4E, /* 15 */ ! 3014: 0x283992FF, /* 16 */ ! 3015: 0xE73A3A67, /* 17 */ ! 3016: 0x1032F283, /* 18 */ ! 3017: 0xF5AD9FC2, /* 19 */ ! 3018: 0x963F0C5D, /* 20 */ ! 3019: 0x664FBC45, /* 21 */ ! 3020: 0x202BA41C, /* 22 */ ! 3021: 0xC7C02D80, /* 23 */ ! 3022: 0x54731E84, /* 24 */ ! 3023: 0x8A1085F5, /* 25 */ ! 3024: 0x601D80FB, /* 26 */ ! 3025: 0x2F968E55, /* 27 */ ! 3026: 0x35E96812, /* 28 */ ! 3027: 0xE45A8F78, /* 29 */ ! 3028: 0xBD7DE662, /* 30 */ ! 3029: 0x3B6E6EAD, /* 31 */ ! 3030: 0x8097C5EF, /* 32 */ ! 3031: 0x70B6781, /* 33 */ ! 3032: 0xB1E508F3, /* 34 */ ! 3033: 0x24E4FAE3, /* 35 */ ! 3034: 0xB81A7805, /* 36 */ ! 3035: 0xEC0FC918, /* 37 */ ! 3036: 0x43C8774B, /* 38 */ ! 3037: 0x9B2512A9, /* 39 */ ! 3038: 0x2B05AD04, /* 40 */ ! 3039: 0x32C2536F, /* 41 */ ! 3040: 0xEDF236E0, /* 42 */ ! 3041: 0x8BC4B0CF, /* 43 */ ! 3042: 0xBACEB837, /* 44 */ ! 3043: 0x4535B289, /* 45 */ ! 3044: 0xD0E94C3, /* 46 */ ! 3045: 0xA5A371D0, /* 47 */ ! 3046: 0xAD695A58, /* 48 */ ! 3047: 0x39E3437D, /* 49 */ ! 3048: 0x9186BFFC, /* 50 */ ! 3049: 0x21038C3B, /* 51 */ ! 3050: 0xAA9DFF9, /* 52 */ ! 3051: 0x5D1F06CE, /* 53 */ ! 3052: 0x62DEF8A4, /* 54 */ ! 3053: 0xF740A2B4, /* 55 */ ! 3054: 0xA2575868, /* 56 */ ! 3055: 0x682683C1, /* 57 */ ! 3056: 0xDBB30FAC, /* 58 */ ! 3057: 0x61FE1928, /* 59 */ ! 3058: 0x468A6511, /* 60 */ ! 3059: 0xC61CD5F4, /* 61 */ ! 3060: 0xE54D9800, /* 62 */ ! 3061: 0x6B98D7F7, /* 63 */ ! 3062: 0x8418B6A5, /* 64 */ ! 3063: 0x5F09A5D2, /* 65 */ ! 3064: 0x90B4E80B, /* 66 */ ! 3065: 0x49B2C852, /* 67 */ ! 3066: 0x69F11C77, /* 68 */ ! 3067: 0x17412B7E, /* 69 */ ! 3068: 0x7F6FC0ED, /* 70 */ ! 3069: 0x56838DCC, /* 71 */ ! 3070: 0x6E9546A2, /* 72 */ ! 3071: 0xD0758619, /* 73 */ ! 3072: 0x87B9B9A, /* 74 */ ! 3073: 0xD231A01D, /* 75 */ ! 3074: 0xAF46D415, /* 76 */ ! 3075: 0x97060FD, /* 77 */ ! 3076: 0xD920F657, /* 78 */ ! 3077: 0x882D3F9F, /* 79 */ ! 3078: 0x3AE7C3C9, /* 80 */ ! 3079: 0xE8A00D9B, /* 81 */ ! 3080: 0x4FE67EBE, /* 82 */ ! 3081: 0x2EF80EB2, /* 83 */ ! 3082: 0xC1916B0C, /* 84 */ ! 3083: 0xF4DFFEA0, /* 85 */ ! 3084: 0xB97EB3EB, /* 86 */ ! 3085: 0xFDFF84DD, /* 87 */ ! 3086: 0xFF8B14F1, /* 88 */ ! 3087: 0xE96B0572, /* 89 */ ! 3088: 0xF64B508C, /* 90 */ ! 3089: 0xAE220A6E, /* 91 */ ! 3090: 0x4423AE5A, /* 92 */ ! 3091: 0xC2BECE5E, /* 93 */ ! 3092: 0xDE27567C, /* 94 */ ! 3093: 0xFC935C63, /* 95 */ ! 3094: 0x47075573, /* 96 */ ! 3095: 0xE65B27F0, /* 97 */ ! 3096: 0xE121FD22, /* 98 */ ! 3097: 0xF2668753, /* 99 */ ! 3098: 0x2DEBF5D7, /* 100 */ ! 3099: 0x8347E08D, /* 101 */ ! 3100: 0xAC5EDA03, /* 102 */ ! 3101: 0x2A7CEBE9, /* 103 */ ! 3102: 0x3FE8D92E, /* 104 */ ! 3103: 0x23542FE4, /* 105 */ ! 3104: 0x1FA7BD50, /* 106 */ ! 3105: 0xCF9B4102, /* 107 */ ! 3106: 0x9D0DBA39, /* 108 */ ! 3107: 0x9CB8902A, /* 109 */ ! 3108: 0xA7249D8B, /* 110 */ ! 3109: 0xF6D667A, /* 111 */ ! 3110: 0x5EBFA9EC, /* 112 */ ! 3111: 0x6A594DF2, /* 113 */ ! 3112: 0x79600938, /* 114 */ ! 3113: 0x23B7591, /* 115 */ ! 3114: 0xEA2C79C8, /* 116 */ ! 3115: 0xC99D07EA, /* 117 */ ! 3116: 0x64CB5EE1, /* 118 */ ! 3117: 0x1A9CAB3D, /* 119 */ ! 3118: 0x76DB9527, /* 120 */ ! 3119: 0xC08E012F, /* 121 */ ! 3120: 0x3DFB481A, /* 122 */ ! 3121: 0x872F22E7, /* 123 */ ! 3122: 0x2948D15C, /* 124 */ ! 3123: 0xA4782C79, /* 125 */ ! 3124: 0x6F50D232, /* 126 */ ! 3125: 0x78F0728A, /* 127 */ ! 3126: 0x5A87AAB1, /* 128 */ ! 3127: 0xC4E2C19C, /* 129 */ ! 3128: 0xEE767387, /* 130 */ ! 3129: 0x1B2A1864, /* 131 */ ! 3130: 0x7B8D10D3, /* 132 */ ! 3131: 0xD1713161, /* 133 */ ! 3132: 0xEEAC456, /* 134 */ ! 3133: 0xD8799E06, /* 135 */ ! 3134: 0xB645B548, /* 136 */ ! 3135: 0x4043CB65, /* 137 */ ! 3136: 0xA874FB29, /* 138 */ ! 3137: 0x4B12D030, /* 139 */ ! 3138: 0x7D687413, /* 140 */ ! 3139: 0x18EF9A1F, /* 141 */ ! 3140: 0xD7631D4C, /* 142 */ ! 3141: 0x5829C7DA, /* 143 */ ! 3142: 0xCDFA30FA, /* 144 */ ! 3143: 0xC5084BB0, /* 145 */ ! 3144: 0x92CD20E2, /* 146 */ ! 3145: 0xD4C16940, /* 147 */ ! 3146: 0x3283EC0, /* 148 */ ! 3147: 0xA917813F, /* 149 */ ! 3148: 0x9A587D01, /* 150 */ ! 3149: 0x70041F8F, /* 151 */ ! 3150: 0xDC6AB1DC, /* 152 */ ! 3151: 0xDDAEE3D5, /* 153 */ ! 3152: 0x31829742, /* 154 */ ! 3153: 0x198C022D, /* 155 */ ! 3154: 0x1C9EAFCB, /* 156 */ ! 3155: 0x5BBC6C49, /* 157 */ ! 3156: 0xD3D3293A, /* 158 */ ! 3157: 0x16D50007, /* 159 */ ! 3158: 0x4BB8820, /* 160 */ ! 3159: 0x3C5C2A41, /* 161 */ ! 3160: 0x37EE7AF8, /* 162 */ ! 3161: 0x8EB04025, /* 163 */ ! 3162: 0x9313ECBA, /* 164 */ ! 3163: 0xBFFC4799, /* 165 */ ! 3164: 0x8955A744, /* 166 */ ! 3165: 0xEF85D633, /* 167 */ ! 3166: 0x504499A7, /* 168 */ ! 3167: 0xA6CA6A86, /* 169 */ ! 3168: 0xBB3D3297, /* 170 */ ! 3169: 0xB34A8236, /* 171 */ ! 3170: 0x6DCCBE4F, /* 172 */ ! 3171: 0x6143394, /* 173 */ ! 3172: 0xCE19FC7B, /* 174 */ ! 3173: 0xCCC3C6C6, /* 175 */ ! 3174: 0xE36254AE, /* 176 */ ! 3175: 0x77B7EDA1, /* 177 */ ! 3176: 0xA133DD9E, /* 178 */ ! 3177: 0xEBF9356A, /* 179 */ ! 3178: 0x513CCF88, /* 180 */ ! 3179: 0xE2A1B417, /* 181 */ ! 3180: 0x972EE5BD, /* 182 */ ! 3181: 0x853824CD, /* 183 */ ! 3182: 0x5752F4EE, /* 184 */ ! 3183: 0x6C1142E8, /* 185 */ ! 3184: 0x3EA4F309, /* 186 */ ! 3185: 0xB2B5934A, /* 187 */ ! 3186: 0xDFD628AA, /* 188 */ ! 3187: 0x59ACEA3E, /* 189 */ ! 3188: 0xA01EB92C, /* 190 */ ! 3189: 0x389964BC, /* 191 */ ! 3190: 0xDA305DD4, /* 192 */ ! 3191: 0x19A59B7, /* 193 */ ! 3192: 0x11D2CA93, /* 194 */ ! 3193: 0xFAA6D3B9, /* 195 */ ! 3194: 0x4E772ECA, /* 196 */ ! 3195: 0x72651776, /* 197 */ ! 3196: 0xFB4E5B0E, /* 198 */ ! 3197: 0xA38F91A8, /* 199 */ ! 3198: 0x1D0663B5, /* 200 */ ! 3199: 0x30F4F192, /* 201 */ ! 3200: 0xB50051B6, /* 202 */ ! 3201: 0xB716CCB3, /* 203 */ ! 3202: 0x4ABD1B59, /* 204 */ ! 3203: 0x146C5F26, /* 205 */ ! 3204: 0xF134E2DE, /* 206 */ ! 3205: 0xF67C6C, /* 207 */ ! 3206: 0xB0E1B795, /* 208 */ ! 3207: 0x98AA4EC7, /* 209 */ ! 3208: 0xCC73B34, /* 210 */ ! 3209: 0x654276A3, /* 211 */ ! 3210: 0x8D1BA871, /* 212 */ ! 3211: 0x740A5216, /* 213 */ ! 3212: 0xE0D01A23, /* 214 */ ! 3213: 0x9ED161D6, /* 215 */ ! 3214: 0x9F36A324, /* 216 */ ! 3215: 0x993EBB7F, /* 217 */ ! 3216: 0xFEB9491B, /* 218 */ ! 3217: 0x365DDCDB, /* 219 */ ! 3218: 0x810CFFC5, /* 220 */ ! 3219: 0x71EC0382, /* 221 */ ! 3220: 0x2249E7BF, /* 222 */ ! 3221: 0x48817046, /* 223 */ ! 3222: 0xF3A24A5B, /* 224 */ ! 3223: 0x4288E4D9, /* 225 */ ! 3224: 0xBF5C243, /* 226 */ ! 3225: 0x257FE151, /* 227 */ ! 3226: 0x95B64C0D, /* 228 */ ! 3227: 0x4164F066, /* 229 */ ! 3228: 0xAAF7DB08, /* 230 */ ! 3229: 0x73B1119D, /* 231 */ ! 3230: 0x8F9F7BB8, /* 232 */ ! 3231: 0xD6844596, /* 233 */ ! 3232: 0xF07A34A6, /* 234 */ ! 3233: 0x53943D0A, /* 235 */ ! 3234: 0xF9DD166D, /* 236 */ ! 3235: 0x7A8957AF, /* 237 */ ! 3236: 0xF8BA3CE5, /* 238 */ ! 3237: 0x27C9621E, /* 239 */ ! 3238: 0x5CDAE910, /* 240 */ ! 3239: 0xC8518998, /* 241 */ ! 3240: 0x941538FE, /* 242 */ ! 3241: 0x136115D8, /* 243 */ ! 3242: 0xABA8443C, /* 244 */ ! 3243: 0x4D01F931, /* 245 */ ! 3244: 0x34EDF760, /* 246 */ ! 3245: 0xB45F266B, /* 247 */ ! 3246: 0xD5D4DE14, /* 248 */ ! 3247: 0x52D8AC35, /* 249 */ ! 3248: 0x15CFD885, /* 250 */ ! 3249: 0xCBC5CD21, /* 251 */ ! 3250: 0x4CD76D4D, /* 252 */ ! 3251: 0x7C80EF54, /* 253 */ ! 3252: 0xBC92EE75, /* 254 */ ! 3253: 0x1E56A1F6}/* 255 */ ! 3254: ! 3255: ! 3256: }; ! 3257: ! 3258: ! 3259: ! 3260: ! 3261: *-*-END-*-* ! 3262: sed 's/^ //' >testSBoxes.c <<\*-*-END-*-* ! 3263: /* This program generates and tests the standard S-boxes used by Snefru, ! 3264: the one way hash function. It uses the RAND table of random numbers. ! 3265: ! 3266: ! 3267: This is version 2.0, July 31, 1989. ! 3268: ! 3269: ! 3270: ! 3271: Copyright (c) Xerox Corporation 1989 ! 3272: All rights reserved. ! 3273: ! 3274: License to copy and use this software is granted. ! 3275: ! 3276: License is also granted to make and use derivative works. ! 3277: ! 3278: Xerox Corporation makes no representations concerning either the ! 3279: merchantability of this software or the suitability of this software for any ! 3280: particular purpose. It is provided "as is" without express or implied ! 3281: warranty of any kind. ! 3282: ! 3283: These notices must be retained in any copies of any part of this software. ! 3284: ! 3285: ! 3286: ! 3287: ! 3288: #define inputFile 0 /* normally standard in */ ! 3289: #define outputFile 1 /* normally standard out */ ! 3290: #define errorFile 2 /* normally standard error */ ! 3291: ! 3292: ! 3293: #define SBoxCount 8 /* number of S boxes in the set of standard S ! 3294: boxes */ ! 3295: ! 3296: ! 3297: ! 3298: ! 3299: /* The random table is the first part of the random digits from the book: ! 3300: 'A Million Random Digits with 100,000 Normal Deviates", by the RAND ! 3301: Corporation, published by the Free Press, 1955. The formatting is similar ! 3302: to the book to allow easy inspection and verification. The random digits ! 3303: are also available on magnetic tape or diskettes from the RAND ! 3304: corporation. ! 3305: ! 3306: Send inquiries to: The RAND Corporation, Computer Information Systems, 1700 ! 3307: Main St., Santa Monica California 90406; ATTN: Jackie McGee ! 3308: ! 3309: */ ! 3310: ! 3311: ! 3312: /* The following two global variables are used only by 'randomDigit' */ ! 3313: ! 3314: /* group location in the table of random digits */ ! 3315: int locationInRANDtable = 0; ! 3316: /* location within a 5-digit group */ ! 3317: int locationIn5DigitGroup = 0; ! 3318: ! 3319: ! 3320: #define sizeOfRANDtableIn5DigitGroups 4810 ! 3321: char RANDtable[sizeOfRANDtableIn5DigitGroups][5] = { ! 3322: /* 0 */ "10097", "32533", "76520", "13586", "34673", ! 3323: "54876", "80959", "09117", "39292", "74945", ! 3324: /* 1 */ "37542", "04805", "64894", "74296", "24805", ! 3325: "24037", "20636", "10402", "00822", "91665", ! 3326: /* 2 */ "08422", "68953", "19645", "09303", "23209", ! 3327: "02560", "15953", "34764", "35080", "33606", ! 3328: /* 3 */ "99019", "02529", "09376", "70715", "38311", ! 3329: "31165", "88676", "74397", "04436", "27659", ! 3330: /* 4 */ "12807", "99970", "80157", "36147", "64032", ! 3331: "36653", "98951", "16877", "12171", "76833", ! 3332: /* 5 */ "66065", "74717", "34072", "76850", "36697", ! 3333: "36170", "65813", "39885", "11199", "29170", ! 3334: /* 6 */ "31060", "10805", "45571", "82406", "35303", ! 3335: "42614", "86799", "07439", "23403", "09732", ! 3336: /* 7 */ "85269", "77602", "02051", "65692", "68665", ! 3337: "74818", "73053", "85247", "18623", "88579", ! 3338: /* 8 */ "63573", "32135", "05325", "47048", "90553", ! 3339: "57548", "28468", "28709", "83491", "25624", ! 3340: /* 9 */ "73796", "45753", "03529", "64778", "35808", ! 3341: "34282", "60935", "20344", "35273", "88435", ! 3342: /* 10 */ "98520", "17767", "14905", "68607", "22109", ! 3343: "40558", "60970", "93433", "50500", "73998", ! 3344: /* 11 */ "11805", "05431", "39808", "27732", "50725", ! 3345: "68248", "29405", "24201", "52775", "67851", ! 3346: /* 12 */ "83452", "99634", "06288", "98083", "13746", ! 3347: "70078", "18475", "40610", "68711", "77817", ! 3348: /* 13 */ "88685", "40200", "86507", "58401", "36766", ! 3349: "67951", "90364", "76493", "29609", "11062", ! 3350: /* 14 */ "99594", "67348", "87517", "64969", "91826", ! 3351: "08928", "93785", "61368", "23478", "34113", ! 3352: /* 15 */ "65481", "17674", "17468", "50950", "58047", ! 3353: "76974", "73039", "57186", "40218", "16544", ! 3354: /* 16 */ "80124", "35635", "17727", "08015", "45318", ! 3355: "22374", "21115", "78253", "14385", "53763", ! 3356: /* 17 */ "74350", "99817", "77402", "77214", "43236", ! 3357: "00210", "45521", "64237", "96286", "02655", ! 3358: /* 18 */ "69916", "26803", "66252", "29148", "36936", ! 3359: "87203", "76621", "13990", "94400", "56418", ! 3360: /* 19 */ "09893", "20505", "14225", "68514", "46427", ! 3361: "56788", "96297", "78822", "54382", "14598", ! 3362: /* 20 */ "91499", "14523", "68479", "27686", "46162", ! 3363: "83554", "94750", "89923", "37089", "20048", ! 3364: /* 21 */ "80336", "94598", "26940", "36858", "70297", ! 3365: "34135", "53140", "33340", "42050", "82341", ! 3366: /* 22 */ "44104", "81949", "85157", "47954", "32979", ! 3367: "26575", "57600", "40881", "22222", "06413", ! 3368: /* 23 */ "12550", "73742", "11100", "02040", "12860", ! 3369: "74697", "96644", "89439", "28707", "25815", ! 3370: /* 24 */ "63606", "49329", "16505", "34484", "40219", ! 3371: "52563", "43651", "77082", "07207", "31790", ! 3372: /* 25 */ "61196", "90446", "26457", "47774", "51924", ! 3373: "33729", "65394", "59593", "42582", "60527", ! 3374: /* 26 */ "15474", "45266", "95270", "79953", "59367", ! 3375: "83848", "82396", "10118", "33211", "59466", ! 3376: /* 27 */ "94557", "28573", "67897", "54387", "54622", ! 3377: "44431", "91190", "42592", "92927", "45973", ! 3378: /* 28 */ "42481", "16213", "97344", "08721", "16868", ! 3379: "48767", "03071", "12059", "25701", "46670", ! 3380: /* 29 */ "23523", "78317", "73208", "89837", "68935", ! 3381: "91416", "26252", "29663", "05522", "82562", ! 3382: /* 30 */ "04493", "52494", "75246", "33824", "45862", ! 3383: "51025", "61962", "79335", "65337", "12472", ! 3384: /* 31 */ "00549", "97654", "64051", "88159", "96119", ! 3385: "63896", "54692", "82391", "23287", "29529", ! 3386: /* 32 */ "35963", "15307", "26898", "09354", "33351", ! 3387: "35462", "77974", "50024", "90103", "39333", ! 3388: /* 33 */ "59808", "08391", "45427", "26842", "83609", ! 3389: "49700", "13021", "24892", "78565", "20106", ! 3390: /* 34 */ "46058", "85236", "01390", "92286", "77281", ! 3391: "44077", "93910", "83647", "70617", "42941", ! 3392: /* 35 */ "32179", "00597", "87379", "25241", "05567", ! 3393: "07007", "86743", "17157", "85394", "11838", ! 3394: /* 36 */ "69234", "61406", "20117", "45204", "15956", ! 3395: "60000", "18743", "92423", "97118", "96338", ! 3396: /* 37 */ "19565", "41430", "01758", "75379", "40419", ! 3397: "21585", "66674", "36806", "84962", "85207", ! 3398: /* 38 */ "45155", "14938", "19476", "07246", "43667", ! 3399: "94543", "59047", "90033", "20826", "69541", ! 3400: /* 39 */ "94864", "31994", "36168", "10851", "34888", ! 3401: "81553", "01540", "35456", "05014", "51176", ! 3402: /* 40 */ "98086", "24826", "45240", "28404", "44999", ! 3403: "08896", "39094", "73407", "35441", "31880", ! 3404: /* 41 */ "33185", "16232", "41941", "50949", "89435", ! 3405: "48581", "88695", "41994", "37548", "73043", ! 3406: /* 42 */ "80951", "00406", "96382", "70774", "20151", ! 3407: "23387", "25016", "25298", "94624", "61171", ! 3408: /* 43 */ "79752", "49140", "71961", "28296", "69861", ! 3409: "02591", "74852", "20539", "00387", "59579", ! 3410: /* 44 */ "18633", "32537", "98145", "06571", "31010", ! 3411: "24674", "05455", "61427", "77938", "91936", ! 3412: /* 45 */ "74029", "43902", "77557", "32270", "97790", ! 3413: "17119", "52527", "58021", "80814", "51748", ! 3414: /* 46 */ "54178", "45611", "80993", "37143", "05335", ! 3415: "12969", "56127", "19255", "36040", "90324", ! 3416: /* 47 */ "11664", "49883", "52079", "84827", "59381", ! 3417: "71539", "09973", "33440", "88461", "23356", ! 3418: /* 48 */ "48324", "77928", "31249", "64710", "02295", ! 3419: "36870", "32307", "57546", "15020", "09994", ! 3420: /* 49 */ "69074", "94138", "87637", "91976", "35584", ! 3421: "04401", "10518", "21615", "01848", "76938", ! 3422: /* 50 */ "09188", "20097", "32825", "39527", "04220", ! 3423: "86304", "83389", "87374", "64278", "58044", ! 3424: /* 51 */ "90045", "85497", "51981", "50654", "94938", ! 3425: "81997", "91870", "76150", "68476", "64659", ! 3426: /* 52 */ "73189", "50207", "47677", "26269", "62290", ! 3427: "64464", "27124", "67018", "41361", "82760", ! 3428: /* 53 */ "75768", "76490", "20971", "87749", "90429", ! 3429: "12272", "95375", "05871", "93823", "43178", ! 3430: /* 54 */ "54016", "44056", "66281", "31003", "00682", ! 3431: "27398", "20714", "53295", "07706", "17813", ! 3432: /* 55 */ "08358", "69910", "78542", "42785", "13661", ! 3433: "58873", "04618", "97553", "31223", "08420", ! 3434: /* 56 */ "28306", "03264", "81333", "10591", "40510", ! 3435: "07893", "32604", "60475", "94119", "01840", ! 3436: /* 57 */ "53840", "86233", "81594", "13628", "51215", ! 3437: "90290", "28466", "68795", "77762", "20791", ! 3438: /* 58 */ "91757", "53741", "61613", "62269", "50263", ! 3439: "90212", "55781", "76514", "83483", "47055", ! 3440: /* 59 */ "89415", "92694", "00397", "58391", "12607", ! 3441: "17646", "48949", "72306", "94541", "37408", ! 3442: /* 60 */ "77513", "03820", "86864", "29901", "68414", ! 3443: "82774", "51908", "13980", "72893", "55507", ! 3444: /* 61 */ "19502", "37174", "69979", "20288", "55210", ! 3445: "29773", "74287", "75251", "65344", "67415", ! 3446: /* 62 */ "21818", "59313", "93278", "81757", "05686", ! 3447: "73156", "07082", "85046", "31853", "38452", ! 3448: /* 63 */ "51474", "66499", "68107", "23621", "94049", ! 3449: "91345", "42836", "09191", "08007", "45449", ! 3450: /* 64 */ "99559", "68331", "62535", "24170", "69777", ! 3451: "12830", "74819", "78142", "43860", "72834", ! 3452: /* 65 */ "33713", "48007", "93584", "72869", "51926", ! 3453: "64721", "58303", "29822", "93174", "93972", ! 3454: /* 66 */ "85274", "86893", "11303", "22970", "28834", ! 3455: "34137", "73515", "90400", "71148", "43643", ! 3456: /* 67 */ "84133", "89640", "44035", "52166", "73852", ! 3457: "70091", "61222", "60561", "62327", "18423", ! 3458: /* 68 */ "56732", "16234", "17395", "96131", "10123", ! 3459: "91622", "85496", "57560", "81604", "18880", ! 3460: /* 69 */ "65138", "56806", "87648", "85261", "34313", ! 3461: "65861", "45875", "21069", "85644", "47277", ! 3462: /* 70 */ "38001", "02176", "81719", "11711", "71602", ! 3463: "92937", "74219", "64049", "65584", "49698", ! 3464: /* 71 */ "37402", "96397", "01304", "77586", "56271", ! 3465: "10086", "47324", "62605", "40030", "37438", ! 3466: /* 72 */ "97125", "40348", "87083", "31417", "21815", ! 3467: "39250", "75237", "62047", "15501", "29578", ! 3468: /* 73 */ "21826", "41134", "47143", "34072", "64638", ! 3469: "85902", "49139", "06441", "03856", "54552", ! 3470: /* 74 */ "73135", "42742", "95719", "09035", "85794", ! 3471: "74296", "08789", "88156", "64691", "19202", ! 3472: /* 75 */ "07638", "77929", "03061", "18072", "96207", ! 3473: "44156", "23821", "99538", "04713", "66994", ! 3474: /* 76 */ "60528", "83441", "07954", "19814", "59175", ! 3475: "20695", "05533", "52139", "61212", "06455", ! 3476: /* 77 */ "83596", "35655", "06958", "92983", "05128", ! 3477: "09719", "77433", "53783", "92301", "50498", ! 3478: /* 78 */ "10850", "62746", "99599", "10507", "13499", ! 3479: "06319", "53075", "71839", "06410", "19362", ! 3480: /* 79 */ "39820", "98952", "43622", "63147", "64421", ! 3481: "80814", "43800", "09351", "31024", "73167", ! 3482: /* 80 */ "59580", "06478", "75569", "78800", "88835", ! 3483: "54486", "23768", "06156", "04111", "08408", ! 3484: /* 81 */ "38508", "07341", "23793", "48763", "90822", ! 3485: "97022", "17719", "04207", "95954", "49953", ! 3486: /* 82 */ "30692", "70668", "94688", "16127", "56196", ! 3487: "80091", "82067", "63400", "05462", "69200", ! 3488: /* 83 */ "65443", "95659", "18288", "27437", "49632", ! 3489: "24041", "08337", "65676", "96299", "90836", ! 3490: /* 84 */ "27267", "50264", "13192", "72294", "07477", ! 3491: "44606", "17985", "48911", "97341", "30358", ! 3492: /* 85 */ "91307", "06991", "19072", "24210", "36699", ! 3493: "53728", "28825", "35793", "28976", "66252", ! 3494: /* 86 */ "68434", "94688", "84473", "13622", "62126", ! 3495: "98408", "12843", "82590", "09815", "93146", ! 3496: /* 87 */ "48908", "15877", "54745", "24591", "35700", ! 3497: "04754", "83824", "52692", "54130", "55160", ! 3498: /* 88 */ "06913", "45197", "42672", "78601", "11883", ! 3499: "09528", "63011", "98901", "14974", "40344", ! 3500: /* 89 */ "10455", "16019", "14210", "33712", "91342", ! 3501: "37821", "88325", "80851", "43667", "70883", ! 3502: /* 90 */ "12883", "97343", "65027", "61184", "04285", ! 3503: "01392", "17974", "15077", "90712", "26769", ! 3504: /* 91 */ "21778", "30976", "38807", "36961", "31649", ! 3505: "42096", "63281", "02023", "08816", "47449", ! 3506: /* 92 */ "19523", "59515", "65122", "59659", "86283", ! 3507: "68258", "69572", "13798", "16435", "91529", ! 3508: /* 93 */ "67245", "52670", "35583", "16563", "79246", ! 3509: "86686", "76463", "34222", "26655", "90802", ! 3510: /* 94 */ "60584", "47377", "07500", "37992", "45134", ! 3511: "26529", "26760", "83637", "41326", "44344", ! 3512: /* 95 */ "53853", "41377", "36066", "94850", "58838", ! 3513: "73859", "49364", "73331", "96240", "43642", ! 3514: /* 96 */ "24637", "38736", "74384", "89342", "52623", ! 3515: "07992", "12369", "18601", "03742", "83873", ! 3516: /* 97 */ "83080", "12451", "38992", "22815", "07759", ! 3517: "51777", "97377", "27585", "51972", "37867", ! 3518: /* 98 */ "16444", "24334", "36151", "99073", "27493", ! 3519: "70939", "85130", "32552", "54846", "54759", ! 3520: /* 99 */ "60790", "18157", "57178", "65762", "11161", ! 3521: "78576", "45819", "52979", "65130", "04860", ! 3522: /* 100 */ "03991", "10461", "93716", "16894", "66083", ! 3523: "24653", "84609", "58232", "88618", "19161", ! 3524: /* 101 */ "38555", "95554", "32886", "59780", "08355", ! 3525: "60860", "29735", "47762", "71299", "23853", ! 3526: /* 102 */ "17546", "73704", "92052", "46215", "55121", ! 3527: "29281", "59076", "07936", "27954", "58909", ! 3528: /* 103 */ "32643", "52861", "95819", "06831", "00911", ! 3529: "98936", "76355", "93779", "80863", "00514", ! 3530: /* 104 */ "69572", "68777", "39510", "35905", "14060", ! 3531: "40619", "29549", "69616", "33564", "60780", ! 3532: /* 105 */ "24122", "66591", "27699", "06494", "14845", ! 3533: "46672", "61958", "77100", "90899", "75754", ! 3534: /* 106 */ "61196", "30231", "92962", "61773", "41839", ! 3535: "55382", "17267", "70943", "78038", "70267", ! 3536: /* 107 */ "30532", "21704", "10274", "12202", "39685", ! 3537: "23309", "10061", "68829", "55986", "66485", ! 3538: /* 108 */ "03788", "97599", "75867", "20717", "74416", ! 3539: "53166", "35208", "33374", "87539", "08823", ! 3540: /* 109 */ "48228", "63379", "85783", "47619", "53152", ! 3541: "67433", "35663", "52972", "16818", "60311", ! 3542: /* 110 */ "60365", "94653", "35075", "33949", "42614", ! 3543: "29297", "01918", "28316", "98953", "73231", ! 3544: /* 111 */ "83799", "42402", "56623", "34442", "34994", ! 3545: "41374", "70071", "14736", "09958", "18065", ! 3546: /* 112 */ "32960", "07405", "36409", "83232", "99385", ! 3547: "41600", "11133", "07586", "15917", "06253", ! 3548: /* 113 */ "19322", "53845", "57620", "52606", "66497", ! 3549: "68646", "78138", "66559", "19640", "99413", ! 3550: /* 114 */ "11220", "94747", "07399", "37408", "48509", ! 3551: "23929", "27482", "45476", "85244", "35159", ! 3552: /* 115 */ "31751", "57260", "68980", "05339", "15470", ! 3553: "48355", "88651", "22596", "03152", "19121", ! 3554: /* 116 */ "88492", "99382", "14454", "04504", "20094", ! 3555: "98977", "74843", "93413", "22109", "78508", ! 3556: /* 117 */ "30934", "47744", "07481", "83828", "73788", ! 3557: "06533", "28597", "20405", "94205", "20380", ! 3558: /* 118 */ "22888", "48893", "27499", "98748", "60530", ! 3559: "45128", "74022", "84617", "82037", "10268", ! 3560: /* 119 */ "78212", "16993", "35902", "91386", "44372", ! 3561: "15486", "65741", "14014", "87481", "37220", ! 3562: /* 120 */ "41849", "84547", "46850", "52326", "34677", ! 3563: "58300", "74910", "64345", "19325", "81549", ! 3564: /* 121 */ "46352", "33049", "69248", "93460", "45305", ! 3565: "07521", "61318", "31855", "14413", "70951", ! 3566: /* 122 */ "11087", "96294", "14013", "31792", "59747", ! 3567: "67277", "76503", "34513", "39663", "77544", ! 3568: /* 123 */ "52701", "08337", "56303", "87315", "16520", ! 3569: "69676", "11654", "99893", "02181", "68161", ! 3570: /* 124 */ "57275", "36898", "81304", "48585", "68652", ! 3571: "27376", "92852", "55866", "88448", "03584", ! 3572: /* 125 */ "20857", "73156", "70284", "24326", "79375", ! 3573: "95220", "01159", "63267", "10622", "48391", ! 3574: /* 126 */ "15633", "84924", "90415", "93614", "33521", ! 3575: "26665", "55823", "47641", "86225", "31704", ! 3576: /* 127 */ "92694", "48297", "39904", "02115", "59589", ! 3577: "49067", "66821", "41575", "49767", "04037", ! 3578: /* 128 */ "77613", "19019", "88152", "00080", "20554", ! 3579: "91409", "96277", "48257", "50816", "97616", ! 3580: /* 129 */ "38688", "32486", "45134", "63545", "59404", ! 3581: "72059", "43947", "51680", "43852", "59693", ! 3582: /* 130 */ "25163", "01889", "70014", "15021", "41290", ! 3583: "67312", "71857", "15957", "68971", "11403", ! 3584: /* 131 */ "65251", "07629", "37239", "33295", "05870", ! 3585: "01119", "92784", "26340", "18477", "65622", ! 3586: /* 132 */ "36815", "43625", "18637", "37509", "82444", ! 3587: "99005", "04921", "73701", "14707", "93997", ! 3588: /* 133 */ "64397", "11692", "05327", "82162", "20247", ! 3589: "81759", "45197", "25332", "83745", "22567", ! 3590: /* 134 */ "04515", "25624", "95096", "67946", "48460", ! 3591: "85558", "15191", "18782", "16930", "33361", ! 3592: /* 135 */ "83761", "60873", "43253", "84145", "60833", ! 3593: "25983", "01291", "41349", "20368", "07126", ! 3594: /* 136 */ "14387", "06345", "80854", "09279", "43529", ! 3595: "06318", "38384", "74761", "41196", "37480", ! 3596: /* 137 */ "51321", "92246", "80088", "77074", "88722", ! 3597: "56736", "66164", "49431", "66919", "31678", ! 3598: /* 138 */ "72472", "00008", "80890", "18002", "94813", ! 3599: "31900", "54155", "83436", "35352", "54131", ! 3600: /* 139 */ "05466", "55306", "93128", "18464", "74457", ! 3601: "90561", "72848", "11834", "79982", "68416", ! 3602: /* 140 */ "39528", "72484", "82474", "25593", "48545", ! 3603: "35247", "18619", "13674", "18611", "19241", ! 3604: /* 141 */ "81616", "18711", "53342", "44276", "75122", ! 3605: "11724", "74627", "73707", "58319", "15997", ! 3606: /* 142 */ "07586", "16120", "82641", "22820", "92904", ! 3607: "13141", "32392", "19763", "61199", "67940", ! 3608: /* 143 */ "90767", "04235", "13574", "17200", "69902", ! 3609: "63742", "78464", "22501", "18627", "90872", ! 3610: /* 144 */ "40188", "28193", "29593", "88627", "94972", ! 3611: "11598", "62095", "36787", "00441", "58997", ! 3612: /* 145 */ "34414", "82157", "86887", "55087", "19152", ! 3613: "00023", "12302", "80783", "32624", "68691", ! 3614: /* 146 */ "63439", "75363", "44989", "16822", "36024", ! 3615: "00867", "76378", "41605", "65961", "73488", ! 3616: /* 147 */ "67049", "09070", "93399", "45547", "94458", ! 3617: "74284", "05041", "49807", "20288", "34060", ! 3618: /* 148 */ "79495", "04146", "52162", "90286", "54158", ! 3619: "34243", "46978", "35482", "59362", "95938", ! 3620: /* 149 */ "91704", "30552", "04737", "21031", "75051", ! 3621: "93029", "47665", "64382", "99782", "93478", ! 3622: /* 150 */ "94015", "46874", "32444", "48277", "59820", ! 3623: "96163", "64654", "25843", "41145", "42820", ! 3624: /* 151 */ "74108", "88222", "88570", "74015", "25704", ! 3625: "91035", "01755", "14750", "48968", "38603", ! 3626: /* 152 */ "62880", "87873", "95160", "59221", "22304", ! 3627: "90314", "72877", "17334", "39283", "04149", ! 3628: /* 153 */ "11748", "12102", "80580", "41867", "17710", ! 3629: "59621", "06554", "07850", "73950", "79552", ! 3630: /* 154 */ "17944", "05600", "60478", "03343", "25852", ! 3631: "58905", "57216", "39618", "49856", "99326", ! 3632: /* 155 */ "66067", "42792", "95043", "52680", "46780", ! 3633: "56487", "09971", "59481", "37006", "22186", ! 3634: /* 156 */ "54244", "91030", "45547", "70818", "59849", ! 3635: "96169", "61459", "21647", "87417", "17198", ! 3636: /* 157 */ "30945", "57589", "31732", "57260", "47670", ! 3637: "07654", "46376", "25366", "94746", "49580", ! 3638: /* 158 */ "69170", "37403", "86995", "90307", "94304", ! 3639: "71803", "26825", "05511", "12459", "91314", ! 3640: /* 159 */ "08345", "88975", "35841", "85771", "08105", ! 3641: "59987", "87112", "21476", "14713", "71181", ! 3642: /* 160 */ "27767", "43584", "85301", "88977", "29490", ! 3643: "69714", "73035", "41207", "74699", "09310", ! 3644: /* 161 */ "13025", "14338", "54066", "15243", "47724", ! 3645: "66733", "47431", "43905", "31048", "56699", ! 3646: /* 162 */ "80217", "36292", "98525", "24335", "24432", ! 3647: "24896", "43277", "58874", "11466", "16082", ! 3648: /* 163 */ "10875", "62004", "90391", "61105", "57411", ! 3649: "06368", "53856", "30743", "08670", "84741", ! 3650: /* 164 */ "54127", "57326", "26629", "19087", "24472", ! 3651: "88779", "30540", "27886", "61732", "75454", ! 3652: /* 165 */ "60311", "42824", "37301", "42678", "45990", ! 3653: "43242", "17374", "52003", "70707", "70214", ! 3654: /* 166 */ "49739", "71484", "92003", "98086", "76668", ! 3655: "73209", "59202", "11973", "02902", "33250", ! 3656: /* 167 */ "78626", "51594", "16453", "94614", "39014", ! 3657: "97066", "83012", "09832", "25571", "77628", ! 3658: /* 168 */ "66692", "13986", "99837", "00582", "81232", ! 3659: "44987", "09504", "96412", "90193", "79568", ! 3660: /* 169 */ "44071", "28091", "07362", "97703", "76447", ! 3661: "42537", "98524", "97831", "65704", "09514", ! 3662: /* 170 */ "41468", "85149", "49554", "17994", "14924", ! 3663: "39650", "95294", "00556", "70481", "06905", ! 3664: /* 171 */ "94559", "37559", "49678", "53119", "70312", ! 3665: "05682", "66986", "34099", "74474", "20740", ! 3666: /* 172 */ "41615", "70360", "64114", "58660", "90850", ! 3667: "64618", "80620", "51790", "11436", "38072", ! 3668: /* 173 */ "50273", "93113", "41794", "86861", "24781", ! 3669: "89683", "55411", "85667", "77535", "99892", ! 3670: /* 174 */ "41396", "80504", "90670", "08289", "40902", ! 3671: "05069", "95083", "06783", "28102", "57816", ! 3672: /* 175 */ "25807", "24260", "71529", "78920", "72682", ! 3673: "07385", "90726", "57166", "98884", "08583", ! 3674: /* 176 */ "06170", "97965", "88302", "98041", "21443", ! 3675: "41808", "68984", "83620", "89747", "98882", ! 3676: /* 177 */ "60808", "54444", "74412", "81105", "01176", ! 3677: "28838", "36421", "16489", "18059", "51061", ! 3678: /* 178 */ "80940", "44893", "10408", "36222", "80582", ! 3679: "71944", "92638", "40333", "67054", "16067", ! 3680: /* 179 */ "19516", "90120", "46759", "71643", "13177", ! 3681: "55292", "21036", "82808", "77501", "97427", ! 3682: /* 180 */ "49386", "54480", "23604", "23554", "21785", ! 3683: "41101", "91178", "10174", "29420", "90438", ! 3684: /* 181 */ "06312", "88940", "15995", "69321", "47458", ! 3685: "64809", "98189", "81851", "29651", "84215", ! 3686: /* 182 */ "60942", "00307", "11897", "92674", "40405", ! 3687: "68032", "96717", "54244", "10701", "41393", ! 3688: /* 183 */ "92329", "98932", "78284", "46347", "71209", ! 3689: "92061", "39448", "93136", "25722", "08564", ! 3690: /* 184 */ "77936", "63574", "31384", "51924", "85561", ! 3691: "29671", "58137", "17820", "22751", "36518", ! 3692: /* 185 */ "38101", "77756", "11657", "13897", "95889", ! 3693: "57067", "47648", "13885", "70669", "93406", ! 3694: /* 186 */ "39641", "69457", "91339", "22502", "92613", ! 3695: "89719", "11947", "56203", "19324", "20504", ! 3696: /* 187 */ "84054", "40455", "99396", "63680", "67667", ! 3697: "60631", "69181", "96845", "38525", "11600", ! 3698: /* 188 */ "47468", "03577", "57649", "63266", "24700", ! 3699: "71594", "14004", "23153", "69249", "05747", ! 3700: /* 189 */ "43321", "31370", "28977", "23896", "76479", ! 3701: "68562", "62342", "07589", "08899", "05985", ! 3702: /* 190 */ "64281", "61826", "18555", "64937", "13173", ! 3703: "33365", "78851", "16499", "87064", "13075", ! 3704: /* 191 */ "66847", "70495", "32350", "02985", "86716", ! 3705: "38746", "26313", "77463", "55387", "72681", ! 3706: /* 192 */ "72461", "33230", "21529", "53424", "92581", ! 3707: "02262", "78438", "66276", "18396", "73538", ! 3708: /* 193 */ "21032", "91050", "13058", "16218", "12470", ! 3709: "56500", "15292", "76139", "59526", "52113", ! 3710: /* 194 */ "95362", "67011", "06651", "16136", "01016", ! 3711: "00857", "55018", "56374", "35824", "71708", ! 3712: /* 195 */ "49712", "97380", "10404", "55452", "34030", ! 3713: "60726", "75211", "10271", "36633", "68424", ! 3714: /* 196 */ "58275", "61764", "97586", "54716", "50259", ! 3715: "46345", "87195", "46092", "26787", "60939", ! 3716: /* 197 */ "89514", "11788", "68224", "23417", "73959", ! 3717: "76145", "30342", "40277", "11049", "72049", ! 3718: /* 198 */ "15472", "50669", "48139", "36732", "46874", ! 3719: "37088", "73465", "09819", "58869", "35220", ! 3720: /* 199 */ "12120", "86124", "51247", "44302", "60883", ! 3721: "52109", "21437", "36786", "49226", "77837", ! 3722: /* 200 */ "19612", "78430", "11661", "94770", "77603", ! 3723: "65669", "86868", "12665", "30012", "75989", ! 3724: /* 201 */ "39141", "77400", "28000", "64238", "73258", ! 3725: "71794", "31340", "26256", "66453", "37016", ! 3726: /* 202 */ "64756", "80457", "08747", "12836", "03469", ! 3727: "50678", "03274", "43423", "66677", "82556", ! 3728: /* 203 */ "92901", "51878", "56441", "22998", "29718", ! 3729: "38447", "06453", "25311", "07565", "53771", ! 3730: /* 204 */ "03551", "90070", "09483", "94050", "45938", ! 3731: "18135", "36908", "43321", "11073", "51803", ! 3732: /* 205 */ "98884", "66209", "06830", "53656", "14663", ! 3733: "56346", "71430", "04909", "19818", "05707", ! 3734: /* 206 */ "27369", "86882", "53473", "07541", "53633", ! 3735: "70863", "03748", "12822", "19360", "49088", ! 3736: /* 207 */ "59066", "75974", "63335", "20483", "43514", ! 3737: "37481", "58278", "26967", "49325", "43951", ! 3738: /* 208 */ "91647", "93783", "64169", "49022", "98588", ! 3739: "09495", "49829", "59068", "38831", "04838", ! 3740: /* 209 */ "83605", "92419", "39542", "07772", "71568", ! 3741: "75673", "35185", "89759", "44901", "74291", ! 3742: /* 210 */ "24895", "88530", "70774", "35439", "46758", ! 3743: "70472", "70207", "92675", "91623", "61275", ! 3744: /* 211 */ "35720", "26556", "95596", "20094", "73750", ! 3745: "85788", "34264", "01703", "46833", "65248", ! 3746: /* 212 */ "14141", "53410", "38649", "06343", "57256", ! 3747: "61342", "72709", "75318", "90379", "37562", ! 3748: /* 213 */ "27416", "75670", "92176", "72535", "93119", ! 3749: "56077", "06886", "18244", "92344", "31374", ! 3750: /* 214 */ "82071", "07429", "81007", "47749", "40744", ! 3751: "56974", "23336", "88821", "53841", "10536", ! 3752: /* 215 */ "21445", "82793", "24831", "93241", "14199", ! 3753: "76268", "70883", "68002", "03829", "17443", ! 3754: /* 216 */ "72513", "76400", "52225", "92348", "62308", ! 3755: "98481", "29744", "33165", "33141", "61020", ! 3756: /* 217 */ "71479", "45027", "76160", "57411", "13780", ! 3757: "13632", "52308", "77762", "88874", "33697", ! 3758: /* 218 */ "83210", "51466", "09088", "50395", "26743", ! 3759: "05306", "21706", "70001", "99439", "80767", ! 3760: /* 219 */ "68749", "95148", "94897", "78636", "96750", ! 3761: "09024", "94538", "91143", "96693", "61886", ! 3762: /* 220 */ "05184", "75763", "47075", "88158", "05313", ! 3763: "53439", "14908", "08830", "60096", "21551", ! 3764: /* 221 */ "13651", "62546", "96892", "25240", "47511", ! 3765: "58483", "87342", "78818", "07855", "39269", ! 3766: /* 222 */ "00566", "21220", "00292", "24069", "25072", ! 3767: "29519", "52548", "54091", "21282", "21296", ! 3768: /* 223 */ "50958", "17695", "58072", "68990", "60329", ! 3769: "95955", "71586", "63417", "35947", "67807", ! 3770: /* 224 */ "57621", "64547", "46850", "37981", "38527", ! 3771: "09037", "64756", "03324", "04986", "83666", ! 3772: /* 225 */ "09282", "25844", "79139", "78435", "35428", ! 3773: "43561", "69799", "63314", "12991", "93516", ! 3774: /* 226 */ "23394", "94206", "93432", "37836", "94919", ! 3775: "26846", "02555", "74410", "94915", "48199", ! 3776: /* 227 */ "05280", "37470", "93622", "04345", "15092", ! 3777: "19510", "18094", "16613", "78234", "50001", ! 3778: /* 228 */ "95491", "97976", "38306", "32192", "82639", ! 3779: "54624", "72434", "92606", "23191", "74693", ! 3780: /* 229 */ "78521", "00104", "18248", "75583", "90326", ! 3781: "50785", "54034", "66251", "35774", "14692", ! 3782: /* 230 */ "96345", "44579", "85932", "44053", "75704", ! 3783: "20840", "86583", "83944", "52456", "73766", ! 3784: /* 231 */ "77963", "31151", "32364", "91691", "47357", ! 3785: "40338", "23435", "24065", "08458", "95366", ! 3786: /* 232 */ "07520", "11294", "23238", "01748", "41690", ! 3787: "67328", "54814", "37777", "10057", "42332", ! 3788: /* 233 */ "38423", "02309", "70703", "85736", "46148", ! 3789: "14258", "29236", "12152", "05088", "65825", ! 3790: /* 234 */ "02463", "65533", "21199", "60555", "33928", ! 3791: "01817", "07396", "89215", "30722", "22102", ! 3792: /* 235 */ "15880", "92261", "17292", "88190", "61781", ! 3793: "48898", "92525", "21283", "88581", "60098", ! 3794: /* 236 */ "71926", "00819", "59144", "00224", "30570", ! 3795: "90194", "18329", "06999", "26857", "19238", ! 3796: /* 237 */ "64425", "28108", "16554", "16016", "00042", ! 3797: "83229", "10333", "36168", "65617", "94834", ! 3798: /* 238 */ "79782", "23924", "49440", "30432", "81077", ! 3799: "31543", "95216", "64865", "13658", "51081", ! 3800: /* 239 */ "35337", "74538", "44553", "64672", "90960", ! 3801: "41849", "93865", "44608", "93176", "34851", ! 3802: /* 240 */ "05249", "29329", "19715", "94082", "14738", ! 3803: "86667", "43708", "66354", "93692", "25527", ! 3804: /* 241 */ "56463", "99380", "38793", "85774", "19056", ! 3805: "13939", "46062", "27647", "66146", "63210", ! 3806: /* 242 */ "96296", "33121", "54196", "34108", "75814", ! 3807: "85986", "71171", "15102", "28992", "63165", ! 3808: /* 243 */ "98380", "36269", "60014", "07201", "62448", ! 3809: "46385", "42175", "88350", "46182", "49126", ! 3810: /* 244 */ "52567", "64350", "16315", "53969", "80395", ! 3811: "81114", "54358", "64578", "47269", "15747", ! 3812: /* 245 */ "78498", "90830", "25955", "99236", "43286", ! 3813: "91064", "99969", "95144", "64424", "77377", ! 3814: /* 246 */ "49553", "24241", "08150", "89535", "08703", ! 3815: "91041", "77323", "81079", "45127", "93686", ! 3816: /* 247 */ "32151", "07075", "83155", "10252", "73100", ! 3817: "88618", "23891", "87418", "45417", "20268", ! 3818: /* 248 */ "11314", "50363", "26860", "27799", "49416", ! 3819: "83534", "19187", "08059", "76677", "02110", ! 3820: /* 249 */ "12364", "71210", "87052", "50241", "90785", ! 3821: "97889", "81399", "58130", "64439", "05614", ! 3822: /* 250 */ "59467", "58309", "87834", "57213", "37510", ! 3823: "33689", "01259", "62486", "56320", "46265", ! 3824: /* 251 */ "73452", "17619", "56421", "40725", "23439", ! 3825: "41701", "93223", "41682", "45026", "47505", ! 3826: /* 252 */ "27635", "56293", "91700", "04391", "67317", ! 3827: "89604", "73020", "69853", "61517", "51207", ! 3828: /* 253 */ "86040", "02596", "01655", "09918", "45161", ! 3829: "00222", "54577", "74821", "47335", "08582", ! 3830: /* 254 */ "52403", "94255", "26351", "46527", "68224", ! 3831: "90183", "85057", "72310", "34963", "83462", ! 3832: /* 255 */ "49465", "46581", "61499", "04844", "94626", ! 3833: "02963", "41482", "83879", "44942", "63915", ! 3834: /* 256 */ "94365", "92560", "12363", "30246", "02086", ! 3835: "75036", "88620", "91088", "67691", "67762", ! 3836: /* 257 */ "34261", "08769", "91830", "23313", "18256", ! 3837: "28850", "37639", "92748", "57791", "71328", ! 3838: /* 258 */ "37110", "66538", "39318", "15626", "44324", ! 3839: "82827", "08782", "65960", "58167", "01305", ! 3840: /* 259 */ "83950", "45424", "72453", "19444", "68219", ! 3841: "64733", "94088", "62006", "89985", "36936", ! 3842: /* 260 */ "61630", "97966", "76537", "46467", "30942", ! 3843: "07479", "67971", "14558", "22458", "35148", ! 3844: /* 261 */ "01929", "17165", "12037", "74558", "16250", ! 3845: "71750", "55546", "29693", "94984", "37782", ! 3846: /* 262 */ "41659", "39098", "23982", "29899", "71594", ! 3847: "77979", "54477", "13764", "17315", "72893", ! 3848: /* 263 */ "32031", "39608", "75992", "73445", "01317", ! 3849: "50525", "87313", "45191", "30214", "19769", ! 3850: /* 264 */ "90043", "93478", "58044", "06949", "31176", ! 3851: "88370", "50274", "83987", "45316", "38551", ! 3852: /* 265 */ "79418", "14322", "91065", "07841", "36130", ! 3853: "86602", "10659", "40859", "00964", "71577", ! 3854: /* 266 */ "85447", "61079", "96910", "72906", "07361", ! 3855: "84338", "34114", "52096", "66715", "51091", ! 3856: /* 267 */ "86219", "81115", "49625", "48799", "89485", ! 3857: "24855", "13684", "68433", "70595", "70102", ! 3858: /* 268 */ "71712", "88559", "92476", "32903", "68009", ! 3859: "58417", "87962", "11787", "16644", "72964", ! 3860: /* 269 */ "29776", "63075", "13270", "84758", "49560", ! 3861: "10317", "28778", "23006", "31036", "84906", ! 3862: /* 270 */ "81488", "17340", "74154", "42801", "27917", ! 3863: "89792", "62604", "62234", "13124", "76471", ! 3864: /* 271 */ "51667", "37589", "87147", "24743", "48023", ! 3865: "06325", "79794", "35889", "13255", "04925", ! 3866: /* 272 */ "99004", "70322", "60832", "76636", "56907", ! 3867: "56534", "72615", "46288", "36788", "93196", ! 3868: /* 273 */ "68656", "66492", "35933", "52293", "47953", ! 3869: "95495", "95304", "50009", "83464", "28608", ! 3870: /* 274 */ "38074", "74083", "09337", "07965", "65047", ! 3871: "36871", "59015", "21769", "30398", "44855", ! 3872: /* 275 */ "01020", "80680", "59328", "08712", "48190", ! 3873: "45332", "27284", "31287", "66011", "09376", ! 3874: /* 276 */ "86379", "74508", "33579", "77114", "92955", ! 3875: "23085", "92824", "03054", "25242", "16322", ! 3876: /* 277 */ "48498", "09938", "44420", "13484", "52319", ! 3877: "58875", "02012", "88591", "52500", "95795", ! 3878: /* 278 */ "41800", "95363", "54142", "17482", "32705", ! 3879: "60564", "12505", "40954", "46174", "64130", ! 3880: /* 279 */ "63026", "96712", "79883", "39225", "52653", ! 3881: "69549", "36693", "59822", "22684", "31661", ! 3882: /* 280 */ "88298", "15489", "16030", "42480", "15372", ! 3883: "38781", "71995", "77438", "91161", "10192", ! 3884: /* 281 */ "07839", "62735", "99218", "25624", "02547", ! 3885: "27445", "69187", "55749", "32322", "15504", ! 3886: /* 282 */ "73298", "51108", "48717", "92926", "75705", ! 3887: "89787", "96114", "99902", "37749", "96305", ! 3888: /* 283 */ "12829", "70474", "00838", "50385", "91711", ! 3889: "80370", "56504", "56857", "80906", "09018", ! 3890: /* 284 */ "76569", "61072", "48568", "36491", "22587", ! 3891: "44363", "39592", "61546", "90181", "37348", ! 3892: /* 285 */ "41665", "41339", "62106", "44203", "06732", ! 3893: "76111", "79840", "67999", "32231", "76869", ! 3894: /* 286 */ "58652", "49983", "01669", "27464", "79553", ! 3895: "52855", "25988", "18087", "38052", "17529", ! 3896: /* 287 */ "13607", "00657", "76173", "43357", "77334", ! 3897: "24140", "53860", "02906", "89863", "44651", ! 3898: /* 288 */ "55715", "26203", "65933", "51087", "98234", ! 3899: "40625", "45545", "63563", "89148", "82581", ! 3900: /* 289 */ "04110", "66683", "99001", "09796", "47349", ! 3901: "65003", "66524", "81970", "71262", "14479", ! 3902: /* 290 */ "31300", "08681", "58068", "44115", "40064", ! 3903: "77879", "23965", "69019", "73985", "19453", ! 3904: /* 291 */ "26225", "97543", "37044", "07494", "85778", ! 3905: "35345", "61115", "92498", "49737", "64599", ! 3906: /* 292 */ "07158", "82763", "25072", "38478", "57782", ! 3907: "75291", "62155", "52056", "04786", "11585", ! 3908: /* 293 */ "71251", "25572", "79771", "93328", "66927", ! 3909: "54069", "58752", "26624", "50463", "77361", ! 3910: /* 294 */ "29991", "96526", "02820", "91659", "12818", ! 3911: "96356", "49499", "01507", "40223", "09171", ! 3912: /* 295 */ "83642", "21057", "02677", "09367", "38097", ! 3913: "16100", "19355", "06120", "15378", "56559", ! 3914: /* 296 */ "69167", "30235", "06767", "66323", "78294", ! 3915: "14916", "19124", "88044", "16673", "66102", ! 3916: /* 297 */ "86018", "29406", "75415", "22038", "27056", ! 3917: "26906", "25867", "14751", "92380", "30434", ! 3918: /* 298 */ "44114", "06026", "79553", "55091", "95385", ! 3919: "41212", "37882", "46864", "54717", "97038", ! 3920: /* 299 */ "53805", "64150", "70915", "63127", "63695", ! 3921: "41288", "38192", "72437", "75075", "18570", ! 3922: /* 300 */ "52065", "08853", "30104", "79937", "66913", ! 3923: "53200", "84570", "78079", "28970", "53859", ! 3924: /* 301 */ "37632", "80274", "35240", "32960", "74859", ! 3925: "07359", "55176", "03930", "38984", "35151", ! 3926: /* 302 */ "82576", "82805", "94031", "12779", "90879", ! 3927: "24109", "25367", "77861", "09541", "85739", ! 3928: /* 303 */ "69023", "64971", "99321", "07521", "95909", ! 3929: "43897", "71724", "92581", "05471", "64337", ! 3930: /* 304 */ "98949", "03606", "78236", "78985", "29212", ! 3931: "57369", "34857", "67757", "58019", "58872", ! 3932: /* 305 */ "96526", "28749", "56592", "37871", "72905", ! 3933: "70198", "57319", "54116", "47014", "18285", ! 3934: /* 306 */ "33692", "72111", "60958", "96848", "17893", ! 3935: "40993", "50445", "14186", "76877", "87867", ! 3936: /* 307 */ "50335", "09513", "44346", "26439", "55293", ! 3937: "06449", "44301", "63740", "40158", "72703", ! 3938: /* 308 */ "88321", "85062", "57345", "66231", "15409", ! 3939: "03451", "95261", "43561", "15673", "28956", ! 3940: /* 309 */ "90303", "62469", "82517", "43035", "36850", ! 3941: "15592", "64098", "59022", "31752", "04370", ! 3942: /* 310 */ "50486", "11885", "23085", "41712", "80692", ! 3943: "48492", "16495", "99721", "36912", "28267", ! 3944: /* 311 */ "27882", "16269", "64483", "11273", "02680", ! 3945: "01616", "46138", "54606", "14761", "05134", ! 3946: /* 312 */ "45144", "63213", "49666", "27441", "86989", ! 3947: "29884", "54334", "06740", "08368", "80051", ! 3948: /* 313 */ "81020", "17882", "74973", "74531", "94994", ! 3949: "24927", "64894", "22667", "20466", "82948", ! 3950: /* 314 */ "66831", "47427", "76033", "31197", "59817", ! 3951: "20064", "61135", "28556", "29695", "80179", ! 3952: /* 315 */ "74058", "18293", "09963", "35278", "13062", ! 3953: "83094", "23373", "90287", "33477", "48865", ! 3954: /* 316 */ "30348", "70174", "11468", "25994", "25343", ! 3955: "22317", "01587", "30682", "00001", "67814", ! 3956: /* 317 */ "59557", "23362", "13746", "82244", "42093", ! 3957: "24671", "79458", "93730", "45488", "60234", ! 3958: /* 318 */ "67098", "09899", "25775", "00332", "36636", ! 3959: "57594", "19958", "85564", "58977", "12247", ! 3960: /* 319 */ "60774", "66371", "69442", "20385", "14486", ! 3961: "91330", "50332", "46023", "75768", "59877", ! 3962: /* 320 */ "60081", "92936", "72302", "75064", "85727", ! 3963: "52987", "05750", "19384", "33684", "78859", ! 3964: /* 321 */ "80458", "69902", "34870", "88684", "49762", ! 3965: "40801", "86291", "18194", "90366", "82639", ! 3966: /* 322 */ "53844", "96326", "65728", "48563", "26027", ! 3967: "52692", "62406", "76294", "41848", "63010", ! 3968: /* 323 */ "69841", "29451", "36170", "21529", "16525", ! 3969: "64326", "22086", "24469", "57407", "96033", ! 3970: /* 324 */ "37771", "31002", "18311", "93285", "31948", ! 3971: "14331", "58335", "15977", "80336", "81667", ! 3972: /* 325 */ "27286", "24361", "61638", "57580", "95270", ! 3973: "46180", "76990", "53031", "94366", "02727", ! 3974: /* 326 */ "49944", "19278", "05756", "51875", "53445", ! 3975: "33342", "01965", "07937", "10054", "97712", ! 3976: /* 327 */ "87693", "58124", "46064", "39133", "77385", ! 3977: "09605", "65359", "70113", "90563", "86637", ! 3978: /* 328 */ "94282", "12025", "31926", "24541", "23854", ! 3979: "58407", "32131", "92845", "20714", "27898", ! 3980: /* 329 */ "26917", "50326", "35145", "50859", "72119", ! 3981: "95094", "29441", "42301", "62460", "75252", ! 3982: /* 330 */ "94267", "38422", "73047", "24200", "85349", ! 3983: "72049", "91723", "97802", "98496", "12734", ! 3984: /* 331 */ "73432", "10371", "57213", "53300", "80847", ! 3985: "46229", "07099", "72961", "13767", "65654", ! 3986: /* 332 */ "31102", "82119", "96946", "65919", "81083", ! 3987: "03819", "57888", "57908", "16849", "77111", ! 3988: /* 333 */ "41429", "92261", "45263", "01172", "55926", ! 3989: "78835", "27697", "48420", "58865", "41207", ! 3990: /* 334 */ "21406", "08582", "10785", "36233", "12237", ! 3991: "07866", "13706", "92551", "11021", "63813", ! 3992: /* 335 */ "71512", "65206", "37768", "94325", "14721", ! 3993: "20990", "54235", "71986", "05345", "56239", ! 3994: /* 336 */ "52028", "01419", "07215", "55067", "11669", ! 3995: "21738", "66605", "69621", "69827", "08537", ! 3996: /* 337 */ "18638", "60982", "28151", "98885", "76431", ! 3997: "25566", "03085", "23639", "30849", "63986", ! 3998: /* 338 */ "73287", "26201", "36174", "14106", "54102", ! 3999: "57041", "16141", "64174", "03591", "90024", ! 4000: /* 339 */ "73332", "31254", "17288", "59809", "25061", ! 4001: "51612", "47951", "16570", "43330", "79213", ! 4002: /* 340 */ "11354", "55585", "19646", "99246", "37564", ! 4003: "32660", "20632", "21124", "60597", "69315", ! 4004: /* 341 */ "31312", "57741", "85108", "21615", "24365", ! 4005: "27684", "16124", "33888", "14966", "35303", ! 4006: /* 342 */ "69921", "15795", "04020", "67672", "86816", ! 4007: "63027", "84470", "45605", "44887", "26222", ! 4008: /* 343 */ "79888", "58982", "22466", "98844", "48353", ! 4009: "60666", "58256", "31140", "93507", "69561", ! 4010: /* 344 */ "06256", "88526", "18655", "00865", "75247", ! 4011: "00264", "65957", "98261", "72706", "36396", ! 4012: /* 345 */ "46065", "85700", "32121", "99975", "73627", ! 4013: "78812", "89638", "86602", "96758", "65099", ! 4014: /* 346 */ "52777", "46792", "13790", "55240", "52002", ! 4015: "10313", "91933", "71231", "10053", "78416", ! 4016: /* 347 */ "54563", "96004", "42215", "30094", "45958", ! 4017: "48437", "49591", "50483", "13422", "69108", ! 4018: /* 348 */ "59952", "27896", "40450", "79327", "31962", ! 4019: "46456", "39260", "51479", "61882", "48181", ! 4020: /* 349 */ "50691", "64709", "32902", "10676", "12083", ! 4021: "35771", "79656", "56667", "76783", "03937", ! 4022: /* 350 */ "99859", "10362", "57411", "40986", "35045", ! 4023: "02838", "29255", "64230", "84418", "34988", ! 4024: /* 351 */ "77644", "39892", "77327", "74129", "53444", ! 4025: "35487", "95803", "38640", "20383", "55402", ! 4026: /* 352 */ "25793", "14213", "87082", "42837", "95030", ! 4027: "97198", "61608", "97723", "79390", "35290", ! 4028: /* 353 */ "34683", "81419", "87133", "70447", "53127", ! 4029: "97146", "28299", "56763", "12868", "01145", ! 4030: /* 354 */ "12147", "58158", "92124", "60934", "18414", ! 4031: "97510", "07056", "54488", "20719", "53743", ! 4032: /* 355 */ "91037", "44797", "52110", "08512", "18991", ! 4033: "20129", "31441", "51449", "14661", "71126", ! 4034: /* 356 */ "23180", "68124", "18807", "70997", "21913", ! 4035: "19594", "70355", "73637", "68266", "60775", ! 4036: /* 357 */ "43164", "52643", "96363", "77989", "79332", ! 4037: "39890", "65379", "20405", "52935", "43816", ! 4038: /* 358 */ "92740", "95319", "04538", "60660", "28982", ! 4039: "15328", "80475", "34690", "02293", "19646", ! 4040: /* 359 */ "46524", "96627", "33159", "42081", "08816", ! 4041: "74931", "20674", "08697", "66169", "46460", ! 4042: /* 360 */ "46326", "39923", "60625", "28386", "22919", ! 4043: "19415", "75766", "43668", "31626", "70301", ! 4044: /* 361 */ "67053", "03949", "70082", "02303", "48642", ! 4045: "38429", "94053", "38770", "68137", "68441", ! 4046: /* 362 */ "52928", "70244", "91954", "17401", "92693", ! 4047: "98342", "21451", "84988", "80487", "33807", ! 4048: /* 363 */ "73797", "49494", "41878", "76635", "83227", ! 4049: "76618", "11946", "13451", "87591", "78381", ! 4050: /* 364 */ "21407", "90038", "72638", "69692", "51599", ! 4051: "86413", "32019", "64856", "74730", "41531", ! 4052: /* 365 */ "11064", "01790", "58817", "86400", "66213", ! 4053: "92599", "70905", "78324", "54326", "43659", ! 4054: /* 366 */ "34206", "63132", "38837", "40210", "96346", ! 4055: "16967", "81619", "96503", "14881", "89405", ! 4056: /* 367 */ "32205", "49508", "98425", "02451", "35423", ! 4057: "56072", "36810", "30332", "85998", "49358", ! 4058: /* 368 */ "92748", "84147", "79835", "94867", "41224", ! 4059: "61794", "35066", "82220", "66684", "20096", ! 4060: /* 369 */ "02754", "41731", "37068", "32753", "91059", ! 4061: "13407", "05607", "69384", "53329", "95909", ! 4062: /* 370 */ "44968", "11397", "92973", "50014", "92997", ! 4063: "80968", "93761", "57598", "74703", "07768", ! 4064: /* 371 */ "37978", "73873", "33475", "09720", "97852", ! 4065: "98449", "48722", "84977", "11271", "11728", ! 4066: /* 372 */ "68318", "22312", "78792", "87508", "88466", ! 4067: "72976", "47099", "84126", "38595", "85124", ! 4068: /* 373 */ "64405", "90020", "07492", "52413", "95111", ! 4069: "34455", "86311", "68892", "01074", "60274", ! 4070: /* 374 */ "28136", "19328", "38161", "57475", "13771", ! 4071: "63562", "84207", "94121", "18901", "52768", ! 4072: /* 375 */ "33801", "82087", "86091", "59969", "90398", ! 4073: "56870", "55756", "78841", "98450", "54165", ! 4074: /* 376 */ "55106", "50343", "70519", "14567", "36780", ! 4075: "55450", "19606", "83749", "67562", "64765", ! 4076: /* 377 */ "38543", "16585", "86841", "73742", "08766", ! 4077: "39252", "75678", "75379", "78760", "37279", ! 4078: /* 378 */ "15280", "13558", "95916", "89759", "76686", ! 4079: "76467", "67147", "63110", "94008", "08037", ! 4080: /* 379 */ "35263", "53710", "16667", "79008", "11231", ! 4081: "29397", "67136", "18601", "64502", "90228", ! 4082: /* 380 */ "89109", "72849", "22711", "65547", "34542", ! 4083: "26686", "81678", "87765", "77654", "23664", ! 4084: /* 381 */ "96352", "14106", "32938", "28083", "18633", ! 4085: "80286", "65507", "46197", "52722", "75476", ! 4086: /* 382 */ "77816", "47204", "34876", "45963", "79262", ! 4087: "90181", "84041", "03745", "90041", "30780", ! 4088: /* 383 */ "27226", "92847", "85572", "15308", "80688", ! 4089: "05761", "82638", "13464", "23683", "81015", ! 4090: /* 384 */ "54214", "64175", "43701", "86845", "15569", ! 4091: "50687", "52679", "87696", "08285", "97444", ! 4092: /* 385 */ "47599", "94472", "64150", "87753", "68652", ! 4093: "60726", "26213", "17320", "64553", "81285", ! 4094: /* 386 */ "98126", "12158", "52095", "64833", "00492", ! 4095: "35817", "55571", "91300", "97812", "37507", ! 4096: /* 387 */ "04209", "53515", "64342", "21223", "16662", ! 4097: "43265", "68219", "03529", "43636", "68417", ! 4098: /* 388 */ "53640", "95326", "93381", "37113", "80751", ! 4099: "76469", "96677", "43054", "22937", "31954", ! 4100: /* 389 */ "13266", "34140", "27253", "02734", "99070", ! 4101: "60077", "57988", "93211", "92795", "83795", ! 4102: /* 390 */ "57477", "03941", "39007", "14619", "38320", ! 4103: "93449", "31336", "25279", "97030", "26245", ! 4104: /* 391 */ "47394", "39475", "90621", "23820", "29344", ! 4105: "94859", "91604", "14033", "41868", "14816", ! 4106: /* 392 */ "04075", "66644", "87803", "97815", "99552", ! 4107: "78666", "03942", "08175", "22345", "19983", ! 4108: /* 393 */ "76783", "99044", "20851", "84981", "59052", ! 4109: "77178", "72109", "76475", "21619", "73017", ! 4110: /* 394 */ "06812", "56633", "50612", "55289", "04671", ! 4111: "84419", "94072", "94446", "80603", "32188", ! 4112: /* 395 */ "93415", "23464", "43947", "43728", "74284", ! 4113: "67177", "57105", "31059", "10642", "13803", ! 4114: /* 396 */ "69602", "46961", "66567", "19359", "84676", ! 4115: "63918", "40650", "12923", "15974", "79732", ! 4116: /* 397 */ "20225", "92525", "71179", "04859", "91208", ! 4117: "60430", "05239", "61458", "24089", "68852", ! 4118: /* 398 */ "60171", "29603", "42535", "86365", "93905", ! 4119: "28237", "45317", "60718", "82001", "41679", ! 4120: /* 399 */ "20679", "56304", "70043", "87568", "21386", ! 4121: "59049", "78353", "48696", "77379", "55309", ! 4122: /* 400 */ "23780", "28391", "05940", "55583", "81256", ! 4123: "59418", "97521", "32846", "70761", "90115", ! 4124: /* 401 */ "45325", "05490", "65974", "11186", "15357", ! 4125: "03568", "00450", "96644", "58976", "36211", ! 4126: /* 402 */ "88240", "92457", "89200", "94696", "11370", ! 4127: "91157", "48487", "59501", "56983", "89795", ! 4128: /* 403 */ "42789", "69758", "79701", "29511", "55968", ! 4129: "41472", "89474", "84344", "80517", "07485", ! 4130: /* 404 */ "97523", "17264", "82840", "59556", "37119", ! 4131: "30985", "48866", "60605", "95719", "70417", ! 4132: /* 405 */ "59083", "95137", "76538", "44155", "67286", ! 4133: "57897", "28262", "04052", "00919", "86207", ! 4134: /* 406 */ "79932", "44236", "10089", "44373", "65670", ! 4135: "44285", "06903", "20834", "49701", "95735", ! 4136: /* 407 */ "21149", "03425", "17594", "31427", "14262", ! 4137: "32252", "68540", "39427", "44026", "47257", ! 4138: /* 408 */ "45055", "95091", "08367", "28381", "57375", ! 4139: "41562", "83883", "27715", "10122", "67745", ! 4140: /* 409 */ "46497", "28626", "87297", "36568", "39483", ! 4141: "11385", "63292", "92305", "78683", "06146", ! 4142: /* 410 */ "81905", "15038", "38338", "51206", "65749", ! 4143: "34119", "71516", "74068", "51094", "06665", ! 4144: /* 411 */ "91884", "66762", "11428", "70908", "21506", ! 4145: "00480", "94183", "78484", "66507", "75901", ! 4146: /* 412 */ "25728", "52539", "86806", "69944", "65036", ! 4147: "27882", "02530", "04918", "74351", "65737", ! 4148: /* 413 */ "89178", "08791", "39342", "94963", "22581", ! 4149: "56917", "17541", "83578", "75376", "65202", ! 4150: /* 414 */ "30935", "79270", "91986", "99286", "45236", ! 4151: "44720", "81915", "70881", "45886", "43213", ! 4152: /* 415 */ "49789", "97081", "16075", "20517", "69980", ! 4153: "25310", "91953", "01759", "67635", "88933", ! 4154: /* 416 */ "54558", "18395", "73375", "62251", "58871", ! 4155: "09870", "70538", "48936", "07757", "90374", ! 4156: /* 417 */ "56631", "88862", "30487", "38794", "36079", ! 4157: "32712", "11130", "55451", "25137", "38785", ! 4158: /* 418 */ "83558", "31960", "69473", "45950", "18225", ! 4159: "09871", "88502", "75179", "11551", "75664", ! 4160: /* 419 */ "74321", "67351", "27703", "83717", "18913", ! 4161: "42470", "08816", "37627", "14288", "62831", ! 4162: /* 420 */ "44047", "67612", "72738", "26995", "50933", ! 4163: "63758", "50003", "43693", "52661", "55852", ! 4164: /* 421 */ "52372", "59042", "37595", "04931", "73622", ! 4165: "68387", "86478", "40997", "05245", "75300", ! 4166: /* 422 */ "24902", "59609", "35653", "15970", "37681", ! 4167: "69365", "22236", "86374", "65550", "00343", ! 4168: /* 423 */ "98377", "35354", "65770", "15365", "41422", ! 4169: "71356", "16630", "40044", "19290", "66449", ! 4170: /* 424 */ "53629", "79452", "71674", "30260", "97303", ! 4171: "06487", "62789", "13005", "70152", "22501", ! 4172: /* 425 */ "49867", "89294", "59232", "31776", "54919", ! 4173: "99851", "05438", "01096", "72269", "50486", ! 4174: /* 426 */ "16719", "06144", "82041", "38332", "64452", ! 4175: "31840", "99287", "59928", "25503", "08407", ! 4176: /* 427 */ "46970", "45907", "99238", "74547", "19704", ! 4177: "72035", "26542", "54600", "79172", "58779", ! 4178: /* 428 */ "35747", "78956", "11478", "41195", "58135", ! 4179: "63856", "33037", "45753", "60159", "25193", ! 4180: /* 429 */ "71838", "07526", "07985", "60714", "88627", ! 4181: "75790", "38454", "96110", "39237", "19792", ! 4182: /* 430 */ "34534", "70169", "24805", "63215", "38175", ! 4183: "38784", "38855", "24826", "50917", "25147", ! 4184: /* 431 */ "17082", "26997", "32295", "10894", "21805", ! 4185: "65245", "85407", "37926", "69214", "38579", ! 4186: /* 432 */ "84721", "23544", "88548", "65626", "75517", ! 4187: "69737", "55626", "52175", "21697", "19453", ! 4188: /* 433 */ "16908", "82841", "24060", "40285", "19195", ! 4189: "80281", "89322", "15232", "70043", "60691", ! 4190: /* 434 */ "86370", "91949", "19017", "83846", "77869", ! 4191: "14321", "95102", "87073", "71467", "31305", ! 4192: /* 435 */ "64677", "80358", "52629", "79419", "22359", ! 4193: "87867", "48296", "50141", "46807", "82184", ! 4194: /* 436 */ "95812", "84665", "74511", "59914", "04146", ! 4195: "90417", "58508", "62875", "17630", "21868", ! 4196: /* 437 */ "09199", "30322", "33352", "43374", "25473", ! 4197: "04119", "63086", "14147", "14863", "38020", ! 4198: /* 438 */ "44757", "98628", "57916", "22199", "11865", ! 4199: "42911", "62651", "78290", "09392", "77294", ! 4200: /* 439 */ "63168", "21043", "17409", "13786", "27475", ! 4201: "75979", "89668", "43596", "74316", "84489", ! 4202: /* 440 */ "54941", "95992", "45445", "41059", "55142", ! 4203: "15214", "42903", "16799", "88254", "95984", ! 4204: /* 441 */ "48575", "77822", "21067", "57238", "35352", ! 4205: "96779", "89564", "23797", "99937", "46379", ! 4206: /* 442 */ "27119", "16060", "30302", "95327", "12849", ! 4207: "38111", "97090", "07598", "78473", "63079", ! 4208: /* 443 */ "18570", "72803", "70040", "91385", "96436", ! 4209: "96263", "17368", "56188", "85999", "50026", ! 4210: /* 444 */ "36050", "73736", "13351", "48321", "28357", ! 4211: "51718", "65636", "72903", "21584", "21060", ! 4212: /* 445 */ "39829", "15564", "04716", "14594", "22363", ! 4213: "97639", "65937", "17802", "31535", "42767", ! 4214: /* 446 */ "98761", "30987", "57657", "33398", "63053", ! 4215: "25926", "20944", "19306", "81727", "02695", ! 4216: /* 447 */ "97479", "79172", "72764", "66446", "78864", ! 4217: "12698", "15812", "97209", "38827", "91016", ! 4218: /* 448 */ "91281", "57875", "45228", "49211", "69755", ! 4219: "99224", "43999", "62879", "08879", "80015", ! 4220: /* 449 */ "74396", "57146", "64665", "31159", "06980", ! 4221: "79069", "37409", "75037", "69977", "85919", ! 4222: /* 450 */ "42826", "06974", "61063", "97640", "13433", ! 4223: "92528", "91311", "08440", "38840", "22362", ! 4224: /* 451 */ "93929", "01836", "36590", "75052", "89475", ! 4225: "15437", "65648", "99012", "70236", "12307", ! 4226: /* 452 */ "83585", "00414", "62851", "48787", "28447", ! 4227: "21702", "57033", "29633", "44760", "34165", ! 4228: /* 453 */ "27548", "37516", "24343", "63046", "02081", ! 4229: "20378", "19510", "42226", "97134", "68739", ! 4230: /* 454 */ "32982", "56455", "53129", "77693", "25022", ! 4231: "55534", "99375", "30086", "98001", "07432", ! 4232: /* 455 */ "67126", "76656", "29347", "28492", "43108", ! 4233: "64736", "32278", "84816", "80440", "30461", ! 4234: /* 456 */ "00818", "09136", "01952", "48442", "91058", ! 4235: "92590", "10443", "05195", "34009", "32141", ! 4236: /* 457 */ "62209", "43740", "54102", "76895", "98172", ! 4237: "31583", "04155", "66492", "58981", "16591", ! 4238: /* 458 */ "11331", "06838", "03818", "77063", "12523", ! 4239: "45570", "68970", "70055", "77751", "73743", ! 4240: /* 459 */ "71732", "04704", "61384", "57343", "66682", ! 4241: "44500", "89745", "10436", "67202", "36455", ! 4242: /* 460 */ "42467", "88801", "91280", "01056", "27534", ! 4243: "81619", "79004", "25824", "66362", "33280", ! 4244: /* 461 */ "20706", "31929", "57422", "18730", "96197", ! 4245: "22101", "47592", "02180", "18287", "82310", ! 4246: /* 462 */ "60430", "59627", "26471", "07794", "60475", ! 4247: "76713", "45427", "89654", "14370", "81674", ! 4248: /* 463 */ "41246", "98416", "08669", "48883", "77154", ! 4249: "09806", "94015", "60347", "20027", "08405", ! 4250: /* 464 */ "33150", "27368", "53375", "70171", "59431", ! 4251: "14534", "34018", "85665", "77797", "17944", ! 4252: /* 465 */ "49602", "74391", "48830", "55029", "10371", ! 4253: "94261", "16658", "68400", "44148", "28150", ! 4254: /* 466 */ "40364", "90913", "73151", "64463", "50058", ! 4255: "78191", "84439", "82478", "62398", "03113", ! 4256: /* 467 */ "17578", "12830", "06571", "95934", "09132", ! 4257: "25287", "78731", "80683", "67207", "76597", ! 4258: /* 468 */ "42096", "34934", "76609", "52553", "47508", ! 4259: "71561", "08038", "83011", "72577", "95790", ! 4260: /* 469 */ "40076", "20292", "32138", "61197", "95476", ! 4261: "23123", "26648", "13611", "48452", "39963", ! 4262: /* 470 */ "85857", "04855", "27029", "01542", "72443", ! 4263: "53688", "82635", "56264", "07977", "23090", ! 4264: /* 471 */ "93553", "65434", "12124", "91087", "87800", ! 4265: "95675", "99419", "44659", "30382", "55263", ! 4266: /* 472 */ "82514", "86800", "16781", "65977", "65946", ! 4267: "13033", "93895", "04056", "75895", "47878", ! 4268: /* 473 */ "91309", "51233", "81409", "46773", "69135", ! 4269: "56906", "84493", "34530", "84534", "38312", ! 4270: /* 474 */ "54574", "92933", "77341", "20839", "36126", ! 4271: "01143", "35356", "35459", "07959", "98335", ! 4272: /* 475 */ "53266", "36146", "78047", "50607", "22486", ! 4273: "63308", "08996", "96056", "39085", "26567", ! 4274: /* 476 */ "06779", "62663", "30523", "47881", "41279", ! 4275: "49864", "82248", "78333", "29466", "48151", ! 4276: /* 477 */ "41957", "93235", "53308", "22682", "90722", ! 4277: "54478", "07235", "34306", "15827", "20121", ! 4278: /* 478 */ "96837", "06283", "80172", "66109", "92592", ! 4279: "48238", "76428", "94546", "45430", "16288", ! 4280: /* 479 */ "74839", "00740", "25553", "83767", "35900", ! 4281: "05998", "07493", "46755", "11449", "88824", ! 4282: /* 480 */ "44906", "33143", "07454", "56652", "34755", ! 4283: "63992", "59674", "65131", "46358", "12799" ! 4284: }; ! 4285: ! 4286: ! 4287: ! 4288: typedef unsigned long int sBox[256]; ! 4289: ! 4290: ! 4291: /* The standard S boxes are defined in another file */ ! 4292: extern sBox standardSBoxes[SBoxCount]; ! 4293: ! 4294: ! 4295: ! 4296: /* The following routine is a simple error exit routine -- it prints a ! 4297: message and aborts */ ! 4298: void errAbort (s) ! 4299: char *s; ! 4300: { ! 4301: int length; ! 4302: ! 4303: for (length = 0; s[length] != 0; length++); ! 4304: if (write (errorFile, s, length) != length) exit(2); ! 4305: if (write (errorFile, "\n", 1) != 1) exit(2); ! 4306: exit (1); ! 4307: }; ! 4308: ! 4309: ! 4310: ! 4311: void swapBytesInSBox (anSBox, row1, row2, column) ! 4312: sBox anSBox; ! 4313: unsigned int row1, row2, column; ! 4314: ! 4315: /* Exchanges two bytes in a column in 'anSBox'. row1 and row2 are integers ! 4316: between 0 and 255 inclusive. 'column' is either 0, 1, 2 or 3 and refers ! 4317: to the byte position in a 32-bit word. 0 is the left-most byte. */ ! 4318: { ! 4319: /* mask designates the bytes to be exchanged */ ! 4320: unsigned long int mask; ! 4321: unsigned long int temp; ! 4322: ! 4323: mask = 0xFF000000; ! 4324: ! 4325: /* 'column' must be between 0 and 3 */ ! 4326: if (column > 3) ! 4327: errAbort ("bad column passed to swapBytesInSBox"); ! 4328: ! 4329: /* position the mask in the appropriate column */ ! 4330: mask >>= (column * 8); ! 4331: ! 4332: ! 4333: /* Swap the bytes indicated by 'mask' */ ! 4334: temp = anSBox[row1]; ! 4335: anSBox[row1] = (anSBox[row1] & (~mask)) | (anSBox[row2] & mask); ! 4336: anSBox[row2] = (anSBox[row2] & (~mask)) | (temp & mask); ! 4337: } ! 4338: ! 4339: ! 4340: unsigned int randomDigit () ! 4341: /* generate a random digit in the range from 0 to 9, inclusive. Generate the ! 4342: digit simply by getting the next random digit from the RAND table of ! 4343: random digits */ ! 4344: { ! 4345: if (locationIn5DigitGroup == 5) { ! 4346: locationIn5DigitGroup = 0; ! 4347: locationInRANDtable++; ! 4348: }; ! 4349: if (locationInRANDtable >= sizeOfRANDtableIn5DigitGroups) ! 4350: errAbort ("Error in randomDigit -- attempt to ask for too many random digits"); ! 4351: return (RANDtable[locationInRANDtable][locationIn5DigitGroup++] - '0'); ! 4352: }; ! 4353: ! 4354: ! 4355: unsigned int randomInRange (low, high) ! 4356: unsigned int low, high; ! 4357: ! 4358: /* Returns a random integer in the range from low to high, inclusive */ ! 4359: /* gets random digits from RANDtable */ ! 4360: { ! 4361: unsigned int range; /* contains the actual range needed */ ! 4362: ! 4363: /* the max possible random numbers given a certain number of digits */ ! 4364: unsigned int maximum; ! 4365: unsigned int random; /* the random number composed by appending ! 4366: digits */ ! 4367: ! 4368: range = (high - low) + 1; ! 4369: do { ! 4370: random = 0; /* initialize */ ! 4371: maximum = 1; /* initialize */ ! 4372: /* loop until random has as many digits as range */ ! 4373: while (maximum < range) { ! 4374: maximum *= 10; /* 0-n = n+1 possible random numbers */ ! 4375: /* add another digit to the low end */ ! 4376: random = (random * 10) + randomDigit (); ! 4377: } ! 4378: } ! 4379: /* if random is not evenly mappable to range, try again */ ! 4380: /* the operation (maximum/range) TRUNCATES the result to an unsigned ! 4381: int */ ! 4382: while (random >= ((unsigned int) (maximum / range)) * range); ! 4383: /* map random to the range and add low to stay within (low,high) */ ! 4384: return (low + (random % range)); ! 4385: } ! 4386: ! 4387: void checkSBoxes () ! 4388: /* computes the standard S boxes from the RAND table of random digits, ! 4389: then compares it with standardSBoxes -- they should be equal. ! 4390: Uses RANDtable as the source for the random digits. */ ! 4391: { ! 4392: sBox SBoxFromRand[SBoxCount]; ! 4393: int SBoxIndex; ! 4394: ! 4395: /* column is from the set {0, 1, 2, 3}. 0 is the leftmost byte */ ! 4396: unsigned int column, row; ! 4397: unsigned long int longRow; ! 4398: ! 4399: for (SBoxIndex = 0; SBoxIndex < SBoxCount; SBoxIndex++) { ! 4400: ! 4401: /* Fill initial S box with a trivial permutation (0-255) */ ! 4402: for (longRow = 0; longRow < 256; longRow++) ! 4403: SBoxFromRand[SBoxIndex][longRow] = ! 4404: longRow | (longRow << 8) | (longRow << 16) | (longRow << 24); ! 4405: ! 4406: for (column = 0; column < 4; column++) { ! 4407: for (row = 0; row < 255 /* 255 is correct */ ; row++) ! 4408: /* exchange random rows in the column. ! 4409: This ensures the column remains a permutation ! 4410: of (0-255) */ ! 4411: swapBytesInSBox (SBoxFromRand[SBoxIndex], ! 4412: row, randomInRange (row, 255), column); ! 4413: } ! 4414: for (row = 0; row < 256; row++) ! 4415: if (SBoxFromRand[SBoxIndex][row] != standardSBoxes[SBoxIndex][row]) ! 4416: errAbort ("Error -- can't verify S boxes"); ! 4417: ! 4418: printf(" Verified SBox[%d]\n",SBoxIndex); ! 4419: }; /* End of for (SBoxIndex.... */ ! 4420: }; ! 4421: ! 4422: ! 4423: ! 4424: void main () ! 4425: ! 4426: { int i; ! 4427: ! 4428: ! 4429: /* Test the standard S boxes to make sure they haven't been ! 4430: damaged. */ ! 4431: /* Test to make sure each column is a permutation. */ ! 4432: for (i = 0; i < SBoxCount; i++) { ! 4433: char testArray[256]; ! 4434: int testShift = 0; ! 4435: int j; ! 4436: ! 4437: for (testShift = 0; testShift < 32; testShift += 8) { ! 4438: for (j = 0; j < 256; j++) ! 4439: testArray[j] = 0; ! 4440: for (j = 0; j < 256; j++) ! 4441: testArray[(standardSBoxes[i][j] >> testShift) & 0xff]++; ! 4442: for (j = 0; j < 256; j++) ! 4443: if (testArray[j] != 1) ! 4444: errAbort ("Table error -- the standard S box is corrupted"); ! 4445: }; ! 4446: }; ! 4447: ! 4448: /* It looks okay. Now check things out some more */ ! 4449: ! 4450: printf(" The standard S Boxes are permutations.\n"); ! 4451: ! 4452: checkSBoxes (); ! 4453: ! 4454: ! 4455: exit (0); ! 4456: }; ! 4457: *-*-END-*-*
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.