blob: 910d610d14524c7e9be64bccb82c92e3072fc317 [file] [log] [blame]
Paul Bakkera9379c02012-07-04 11:02:11 +00001/*
2 * Blowfish implementation
3 *
Paul Bakker90995b52013-06-24 19:20:35 +02004 * Copyright (C) 2012-2013, Brainspark B.V.
Paul Bakkera9379c02012-07-04 11:02:11 +00005 *
6 * This file is part of PolarSSL (http://www.polarssl.org)
7 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
8 *
9 * All rights reserved.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 */
25/*
26 * The Blowfish block cipher was designed by Bruce Schneier in 1993.
27 * http://www.schneier.com/blowfish.html
28 * http://en.wikipedia.org/wiki/Blowfish_%28cipher%29
29 *
30 */
31
32#include "polarssl/config.h"
33
34#if defined(POLARSSL_BLOWFISH_C)
35
36#include "polarssl/blowfish.h"
37
Paul Bakker90995b52013-06-24 19:20:35 +020038#if !defined(POLARSSL_BLOWFISH_ALT)
39
Paul Bakkera9379c02012-07-04 11:02:11 +000040/*
41 * 32-bit integer manipulation macros (big endian)
42 */
Paul Bakker5c2364c2012-10-01 14:41:15 +000043#ifndef GET_UINT32_BE
44#define GET_UINT32_BE(n,b,i) \
Paul Bakkera9379c02012-07-04 11:02:11 +000045{ \
Paul Bakker5c2364c2012-10-01 14:41:15 +000046 (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
47 | ( (uint32_t) (b)[(i) + 1] << 16 ) \
48 | ( (uint32_t) (b)[(i) + 2] << 8 ) \
49 | ( (uint32_t) (b)[(i) + 3] ); \
Paul Bakkera9379c02012-07-04 11:02:11 +000050}
51#endif
52
Paul Bakker5c2364c2012-10-01 14:41:15 +000053#ifndef PUT_UINT32_BE
54#define PUT_UINT32_BE(n,b,i) \
Paul Bakkera9379c02012-07-04 11:02:11 +000055{ \
56 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
57 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
58 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
59 (b)[(i) + 3] = (unsigned char) ( (n) ); \
60}
61#endif
62
Paul Bakkerd6f17b42012-10-01 20:58:19 +000063static const uint32_t P[BLOWFISH_ROUNDS + 2] = {
64 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
65 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
66 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
67 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
68 0x9216D5D9L, 0x8979FB1BL
69};
70
Paul Bakkera9379c02012-07-04 11:02:11 +000071/* declarations of data at the end of this file */
Paul Bakker5c2364c2012-10-01 14:41:15 +000072static const uint32_t S[4][256];
Paul Bakkera9379c02012-07-04 11:02:11 +000073
Paul Bakker5c2364c2012-10-01 14:41:15 +000074static uint32_t F(blowfish_context *ctx, uint32_t x)
Paul Bakkera9379c02012-07-04 11:02:11 +000075{
76 unsigned short a, b, c, d;
Paul Bakker5c2364c2012-10-01 14:41:15 +000077 uint32_t y;
Paul Bakkera9379c02012-07-04 11:02:11 +000078
79 d = (unsigned short)(x & 0xFF);
80 x >>= 8;
81 c = (unsigned short)(x & 0xFF);
82 x >>= 8;
83 b = (unsigned short)(x & 0xFF);
84 x >>= 8;
85 a = (unsigned short)(x & 0xFF);
86 y = ctx->S[0][a] + ctx->S[1][b];
87 y = y ^ ctx->S[2][c];
88 y = y + ctx->S[3][d];
89
90 return y;
91}
92
Paul Bakker5c2364c2012-10-01 14:41:15 +000093static void blowfish_enc(blowfish_context *ctx, uint32_t *xl, uint32_t *xr)
Paul Bakkera9379c02012-07-04 11:02:11 +000094{
Paul Bakker5c2364c2012-10-01 14:41:15 +000095 uint32_t Xl, Xr, temp;
Paul Bakkera9379c02012-07-04 11:02:11 +000096 short i;
97
98 Xl = *xl;
99 Xr = *xr;
100
101 for (i = 0; i < BLOWFISH_ROUNDS; ++i)
102 {
103 Xl = Xl ^ ctx->P[i];
104 Xr = F(ctx, Xl) ^ Xr;
105
106 temp = Xl;
107 Xl = Xr;
108 Xr = temp;
109 }
110
111 temp = Xl;
112 Xl = Xr;
113 Xr = temp;
114
115 Xr = Xr ^ ctx->P[BLOWFISH_ROUNDS];
116 Xl = Xl ^ ctx->P[BLOWFISH_ROUNDS + 1];
117
118 *xl = Xl;
119 *xr = Xr;
120}
121
Paul Bakker5c2364c2012-10-01 14:41:15 +0000122static void blowfish_dec(blowfish_context *ctx, uint32_t *xl, uint32_t *xr)
Paul Bakkera9379c02012-07-04 11:02:11 +0000123{
Paul Bakker5c2364c2012-10-01 14:41:15 +0000124 uint32_t Xl, Xr, temp;
Paul Bakkera9379c02012-07-04 11:02:11 +0000125 short i;
126
127 Xl = *xl;
128 Xr = *xr;
129
130 for (i = BLOWFISH_ROUNDS + 1; i > 1; --i)
131 {
132 Xl = Xl ^ ctx->P[i];
133 Xr = F(ctx, Xl) ^ Xr;
134
135 temp = Xl;
136 Xl = Xr;
137 Xr = temp;
138 }
139
140 temp = Xl;
141 Xl = Xr;
142 Xr = temp;
143
144 Xr = Xr ^ ctx->P[1];
145 Xl = Xl ^ ctx->P[0];
146
147 *xl = Xl;
148 *xr = Xr;
149}
150
151/*
152 * Blowfish key schedule
153 */
154int blowfish_setkey( blowfish_context *ctx, const unsigned char *key, unsigned int keysize )
155{
156 unsigned int i, j, k;
Paul Bakker5c2364c2012-10-01 14:41:15 +0000157 uint32_t data, datal, datar;
Paul Bakkera9379c02012-07-04 11:02:11 +0000158
159 if( keysize < BLOWFISH_MIN_KEY || keysize > BLOWFISH_MAX_KEY ||
160 ( keysize % 8 ) )
161 {
162 return POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH;
163 }
164
165 keysize >>= 3;
166
167 for( i = 0; i < 4; i++ )
168 {
169 for( j = 0; j < 256; j++ )
170 ctx->S[i][j] = S[i][j];
171 }
172
173 j = 0;
174 for( i = 0; i < BLOWFISH_ROUNDS + 2; ++i )
175 {
176 data = 0x00000000;
177 for( k = 0; k < 4; ++k )
178 {
179 data = ( data << 8 ) | key[j++];
180 if( j >= keysize )
181 j = 0;
182 }
183 ctx->P[i] = P[i] ^ data;
184 }
185
186 datal = 0x00000000;
187 datar = 0x00000000;
188
189 for( i = 0; i < BLOWFISH_ROUNDS + 2; i += 2 )
190 {
191 blowfish_enc( ctx, &datal, &datar );
192 ctx->P[i] = datal;
193 ctx->P[i + 1] = datar;
194 }
195
196 for( i = 0; i < 4; i++ )
197 {
198 for( j = 0; j < 256; j += 2 )
199 {
200 blowfish_enc( ctx, &datal, &datar );
201 ctx->S[i][j] = datal;
202 ctx->S[i][j + 1] = datar;
203 }
204 }
205 return( 0 );
206}
207
208/*
209 * Blowfish-ECB block encryption/decryption
210 */
211int blowfish_crypt_ecb( blowfish_context *ctx,
212 int mode,
213 const unsigned char input[BLOWFISH_BLOCKSIZE],
214 unsigned char output[BLOWFISH_BLOCKSIZE] )
215{
Paul Bakker5c2364c2012-10-01 14:41:15 +0000216 uint32_t X0, X1;
Paul Bakkera9379c02012-07-04 11:02:11 +0000217
Paul Bakker5c2364c2012-10-01 14:41:15 +0000218 GET_UINT32_BE( X0, input, 0 );
219 GET_UINT32_BE( X1, input, 4 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000220
221 if( mode == BLOWFISH_DECRYPT )
222 {
223 blowfish_dec(ctx, &X0, &X1);
224 }
225 else /* BLOWFISH_ENCRYPT */
226 {
227 blowfish_enc(ctx, &X0, &X1);
228 }
229
Paul Bakker5c2364c2012-10-01 14:41:15 +0000230 PUT_UINT32_BE( X0, output, 0 );
231 PUT_UINT32_BE( X1, output, 4 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000232
233 return( 0 );
234}
235
Manuel Pégourié-Gonnard92cb1d32013-09-13 16:24:20 +0200236#if defined(POLARSSL_CIPHER_MODE_CBC)
Paul Bakkera9379c02012-07-04 11:02:11 +0000237/*
238 * Blowfish-CBC buffer encryption/decryption
239 */
240int blowfish_crypt_cbc( blowfish_context *ctx,
241 int mode,
242 size_t length,
243 unsigned char iv[BLOWFISH_BLOCKSIZE],
244 const unsigned char *input,
245 unsigned char *output )
246{
247 int i;
248 unsigned char temp[BLOWFISH_BLOCKSIZE];
249
250 if( length % BLOWFISH_BLOCKSIZE )
251 return( POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH );
252
253 if( mode == BLOWFISH_DECRYPT )
254 {
255 while( length > 0 )
256 {
257 memcpy( temp, input, BLOWFISH_BLOCKSIZE );
258 blowfish_crypt_ecb( ctx, mode, input, output );
259
260 for( i = 0; i < BLOWFISH_BLOCKSIZE;i++ )
261 output[i] = (unsigned char)( output[i] ^ iv[i] );
262
263 memcpy( iv, temp, BLOWFISH_BLOCKSIZE );
264
265 input += BLOWFISH_BLOCKSIZE;
266 output += BLOWFISH_BLOCKSIZE;
267 length -= BLOWFISH_BLOCKSIZE;
268 }
269 }
270 else
271 {
272 while( length > 0 )
273 {
274 for( i = 0; i < BLOWFISH_BLOCKSIZE; i++ )
275 output[i] = (unsigned char)( input[i] ^ iv[i] );
276
277 blowfish_crypt_ecb( ctx, mode, output, output );
278 memcpy( iv, output, BLOWFISH_BLOCKSIZE );
279
280 input += BLOWFISH_BLOCKSIZE;
281 output += BLOWFISH_BLOCKSIZE;
282 length -= BLOWFISH_BLOCKSIZE;
283 }
284 }
285
286 return( 0 );
287}
Manuel Pégourié-Gonnard92cb1d32013-09-13 16:24:20 +0200288#endif /* POLARSSL_CIPHER_MODE_CBC */
Paul Bakkera9379c02012-07-04 11:02:11 +0000289
290#if defined(POLARSSL_CIPHER_MODE_CFB)
291/*
292 * Blowfish CFB buffer encryption/decryption
293 */
294int blowfish_crypt_cfb64( blowfish_context *ctx,
295 int mode,
296 size_t length,
297 size_t *iv_off,
298 unsigned char iv[BLOWFISH_BLOCKSIZE],
299 const unsigned char *input,
300 unsigned char *output )
301{
302 int c;
303 size_t n = *iv_off;
304
305 if( mode == BLOWFISH_DECRYPT )
306 {
307 while( length-- )
308 {
309 if( n == 0 )
310 blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, iv, iv );
311
312 c = *input++;
313 *output++ = (unsigned char)( c ^ iv[n] );
314 iv[n] = (unsigned char) c;
315
316 n = (n + 1) % BLOWFISH_BLOCKSIZE;
317 }
318 }
319 else
320 {
321 while( length-- )
322 {
323 if( n == 0 )
324 blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, iv, iv );
325
326 iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ );
327
328 n = (n + 1) % BLOWFISH_BLOCKSIZE;
329 }
330 }
331
332 *iv_off = n;
333
334 return( 0 );
335}
336#endif /*POLARSSL_CIPHER_MODE_CFB */
337
338#if defined(POLARSSL_CIPHER_MODE_CTR)
339/*
340 * Blowfish CTR buffer encryption/decryption
341 */
342int blowfish_crypt_ctr( blowfish_context *ctx,
343 size_t length,
344 size_t *nc_off,
345 unsigned char nonce_counter[BLOWFISH_BLOCKSIZE],
346 unsigned char stream_block[BLOWFISH_BLOCKSIZE],
347 const unsigned char *input,
348 unsigned char *output )
349{
350 int c, i;
351 size_t n = *nc_off;
352
353 while( length-- )
354 {
355 if( n == 0 ) {
356 blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, nonce_counter, stream_block );
357
358 for( i = BLOWFISH_BLOCKSIZE; i > 0; i-- )
359 if( ++nonce_counter[i - 1] != 0 )
360 break;
361 }
362 c = *input++;
363 *output++ = (unsigned char)( c ^ stream_block[n] );
364
365 n = (n + 1) % BLOWFISH_BLOCKSIZE;
366 }
367
368 *nc_off = n;
369
370 return( 0 );
371}
372#endif /* POLARSSL_CIPHER_MODE_CTR */
373
Paul Bakker5c2364c2012-10-01 14:41:15 +0000374static const uint32_t S[4][256] = {
Paul Bakkera9379c02012-07-04 11:02:11 +0000375 { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
376 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
377 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
378 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
379 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
380 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
381 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
382 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
383 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
384 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
385 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
386 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
387 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
388 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
389 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
390 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
391 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
392 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
393 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
394 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
395 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
396 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
397 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
398 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
399 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
400 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
401 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
402 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
403 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
404 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
405 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
406 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
407 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
408 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
409 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
410 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
411 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
412 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
413 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
414 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
415 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
416 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
417 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
418 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
419 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
420 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
421 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
422 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
423 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
424 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
425 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
426 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
427 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
428 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
429 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
430 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
431 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
432 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
433 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
434 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
435 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
436 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
437 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
438 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL },
439 { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
440 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
441 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
442 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
443 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
444 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
445 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
446 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
447 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
448 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
449 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
450 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
451 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
452 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
453 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
454 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
455 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
456 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
457 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
458 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
459 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
460 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
461 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
462 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
463 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
464 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
465 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
466 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
467 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
468 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
469 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
470 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
471 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
472 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
473 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
474 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
475 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
476 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
477 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
478 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
479 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
480 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
481 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
482 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
483 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
484 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
485 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
486 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
487 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
488 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
489 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
490 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
491 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
492 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
493 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
494 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
495 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
496 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
497 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
498 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
499 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
500 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
501 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
502 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L },
503 { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
504 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
505 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
506 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
507 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
508 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
509 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
510 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
511 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
512 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
513 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
514 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
515 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
516 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
517 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
518 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
519 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
520 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
521 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
522 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
523 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
524 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
525 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
526 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
527 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
528 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
529 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
530 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
531 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
532 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
533 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
534 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
535 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
536 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
537 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
538 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
539 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
540 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
541 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
542 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
543 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
544 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
545 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
546 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
547 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
548 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
549 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
550 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
551 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
552 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
553 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
554 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
555 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
556 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
557 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
558 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
559 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
560 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
561 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
562 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
563 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
564 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
565 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
566 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L },
567 { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
568 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
569 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
570 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
571 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
572 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
573 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
574 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
575 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
576 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
577 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
578 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
579 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
580 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
581 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
582 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
583 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
584 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
585 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
586 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
587 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
588 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
589 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
590 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
591 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
592 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
593 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
594 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
595 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
596 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
597 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
598 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
599 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
600 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
601 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
602 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
603 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
604 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
605 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
606 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
607 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
608 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
609 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
610 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
611 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
612 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
613 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
614 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
615 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
616 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
617 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
618 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
619 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
620 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
621 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
622 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
623 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
624 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
625 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
626 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
627 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
628 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
629 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
630 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L }
631};
632
Paul Bakker90995b52013-06-24 19:20:35 +0200633#endif /* !POLARSSL_BLOWFISH_ALT */
Paul Bakkera9379c02012-07-04 11:02:11 +0000634#endif /* POLARSSL_BLOWFISH_C */