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