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