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