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