Home | History | Annotate | Line # | Download | only in cast128
cast128.c revision 1.2
      1  1.2   itojun /*	$NetBSD: cast128.c,v 1.2 2000/11/06 14:11:41 itojun Exp $	*/
      2  1.2   itojun /*	$KAME: cast128.c,v 1.4 2000/11/06 13:58:08 itojun Exp $	*/
      3  1.1  thorpej 
      4  1.1  thorpej /*
      5  1.1  thorpej  * heavily modified by Tomomi Suzuki <suzuki (at) grelot.elec.ryukoku.ac.jp>
      6  1.1  thorpej  */
      7  1.1  thorpej /*
      8  1.1  thorpej  * The CAST-128 Encryption Algorithm (RFC 2144)
      9  1.1  thorpej  *
     10  1.1  thorpej  * original implementation <Hideo "Sir MaNMOS" Morisita>
     11  1.1  thorpej  * 1997/08/21
     12  1.1  thorpej  */
     13  1.1  thorpej /*
     14  1.1  thorpej  * Copyright (C) 1997 Hideo "Sir MANMOS" Morishita
     15  1.1  thorpej  * All rights reserved.
     16  1.1  thorpej  *
     17  1.1  thorpej  * Redistribution and use in source and binary forms, with or without
     18  1.1  thorpej  * modification, are permitted provided that the following conditions
     19  1.1  thorpej  * are met:
     20  1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
     21  1.1  thorpej  *    notice, this list of conditions and the following disclaimer.
     22  1.1  thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     23  1.1  thorpej  *    notice, this list of conditions and the following disclaimer in the
     24  1.1  thorpej  *    documentation and/or other materials provided with the distribution.
     25  1.1  thorpej  *
     26  1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY Hideo "Sir MaNMOS" Morishita ``AS IS'' AND
     27  1.1  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     28  1.1  thorpej  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     29  1.1  thorpej  * ARE DISCLAIMED.  IN NO EVENT SHALL Hideo "Sir MaNMOS" Morishita BE LIABLE
     30  1.1  thorpej  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     31  1.1  thorpej  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     32  1.1  thorpej  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     33  1.1  thorpej  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     34  1.1  thorpej  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     35  1.1  thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     36  1.1  thorpej  * SUCH DAMAGE.
     37  1.1  thorpej  */
     38  1.1  thorpej 
     39  1.1  thorpej #include <sys/param.h>
     40  1.2   itojun #ifdef _KERNEL
     41  1.1  thorpej #include <sys/systm.h>
     42  1.2   itojun #else
     43  1.2   itojun #include <string.h>
     44  1.2   itojun #endif
     45  1.1  thorpej #include <crypto/cast128/cast128.h>
     46  1.1  thorpej #include <crypto/cast128/cast128_subkey.h>
     47  1.1  thorpej 
     48  1.1  thorpej 
     49  1.1  thorpej static u_int32_t S1[];
     50  1.1  thorpej static u_int32_t S2[];
     51  1.1  thorpej static u_int32_t S3[];
     52  1.1  thorpej static u_int32_t S4[];
     53  1.1  thorpej static u_int32_t S5[];
     54  1.1  thorpej static u_int32_t S6[];
     55  1.1  thorpej static u_int32_t S7[];
     56  1.1  thorpej static u_int32_t S8[];
     57  1.1  thorpej 
     58  1.1  thorpej 
     59  1.1  thorpej /*
     60  1.1  thorpej  * Step 1
     61  1.1  thorpej  */
     62  1.1  thorpej void set_cast128_subkey(u_int32_t *subkey, u_int8_t *key)
     63  1.1  thorpej {
     64  1.1  thorpej 	u_int32_t buf[8]; /* for x0x1x2x3, x4x5x6x7 ..., z0z1z2z3, ... */
     65  1.1  thorpej 
     66  1.1  thorpej 	buf[0] = (key[ 0] << 24) | (key[ 1] << 16) | (key[ 2] << 8)
     67  1.1  thorpej 		| key[ 3];
     68  1.1  thorpej 	buf[1] = (key[ 4] << 24) | (key[ 5] << 16) | (key[ 6] << 8)
     69  1.1  thorpej 		| key[ 7];
     70  1.1  thorpej 	buf[2] = (key[ 8] << 24) | (key[ 9] << 16) | (key[10] << 8)
     71  1.1  thorpej 		| key[11];
     72  1.1  thorpej 	buf[3] = (key[12] << 24) | (key[13] << 16) | (key[14] << 8)
     73  1.1  thorpej 		| key[15];
     74  1.1  thorpej 
     75  1.1  thorpej 	/* masking subkey */
     76  1.1  thorpej 	z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8];
     77  1.1  thorpej 	z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA];
     78  1.1  thorpej 	z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9];
     79  1.1  thorpej 	zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB];
     80  1.1  thorpej 	subkey[0]  = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2];
     81  1.1  thorpej 	subkey[1]  = S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6];
     82  1.1  thorpej 	subkey[2]  = S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9];
     83  1.1  thorpej 	subkey[3]  = S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC];
     84  1.1  thorpej 
     85  1.1  thorpej 	x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0];
     86  1.1  thorpej 	x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2];
     87  1.1  thorpej 	x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1];
     88  1.1  thorpej 	xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3];
     89  1.1  thorpej 	subkey[4]  = S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8];
     90  1.1  thorpej 	subkey[5]  = S5[x1] ^ S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD];
     91  1.1  thorpej 	subkey[6]  = S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3];
     92  1.1  thorpej 	subkey[7]  = S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7];
     93  1.1  thorpej 
     94  1.1  thorpej 	z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8];
     95  1.1  thorpej 	z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA];
     96  1.1  thorpej 	z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9];
     97  1.1  thorpej 	zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB];
     98  1.1  thorpej 	subkey[8]  = S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9];
     99  1.1  thorpej 	subkey[9]  = S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC];
    100  1.1  thorpej 	subkey[10] = S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2];
    101  1.1  thorpej 	subkey[11] = S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6];
    102  1.1  thorpej 
    103  1.1  thorpej 	x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0];
    104  1.1  thorpej 	x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2];
    105  1.1  thorpej 	x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1];
    106  1.1  thorpej 	xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3];
    107  1.1  thorpej 	subkey[12] = S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3];
    108  1.1  thorpej 	subkey[13] = S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7];
    109  1.1  thorpej 	subkey[14] = S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8];
    110  1.1  thorpej 	subkey[15] = S5[xE] ^ S6[xF] ^ S7[x1] ^ S8[x0] ^ S8[xD];
    111  1.1  thorpej 
    112  1.1  thorpej 	/* rotate subkey (least significast 5 bits) */
    113  1.1  thorpej 	z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8];
    114  1.1  thorpej 	z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA];
    115  1.1  thorpej 	z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9];
    116  1.1  thorpej 	zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB];
    117  1.1  thorpej 	subkey[16] = (S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2]) & 0x1f;
    118  1.1  thorpej 	subkey[17] = (S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6]) & 0x1f;
    119  1.1  thorpej 	subkey[18] = (S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9]) & 0x1f;
    120  1.1  thorpej 	subkey[19] = (S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC]) & 0x1f;
    121  1.1  thorpej 
    122  1.1  thorpej 	x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0];
    123  1.1  thorpej 	x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2];
    124  1.1  thorpej 	x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1];
    125  1.1  thorpej 	xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3];
    126  1.1  thorpej 	subkey[20] = (S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8]) & 0x1f;
    127  1.1  thorpej 	subkey[21] = (S5[x1] ^ S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD]) & 0x1f;
    128  1.1  thorpej 	subkey[22] = (S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3]) & 0x1f;
    129  1.1  thorpej 	subkey[23] = (S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7]) & 0x1f;
    130  1.1  thorpej 
    131  1.1  thorpej 	z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8];
    132  1.1  thorpej 	z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA];
    133  1.1  thorpej 	z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9];
    134  1.1  thorpej 	zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB];
    135  1.1  thorpej 	subkey[24] = (S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9]) & 0x1f;
    136  1.1  thorpej 	subkey[25] = (S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC]) & 0x1f;
    137  1.1  thorpej 	subkey[26] = (S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2]) & 0x1f;
    138  1.1  thorpej 	subkey[27] = (S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6]) & 0x1f;
    139  1.1  thorpej 
    140  1.1  thorpej 	x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0];
    141  1.1  thorpej 	x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2];
    142  1.1  thorpej 	x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1];
    143  1.1  thorpej 	xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3];
    144  1.1  thorpej 	subkey[28] = (S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3]) & 0x1f;
    145  1.1  thorpej 	subkey[29] = (S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7]) & 0x1f;
    146  1.1  thorpej 	subkey[30] = (S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8]) & 0x1f;
    147  1.1  thorpej 	subkey[31] = (S5[xE] ^ S6[xF] ^ S7[x1] ^ S8[x0] ^ S8[xD]) & 0x1f;
    148  1.1  thorpej }
    149  1.1  thorpej 
    150  1.1  thorpej 
    151  1.1  thorpej #define	CAST128_TYPE1(rc, d, km, kr) { \
    152  1.1  thorpej 	u_int32_t x = circular_leftshift(((km)+(d)), (kr)); \
    153  1.1  thorpej 	(rc) = ((S1[byte0(x)] ^ S2[byte1(x)]) - S3[byte2(x)]) + S4[byte3(x)]; \
    154  1.1  thorpej }
    155  1.1  thorpej 
    156  1.1  thorpej #define	CAST128_TYPE2(rc, d, km, kr) { \
    157  1.1  thorpej 	u_int32_t x = circular_leftshift(((km)^(d)), (kr)); \
    158  1.1  thorpej 	(rc) = ((S1[byte0(x)] - S2[byte1(x)]) + S3[byte2(x)]) ^ S4[byte3(x)]; \
    159  1.1  thorpej }
    160  1.1  thorpej 
    161  1.1  thorpej #define	CAST128_TYPE3(rc, d, km, kr) { \
    162  1.1  thorpej 	u_int32_t x = circular_leftshift(((km)-(d)), (kr)); \
    163  1.1  thorpej 	(rc) = ((S1[byte0(x)] + S2[byte1(x)]) ^ S3[byte2(x)]) - S4[byte3(x)]; \
    164  1.1  thorpej }
    165  1.1  thorpej 
    166  1.1  thorpej 
    167  1.1  thorpej void cast128_encrypt_round16(u_int8_t *c, const u_int8_t *m,
    168  1.1  thorpej 				u_int32_t *subkey)
    169  1.1  thorpej {
    170  1.1  thorpej 	u_int32_t l;	/* left 32bit */
    171  1.1  thorpej 	u_int32_t r;	/* right 32bit */
    172  1.1  thorpej 	u_int32_t br;	/* backup right 32bit */
    173  1.1  thorpej 	u_int32_t rc;	/* result code of CAST128_TYPE?() */
    174  1.1  thorpej 	u_int32_t *km, *kr;
    175  1.1  thorpej 
    176  1.1  thorpej 	/* Step 2 */
    177  1.1  thorpej 	l = (m[0] << 24) | (m[1] << 16) | (m[2] << 8) | m[3];
    178  1.1  thorpej 	r = (m[4] << 24) | (m[5] << 16) | (m[6] << 8) | m[7];
    179  1.1  thorpej 
    180  1.1  thorpej 	/* Step 3 */
    181  1.1  thorpej 	km = subkey;
    182  1.1  thorpej 	kr = subkey + 16;
    183  1.1  thorpej 
    184  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    185  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    186  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    187  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    188  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    189  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    190  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    191  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    192  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    193  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    194  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    195  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    196  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    197  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    198  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    199  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br;
    200  1.1  thorpej 
    201  1.1  thorpej 	/* Step 4 */
    202  1.1  thorpej 	c[0] = (r >> 24) & 0xff;
    203  1.1  thorpej 	c[1] = (r >> 16) & 0xff;
    204  1.1  thorpej 	c[2] = (r >> 8) & 0xff;
    205  1.1  thorpej 	c[3] = r & 0xff;
    206  1.1  thorpej 	c[4] = (l >> 24) & 0xff;
    207  1.1  thorpej 	c[5] = (l >> 16) & 0xff;
    208  1.1  thorpej 	c[6] = (l >> 8) & 0xff;
    209  1.1  thorpej 	c[7] = l & 0xff;
    210  1.1  thorpej }
    211  1.1  thorpej 
    212  1.1  thorpej 
    213  1.1  thorpej void cast128_decrypt_round16(u_int8_t *m, const u_int8_t *c,
    214  1.1  thorpej 				u_int32_t *subkey)
    215  1.1  thorpej {
    216  1.1  thorpej 	u_int32_t l;	/* left 32bit */
    217  1.1  thorpej 	u_int32_t r;	/* right 32bit */
    218  1.1  thorpej 	u_int32_t bl;	/* backup left 32bit */
    219  1.1  thorpej 	u_int32_t rc;	/* result code of CAST128_TYPE?() */
    220  1.1  thorpej 	u_int32_t *km, *kr;
    221  1.1  thorpej 
    222  1.1  thorpej 	/* Step 2 */
    223  1.1  thorpej 	r = (c[0] << 24) | (c[1] << 16) | (c[2] << 8) | c[3];
    224  1.1  thorpej 	l = (c[4] << 24) | (c[5] << 16) | (c[6] << 8) | c[7];
    225  1.1  thorpej 
    226  1.1  thorpej 	/* Step 3 */
    227  1.1  thorpej 	km = subkey + 15;
    228  1.1  thorpej 	kr = subkey + 31;
    229  1.1  thorpej 
    230  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    231  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    232  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    233  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    234  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    235  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    236  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    237  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    238  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    239  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    240  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    241  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    242  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    243  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    244  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    245  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl;
    246  1.1  thorpej 
    247  1.1  thorpej 	/* Step 4 */
    248  1.1  thorpej 	m[0] = (l >> 24) & 0xff;
    249  1.1  thorpej 	m[1] = (l >> 16) & 0xff;
    250  1.1  thorpej 	m[2] = (l >> 8) & 0xff;
    251  1.1  thorpej 	m[3] = l & 0xff;
    252  1.1  thorpej 	m[4] = (r >> 24) & 0xff;
    253  1.1  thorpej 	m[5] = (r >> 16) & 0xff;
    254  1.1  thorpej 	m[6] = (r >> 8) & 0xff;
    255  1.1  thorpej 	m[7] = r & 0xff;
    256  1.1  thorpej }
    257  1.1  thorpej 
    258  1.1  thorpej 
    259  1.1  thorpej void cast128_encrypt_round12(u_int8_t *c, const u_int8_t *m,
    260  1.1  thorpej 				u_int32_t *subkey)
    261  1.1  thorpej {
    262  1.1  thorpej 	u_int32_t l;	/* left 32bit */
    263  1.1  thorpej 	u_int32_t r;	/* right 32bit */
    264  1.1  thorpej 	u_int32_t br;	/* backup right 32bit */
    265  1.1  thorpej 	u_int32_t rc;	/* result code of CAST128_TYPE?() */
    266  1.1  thorpej 	u_int32_t *km, *kr;
    267  1.1  thorpej 
    268  1.1  thorpej 	/* Step 2 */
    269  1.1  thorpej 	l = (m[0] << 24) | (m[1] << 16) | (m[2] << 8) | m[3];
    270  1.1  thorpej 	r = (m[4] << 24) | (m[5] << 16) | (m[6] << 8) | m[7];
    271  1.1  thorpej 
    272  1.1  thorpej 	/* Step 3 */
    273  1.1  thorpej 	km = subkey;
    274  1.1  thorpej 	kr = subkey + 16;
    275  1.1  thorpej 
    276  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    277  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    278  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    279  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    280  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    281  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    282  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    283  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    284  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    285  1.1  thorpej 	br = r; CAST128_TYPE1(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    286  1.1  thorpej 	br = r; CAST128_TYPE2(rc, r, *km, *kr); r = l ^ rc; l = br; km++; kr++;
    287  1.1  thorpej 	br = r; CAST128_TYPE3(rc, r, *km, *kr); r = l ^ rc; l = br;
    288  1.1  thorpej 
    289  1.1  thorpej 	/* Step 4 */
    290  1.1  thorpej 	c[0] = (r >> 24) & 0xff;
    291  1.1  thorpej 	c[1] = (r >> 16) & 0xff;
    292  1.1  thorpej 	c[2] = (r >> 8) & 0xff;
    293  1.1  thorpej 	c[3] = r & 0xff;
    294  1.1  thorpej 	c[4] = (l >> 24) & 0xff;
    295  1.1  thorpej 	c[5] = (l >> 16) & 0xff;
    296  1.1  thorpej 	c[6] = (l >> 8) & 0xff;
    297  1.1  thorpej 	c[7] = l & 0xff;
    298  1.1  thorpej }
    299  1.1  thorpej 
    300  1.1  thorpej 
    301  1.1  thorpej void cast128_decrypt_round12(u_int8_t *m, const u_int8_t *c,
    302  1.1  thorpej 				u_int32_t *subkey)
    303  1.1  thorpej {
    304  1.1  thorpej 	u_int32_t l;	/* left 32bit */
    305  1.1  thorpej 	u_int32_t r;	/* right 32bit */
    306  1.1  thorpej 	u_int32_t bl;	/* backup left 32bit */
    307  1.1  thorpej 	u_int32_t rc;	/* result code of CAST128_TYPE?() */
    308  1.1  thorpej 	u_int32_t *km, *kr;
    309  1.1  thorpej 
    310  1.1  thorpej 	/* Step 2 */
    311  1.1  thorpej 	r = (c[0] << 24) | (c[1] << 16) | (c[2] << 8) | c[3];
    312  1.1  thorpej 	l = (c[4] << 24) | (c[5] << 16) | (c[6] << 8) | c[7];
    313  1.1  thorpej 
    314  1.1  thorpej 	/* Step 3 */
    315  1.1  thorpej 	km = subkey + 11;
    316  1.1  thorpej 	kr = subkey + 27;
    317  1.1  thorpej 
    318  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    319  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    320  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    321  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    322  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    323  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    324  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    325  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    326  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    327  1.1  thorpej 	bl = l; CAST128_TYPE3(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    328  1.1  thorpej 	bl = l; CAST128_TYPE2(rc, l, *km, *kr); l = r ^ rc; r = bl; km--; kr--;
    329  1.1  thorpej 	bl = l; CAST128_TYPE1(rc, l, *km, *kr); l = r ^ rc; r = bl;
    330  1.1  thorpej 
    331  1.1  thorpej 	/* Step 4 */
    332  1.1  thorpej 	m[0] = (l >> 24) & 0xff;
    333  1.1  thorpej 	m[1] = (l >> 16) & 0xff;
    334  1.1  thorpej 	m[2] = (l >> 8) & 0xff;
    335  1.1  thorpej 	m[3] = l & 0xff;
    336  1.1  thorpej 	m[4] = (r >> 24) & 0xff;
    337  1.1  thorpej 	m[5] = (r >> 16) & 0xff;
    338  1.1  thorpej 	m[6] = (r >> 8) & 0xff;
    339  1.1  thorpej 	m[7] = r & 0xff;
    340  1.1  thorpej }
    341  1.1  thorpej 
    342  1.1  thorpej 
    343  1.1  thorpej static u_int32_t S1[] = {
    344  1.1  thorpej 	0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a,
    345  1.1  thorpej 	0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
    346  1.1  thorpej 	0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675,
    347  1.1  thorpej 	0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
    348  1.1  thorpej 	0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2,
    349  1.1  thorpej 	0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
    350  1.1  thorpej 	0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f,
    351  1.1  thorpej 	0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
    352  1.1  thorpej 	0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de,
    353  1.1  thorpej 	0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
    354  1.1  thorpej 	0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f,
    355  1.1  thorpej 	0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
    356  1.1  thorpej 	0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d,
    357  1.1  thorpej 	0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
    358  1.1  thorpej 	0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165,
    359  1.1  thorpej 	0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
    360  1.1  thorpej 	0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272,
    361  1.1  thorpej 	0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
    362  1.1  thorpej 	0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d,
    363  1.1  thorpej 	0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
    364  1.1  thorpej 	0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a,
    365  1.1  thorpej 	0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
    366  1.1  thorpej 	0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f,
    367  1.1  thorpej 	0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
    368  1.1  thorpej 	0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9,
    369  1.1  thorpej 	0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
    370  1.1  thorpej 	0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6,
    371  1.1  thorpej 	0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
    372  1.1  thorpej 	0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9,
    373  1.1  thorpej 	0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
    374  1.1  thorpej 	0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e,
    375  1.1  thorpej 	0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
    376  1.1  thorpej 	0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e,
    377  1.1  thorpej 	0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
    378  1.1  thorpej 	0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82,
    379  1.1  thorpej 	0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
    380  1.1  thorpej 	0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac,
    381  1.1  thorpej 	0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
    382  1.1  thorpej 	0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f,
    383  1.1  thorpej 	0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
    384  1.1  thorpej 	0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491,
    385  1.1  thorpej 	0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
    386  1.1  thorpej 	0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de,
    387  1.1  thorpej 	0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
    388  1.1  thorpej 	0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a,
    389  1.1  thorpej 	0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
    390  1.1  thorpej 	0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79,
    391  1.1  thorpej 	0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
    392  1.1  thorpej 	0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779,
    393  1.1  thorpej 	0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
    394  1.1  thorpej 	0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755,
    395  1.1  thorpej 	0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
    396  1.1  thorpej 	0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb,
    397  1.1  thorpej 	0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
    398  1.1  thorpej 	0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0,
    399  1.1  thorpej 	0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
    400  1.1  thorpej 	0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79,
    401  1.1  thorpej 	0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
    402  1.1  thorpej 	0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298,
    403  1.1  thorpej 	0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
    404  1.1  thorpej 	0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571,
    405  1.1  thorpej 	0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
    406  1.1  thorpej 	0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d,
    407  1.1  thorpej 	0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf,
    408  1.1  thorpej };
    409  1.1  thorpej 
    410  1.1  thorpej static u_int32_t S2[] = {
    411  1.1  thorpej 	0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380,
    412  1.1  thorpej 	0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
    413  1.1  thorpej 	0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba,
    414  1.1  thorpej 	0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
    415  1.1  thorpej 	0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909,
    416  1.1  thorpej 	0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
    417  1.1  thorpej 	0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b,
    418  1.1  thorpej 	0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
    419  1.1  thorpej 	0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4,
    420  1.1  thorpej 	0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
    421  1.1  thorpej 	0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f,
    422  1.1  thorpej 	0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
    423  1.1  thorpej 	0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21,
    424  1.1  thorpej 	0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
    425  1.1  thorpej 	0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d,
    426  1.1  thorpej 	0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
    427  1.1  thorpej 	0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f,
    428  1.1  thorpej 	0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
    429  1.1  thorpej 	0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d,
    430  1.1  thorpej 	0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
    431  1.1  thorpej 	0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4,
    432  1.1  thorpej 	0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
    433  1.1  thorpej 	0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801,
    434  1.1  thorpej 	0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
    435  1.1  thorpej 	0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755,
    436  1.1  thorpej 	0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
    437  1.1  thorpej 	0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709,
    438  1.1  thorpej 	0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
    439  1.1  thorpej 	0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b,
    440  1.1  thorpej 	0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
    441  1.1  thorpej 	0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c,
    442  1.1  thorpej 	0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
    443  1.1  thorpej 	0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9,
    444  1.1  thorpej 	0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
    445  1.1  thorpej 	0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3,
    446  1.1  thorpej 	0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
    447  1.1  thorpej 	0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9,
    448  1.1  thorpej 	0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
    449  1.1  thorpej 	0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab,
    450  1.1  thorpej 	0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
    451  1.1  thorpej 	0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4,
    452  1.1  thorpej 	0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
    453  1.1  thorpej 	0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43,
    454  1.1  thorpej 	0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
    455  1.1  thorpej 	0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8,
    456  1.1  thorpej 	0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
    457  1.1  thorpej 	0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171,
    458  1.1  thorpej 	0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
    459  1.1  thorpej 	0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89,
    460  1.1  thorpej 	0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
    461  1.1  thorpej 	0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b,
    462  1.1  thorpej 	0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
    463  1.1  thorpej 	0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb,
    464  1.1  thorpej 	0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
    465  1.1  thorpej 	0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e,
    466  1.1  thorpej 	0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
    467  1.1  thorpej 	0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea,
    468  1.1  thorpej 	0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
    469  1.1  thorpej 	0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea,
    470  1.1  thorpej 	0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
    471  1.1  thorpej 	0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd,
    472  1.1  thorpej 	0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
    473  1.1  thorpej 	0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef,
    474  1.1  thorpej 	0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1,
    475  1.1  thorpej };
    476  1.1  thorpej 
    477  1.1  thorpej static u_int32_t S3[] = {
    478  1.1  thorpej 	0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907,
    479  1.1  thorpej 	0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
    480  1.1  thorpej 	0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae,
    481  1.1  thorpej 	0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
    482  1.1  thorpej 	0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e,
    483  1.1  thorpej 	0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
    484  1.1  thorpej 	0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc,
    485  1.1  thorpej 	0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
    486  1.1  thorpej 	0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e,
    487  1.1  thorpej 	0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
    488  1.1  thorpej 	0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f,
    489  1.1  thorpej 	0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
    490  1.1  thorpej 	0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99,
    491  1.1  thorpej 	0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
    492  1.1  thorpej 	0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f,
    493  1.1  thorpej 	0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
    494  1.1  thorpej 	0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380,
    495  1.1  thorpej 	0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
    496  1.1  thorpej 	0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8,
    497  1.1  thorpej 	0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
    498  1.1  thorpej 	0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504,
    499  1.1  thorpej 	0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
    500  1.1  thorpej 	0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6,
    501  1.1  thorpej 	0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
    502  1.1  thorpej 	0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e,
    503  1.1  thorpej 	0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
    504  1.1  thorpej 	0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d,
    505  1.1  thorpej 	0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
    506  1.1  thorpej 	0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1,
    507  1.1  thorpej 	0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
    508  1.1  thorpej 	0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c,
    509  1.1  thorpej 	0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
    510  1.1  thorpej 	0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15,
    511  1.1  thorpej 	0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
    512  1.1  thorpej 	0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4,
    513  1.1  thorpej 	0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
    514  1.1  thorpej 	0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b,
    515  1.1  thorpej 	0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
    516  1.1  thorpej 	0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392,
    517  1.1  thorpej 	0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
    518  1.1  thorpej 	0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231,
    519  1.1  thorpej 	0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
    520  1.1  thorpej 	0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889,
    521  1.1  thorpej 	0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
    522  1.1  thorpej 	0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67,
    523  1.1  thorpej 	0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
    524  1.1  thorpej 	0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49,
    525  1.1  thorpej 	0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
    526  1.1  thorpej 	0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d,
    527  1.1  thorpej 	0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
    528  1.1  thorpej 	0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d,
    529  1.1  thorpej 	0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
    530  1.1  thorpej 	0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e,
    531  1.1  thorpej 	0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
    532  1.1  thorpej 	0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767,
    533  1.1  thorpej 	0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
    534  1.1  thorpej 	0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce,
    535  1.1  thorpej 	0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
    536  1.1  thorpej 	0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24,
    537  1.1  thorpej 	0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
    538  1.1  thorpej 	0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0,
    539  1.1  thorpej 	0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
    540  1.1  thorpej 	0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5,
    541  1.1  thorpej 	0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783,
    542  1.1  thorpej };
    543  1.1  thorpej 
    544  1.1  thorpej static u_int32_t S4[] = {
    545  1.1  thorpej 	0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298,
    546  1.1  thorpej 	0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
    547  1.1  thorpej 	0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120,
    548  1.1  thorpej 	0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
    549  1.1  thorpej 	0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220,
    550  1.1  thorpej 	0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
    551  1.1  thorpej 	0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe,
    552  1.1  thorpej 	0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
    553  1.1  thorpej 	0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701,
    554  1.1  thorpej 	0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
    555  1.1  thorpej 	0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b,
    556  1.1  thorpej 	0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
    557  1.1  thorpej 	0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93,
    558  1.1  thorpej 	0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
    559  1.1  thorpej 	0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746,
    560  1.1  thorpej 	0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
    561  1.1  thorpej 	0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9,
    562  1.1  thorpej 	0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
    563  1.1  thorpej 	0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb,
    564  1.1  thorpej 	0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
    565  1.1  thorpej 	0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c,
    566  1.1  thorpej 	0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
    567  1.1  thorpej 	0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7,
    568  1.1  thorpej 	0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
    569  1.1  thorpej 	0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340,
    570  1.1  thorpej 	0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
    571  1.1  thorpej 	0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327,
    572  1.1  thorpej 	0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
    573  1.1  thorpej 	0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec,
    574  1.1  thorpej 	0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
    575  1.1  thorpej 	0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205,
    576  1.1  thorpej 	0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
    577  1.1  thorpej 	0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031,
    578  1.1  thorpej 	0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
    579  1.1  thorpej 	0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5,
    580  1.1  thorpej 	0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
    581  1.1  thorpej 	0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c,
    582  1.1  thorpej 	0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
    583  1.1  thorpej 	0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69,
    584  1.1  thorpej 	0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
    585  1.1  thorpej 	0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9,
    586  1.1  thorpej 	0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
    587  1.1  thorpej 	0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff,
    588  1.1  thorpej 	0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
    589  1.1  thorpej 	0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3,
    590  1.1  thorpej 	0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
    591  1.1  thorpej 	0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2,
    592  1.1  thorpej 	0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
    593  1.1  thorpej 	0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff,
    594  1.1  thorpej 	0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
    595  1.1  thorpej 	0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091,
    596  1.1  thorpej 	0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
    597  1.1  thorpej 	0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df,
    598  1.1  thorpej 	0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
    599  1.1  thorpej 	0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf,
    600  1.1  thorpej 	0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
    601  1.1  thorpej 	0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367,
    602  1.1  thorpej 	0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
    603  1.1  thorpej 	0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c,
    604  1.1  thorpej 	0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
    605  1.1  thorpej 	0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43,
    606  1.1  thorpej 	0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
    607  1.1  thorpej 	0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e,
    608  1.1  thorpej 	0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2,
    609  1.1  thorpej };
    610  1.1  thorpej 
    611  1.1  thorpej static u_int32_t S5[] = {
    612  1.1  thorpej 	0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911,
    613  1.1  thorpej 	0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
    614  1.1  thorpej 	0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00,
    615  1.1  thorpej 	0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
    616  1.1  thorpej 	0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180,
    617  1.1  thorpej 	0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
    618  1.1  thorpej 	0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2,
    619  1.1  thorpej 	0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
    620  1.1  thorpej 	0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725,
    621  1.1  thorpej 	0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
    622  1.1  thorpej 	0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b,
    623  1.1  thorpej 	0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
    624  1.1  thorpej 	0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571,
    625  1.1  thorpej 	0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
    626  1.1  thorpej 	0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec,
    627  1.1  thorpej 	0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
    628  1.1  thorpej 	0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea,
    629  1.1  thorpej 	0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
    630  1.1  thorpej 	0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263,
    631  1.1  thorpej 	0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
    632  1.1  thorpej 	0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468,
    633  1.1  thorpej 	0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
    634  1.1  thorpej 	0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b,
    635  1.1  thorpej 	0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
    636  1.1  thorpej 	0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284,
    637  1.1  thorpej 	0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
    638  1.1  thorpej 	0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4,
    639  1.1  thorpej 	0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
    640  1.1  thorpej 	0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7,
    641  1.1  thorpej 	0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
    642  1.1  thorpej 	0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce,
    643  1.1  thorpej 	0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
    644  1.1  thorpej 	0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6,
    645  1.1  thorpej 	0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
    646  1.1  thorpej 	0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4,
    647  1.1  thorpej 	0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
    648  1.1  thorpej 	0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561,
    649  1.1  thorpej 	0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
    650  1.1  thorpej 	0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6,
    651  1.1  thorpej 	0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
    652  1.1  thorpej 	0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406,
    653  1.1  thorpej 	0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
    654  1.1  thorpej 	0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472,
    655  1.1  thorpej 	0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
    656  1.1  thorpej 	0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487,
    657  1.1  thorpej 	0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
    658  1.1  thorpej 	0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288,
    659  1.1  thorpej 	0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
    660  1.1  thorpej 	0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2,
    661  1.1  thorpej 	0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
    662  1.1  thorpej 	0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78,
    663  1.1  thorpej 	0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
    664  1.1  thorpej 	0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76,
    665  1.1  thorpej 	0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
    666  1.1  thorpej 	0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0,
    667  1.1  thorpej 	0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
    668  1.1  thorpej 	0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58,
    669  1.1  thorpej 	0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
    670  1.1  thorpej 	0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2,
    671  1.1  thorpej 	0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
    672  1.1  thorpej 	0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be,
    673  1.1  thorpej 	0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
    674  1.1  thorpej 	0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55,
    675  1.1  thorpej 	0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4,
    676  1.1  thorpej };
    677  1.1  thorpej 
    678  1.1  thorpej static u_int32_t S6[] = {
    679  1.1  thorpej 	0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c,
    680  1.1  thorpej 	0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
    681  1.1  thorpej 	0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9,
    682  1.1  thorpej 	0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
    683  1.1  thorpej 	0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e,
    684  1.1  thorpej 	0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
    685  1.1  thorpej 	0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866,
    686  1.1  thorpej 	0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
    687  1.1  thorpej 	0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c,
    688  1.1  thorpej 	0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
    689  1.1  thorpej 	0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd,
    690  1.1  thorpej 	0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
    691  1.1  thorpej 	0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53,
    692  1.1  thorpej 	0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
    693  1.1  thorpej 	0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d,
    694  1.1  thorpej 	0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
    695  1.1  thorpej 	0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf,
    696  1.1  thorpej 	0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
    697  1.1  thorpej 	0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807,
    698  1.1  thorpej 	0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
    699  1.1  thorpej 	0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a,
    700  1.1  thorpej 	0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
    701  1.1  thorpej 	0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563,
    702  1.1  thorpej 	0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
    703  1.1  thorpej 	0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0,
    704  1.1  thorpej 	0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
    705  1.1  thorpej 	0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be,
    706  1.1  thorpej 	0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
    707  1.1  thorpej 	0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0,
    708  1.1  thorpej 	0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
    709  1.1  thorpej 	0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2,
    710  1.1  thorpej 	0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
    711  1.1  thorpej 	0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853,
    712  1.1  thorpej 	0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
    713  1.1  thorpej 	0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa,
    714  1.1  thorpej 	0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
    715  1.1  thorpej 	0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9,
    716  1.1  thorpej 	0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
    717  1.1  thorpej 	0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751,
    718  1.1  thorpej 	0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
    719  1.1  thorpej 	0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358,
    720  1.1  thorpej 	0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
    721  1.1  thorpej 	0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397,
    722  1.1  thorpej 	0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
    723  1.1  thorpej 	0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459,
    724  1.1  thorpej 	0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
    725  1.1  thorpej 	0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4,
    726  1.1  thorpej 	0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
    727  1.1  thorpej 	0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f,
    728  1.1  thorpej 	0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
    729  1.1  thorpej 	0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb,
    730  1.1  thorpej 	0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
    731  1.1  thorpej 	0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2,
    732  1.1  thorpej 	0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
    733  1.1  thorpej 	0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab,
    734  1.1  thorpej 	0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
    735  1.1  thorpej 	0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b,
    736  1.1  thorpej 	0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
    737  1.1  thorpej 	0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b,
    738  1.1  thorpej 	0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
    739  1.1  thorpej 	0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855,
    740  1.1  thorpej 	0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
    741  1.1  thorpej 	0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454,
    742  1.1  thorpej 	0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f,
    743  1.1  thorpej };
    744  1.1  thorpej 
    745  1.1  thorpej static u_int32_t S7[] = {
    746  1.1  thorpej 	0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693,
    747  1.1  thorpej 	0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
    748  1.1  thorpej 	0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82,
    749  1.1  thorpej 	0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
    750  1.1  thorpej 	0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd,
    751  1.1  thorpej 	0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
    752  1.1  thorpej 	0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f,
    753  1.1  thorpej 	0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
    754  1.1  thorpej 	0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9,
    755  1.1  thorpej 	0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
    756  1.1  thorpej 	0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e,
    757  1.1  thorpej 	0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
    758  1.1  thorpej 	0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83,
    759  1.1  thorpej 	0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
    760  1.1  thorpej 	0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e,
    761  1.1  thorpej 	0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
    762  1.1  thorpej 	0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a,
    763  1.1  thorpej 	0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
    764  1.1  thorpej 	0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f,
    765  1.1  thorpej 	0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
    766  1.1  thorpej 	0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b,
    767  1.1  thorpej 	0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
    768  1.1  thorpej 	0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78,
    769  1.1  thorpej 	0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
    770  1.1  thorpej 	0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d,
    771  1.1  thorpej 	0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
    772  1.1  thorpej 	0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802,
    773  1.1  thorpej 	0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
    774  1.1  thorpej 	0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9,
    775  1.1  thorpej 	0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
    776  1.1  thorpej 	0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302,
    777  1.1  thorpej 	0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
    778  1.1  thorpej 	0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858,
    779  1.1  thorpej 	0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
    780  1.1  thorpej 	0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a,
    781  1.1  thorpej 	0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
    782  1.1  thorpej 	0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4,
    783  1.1  thorpej 	0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
    784  1.1  thorpej 	0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df,
    785  1.1  thorpej 	0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
    786  1.1  thorpej 	0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9,
    787  1.1  thorpej 	0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
    788  1.1  thorpej 	0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c,
    789  1.1  thorpej 	0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
    790  1.1  thorpej 	0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07,
    791  1.1  thorpej 	0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
    792  1.1  thorpej 	0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939,
    793  1.1  thorpej 	0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
    794  1.1  thorpej 	0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e,
    795  1.1  thorpej 	0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
    796  1.1  thorpej 	0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378,
    797  1.1  thorpej 	0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
    798  1.1  thorpej 	0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd,
    799  1.1  thorpej 	0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
    800  1.1  thorpej 	0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567,
    801  1.1  thorpej 	0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
    802  1.1  thorpej 	0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2,
    803  1.1  thorpej 	0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
    804  1.1  thorpej 	0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf,
    805  1.1  thorpej 	0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
    806  1.1  thorpej 	0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2,
    807  1.1  thorpej 	0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
    808  1.1  thorpej 	0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada,
    809  1.1  thorpej 	0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3,
    810  1.1  thorpej };
    811  1.1  thorpej 
    812  1.1  thorpej static u_int32_t S8[] = {
    813  1.1  thorpej 	0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095,
    814  1.1  thorpej 	0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
    815  1.1  thorpej 	0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174,
    816  1.1  thorpej 	0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
    817  1.1  thorpej 	0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940,
    818  1.1  thorpej 	0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
    819  1.1  thorpej 	0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42,
    820  1.1  thorpej 	0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
    821  1.1  thorpej 	0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164,
    822  1.1  thorpej 	0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
    823  1.1  thorpej 	0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4,
    824  1.1  thorpej 	0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
    825  1.1  thorpej 	0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0,
    826  1.1  thorpej 	0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
    827  1.1  thorpej 	0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6,
    828  1.1  thorpej 	0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
    829  1.1  thorpej 	0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491,
    830  1.1  thorpej 	0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
    831  1.1  thorpej 	0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b,
    832  1.1  thorpej 	0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
    833  1.1  thorpej 	0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8,
    834  1.1  thorpej 	0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
    835  1.1  thorpej 	0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006,
    836  1.1  thorpej 	0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
    837  1.1  thorpej 	0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564,
    838  1.1  thorpej 	0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
    839  1.1  thorpej 	0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab,
    840  1.1  thorpej 	0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
    841  1.1  thorpej 	0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc,
    842  1.1  thorpej 	0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
    843  1.1  thorpej 	0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8,
    844  1.1  thorpej 	0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
    845  1.1  thorpej 	0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441,
    846  1.1  thorpej 	0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
    847  1.1  thorpej 	0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f,
    848  1.1  thorpej 	0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
    849  1.1  thorpej 	0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504,
    850  1.1  thorpej 	0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
    851  1.1  thorpej 	0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c,
    852  1.1  thorpej 	0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
    853  1.1  thorpej 	0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6,
    854  1.1  thorpej 	0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
    855  1.1  thorpej 	0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd,
    856  1.1  thorpej 	0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
    857  1.1  thorpej 	0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4,
    858  1.1  thorpej 	0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
    859  1.1  thorpej 	0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc,
    860  1.1  thorpej 	0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
    861  1.1  thorpej 	0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba,
    862  1.1  thorpej 	0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
    863  1.1  thorpej 	0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf,
    864  1.1  thorpej 	0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
    865  1.1  thorpej 	0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603,
    866  1.1  thorpej 	0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
    867  1.1  thorpej 	0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37,
    868  1.1  thorpej 	0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
    869  1.1  thorpej 	0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819,
    870  1.1  thorpej 	0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
    871  1.1  thorpej 	0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d,
    872  1.1  thorpej 	0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
    873  1.1  thorpej 	0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347,
    874  1.1  thorpej 	0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
    875  1.1  thorpej 	0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d,
    876  1.1  thorpej 	0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e,
    877  1.1  thorpej };
    878  1.1  thorpej 
    879