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