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