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