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