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