Annotation of researchv10no/cmd/sum/snefru.bundle, revision 1.1.1.1

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-*-*

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.