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