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