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