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