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