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