Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
blowfish.c
00001 /* 00002 * Blowfish implementation 00003 * 00004 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 00005 * SPDX-License-Identifier: Apache-2.0 00006 * 00007 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00008 * not use this file except in compliance with the License. 00009 * You may obtain a copy of the License at 00010 * 00011 * http://www.apache.org/licenses/LICENSE-2.0 00012 * 00013 * Unless required by applicable law or agreed to in writing, software 00014 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00015 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00016 * See the License for the specific language governing permissions and 00017 * limitations under the License. 00018 * 00019 * This file is part of mbed TLS (https://tls.mbed.org) 00020 */ 00021 /* 00022 * The Blowfish block cipher was designed by Bruce Schneier in 1993. 00023 * http://www.schneier.com/blowfish.html 00024 * http://en.wikipedia.org/wiki/Blowfish_%28cipher%29 00025 * 00026 */ 00027 00028 #if !defined(MBEDTLS_CONFIG_FILE) 00029 #include "mbedtls/config.h" 00030 #else 00031 #include MBEDTLS_CONFIG_FILE 00032 #endif 00033 00034 #if defined(MBEDTLS_BLOWFISH_C) 00035 00036 #include "mbedtls/blowfish.h" 00037 #include "mbedtls/platform_util.h" 00038 00039 #include <string.h> 00040 00041 #if !defined(MBEDTLS_BLOWFISH_ALT) 00042 00043 /* 00044 * 32-bit integer manipulation macros (big endian) 00045 */ 00046 #ifndef GET_UINT32_BE 00047 #define GET_UINT32_BE(n,b,i) \ 00048 { \ 00049 (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ 00050 | ( (uint32_t) (b)[(i) + 1] << 16 ) \ 00051 | ( (uint32_t) (b)[(i) + 2] << 8 ) \ 00052 | ( (uint32_t) (b)[(i) + 3] ); \ 00053 } 00054 #endif 00055 00056 #ifndef PUT_UINT32_BE 00057 #define PUT_UINT32_BE(n,b,i) \ 00058 { \ 00059 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ 00060 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ 00061 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ 00062 (b)[(i) + 3] = (unsigned char) ( (n) ); \ 00063 } 00064 #endif 00065 00066 static const uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2] = { 00067 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, 00068 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, 00069 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, 00070 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, 00071 0x9216D5D9L, 0x8979FB1BL 00072 }; 00073 00074 /* declarations of data at the end of this file */ 00075 static const uint32_t S[4][256]; 00076 00077 static uint32_t F( mbedtls_blowfish_context *ctx, uint32_t x ) 00078 { 00079 unsigned short a, b, c, d; 00080 uint32_t y; 00081 00082 d = (unsigned short)(x & 0xFF); 00083 x >>= 8; 00084 c = (unsigned short)(x & 0xFF); 00085 x >>= 8; 00086 b = (unsigned short)(x & 0xFF); 00087 x >>= 8; 00088 a = (unsigned short)(x & 0xFF); 00089 y = ctx->S [0][a] + ctx->S [1][b]; 00090 y = y ^ ctx->S [2][c]; 00091 y = y + ctx->S [3][d]; 00092 00093 return( y ); 00094 } 00095 00096 static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) 00097 { 00098 uint32_t Xl, Xr, temp; 00099 short i; 00100 00101 Xl = *xl; 00102 Xr = *xr; 00103 00104 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) 00105 { 00106 Xl = Xl ^ ctx->P [i]; 00107 Xr = F( ctx, Xl ) ^ Xr; 00108 00109 temp = Xl; 00110 Xl = Xr; 00111 Xr = temp; 00112 } 00113 00114 temp = Xl; 00115 Xl = Xr; 00116 Xr = temp; 00117 00118 Xr = Xr ^ ctx->P [MBEDTLS_BLOWFISH_ROUNDS]; 00119 Xl = Xl ^ ctx->P [MBEDTLS_BLOWFISH_ROUNDS + 1]; 00120 00121 *xl = Xl; 00122 *xr = Xr; 00123 } 00124 00125 static void blowfish_dec( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) 00126 { 00127 uint32_t Xl, Xr, temp; 00128 short i; 00129 00130 Xl = *xl; 00131 Xr = *xr; 00132 00133 for( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) 00134 { 00135 Xl = Xl ^ ctx->P [i]; 00136 Xr = F( ctx, Xl ) ^ Xr; 00137 00138 temp = Xl; 00139 Xl = Xr; 00140 Xr = temp; 00141 } 00142 00143 temp = Xl; 00144 Xl = Xr; 00145 Xr = temp; 00146 00147 Xr = Xr ^ ctx->P [1]; 00148 Xl = Xl ^ ctx->P [0]; 00149 00150 *xl = Xl; 00151 *xr = Xr; 00152 } 00153 00154 void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ) 00155 { 00156 memset( ctx, 0, sizeof( mbedtls_blowfish_context ) ); 00157 } 00158 00159 void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) 00160 { 00161 if( ctx == NULL ) 00162 return; 00163 00164 mbedtls_platform_zeroize( ctx, sizeof( mbedtls_blowfish_context ) ); 00165 } 00166 00167 /* 00168 * Blowfish key schedule 00169 */ 00170 int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key, 00171 unsigned int keybits ) 00172 { 00173 unsigned int i, j, k; 00174 uint32_t data, datal, datar; 00175 00176 if( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || 00177 ( keybits % 8 ) ) 00178 { 00179 return( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH ); 00180 } 00181 00182 keybits >>= 3; 00183 00184 for( i = 0; i < 4; i++ ) 00185 { 00186 for( j = 0; j < 256; j++ ) 00187 ctx->S [i][j] = S[i][j]; 00188 } 00189 00190 j = 0; 00191 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) 00192 { 00193 data = 0x00000000; 00194 for( k = 0; k < 4; ++k ) 00195 { 00196 data = ( data << 8 ) | key[j++]; 00197 if( j >= keybits ) 00198 j = 0; 00199 } 00200 ctx->P [i] = P[i] ^ data; 00201 } 00202 00203 datal = 0x00000000; 00204 datar = 0x00000000; 00205 00206 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) 00207 { 00208 blowfish_enc( ctx, &datal, &datar ); 00209 ctx->P [i] = datal; 00210 ctx->P [i + 1] = datar; 00211 } 00212 00213 for( i = 0; i < 4; i++ ) 00214 { 00215 for( j = 0; j < 256; j += 2 ) 00216 { 00217 blowfish_enc( ctx, &datal, &datar ); 00218 ctx->S [i][j] = datal; 00219 ctx->S [i][j + 1] = datar; 00220 } 00221 } 00222 return( 0 ); 00223 } 00224 00225 /* 00226 * Blowfish-ECB block encryption/decryption 00227 */ 00228 int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, 00229 int mode, 00230 const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], 00231 unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) 00232 { 00233 uint32_t X0, X1; 00234 00235 GET_UINT32_BE( X0, input, 0 ); 00236 GET_UINT32_BE( X1, input, 4 ); 00237 00238 if( mode == MBEDTLS_BLOWFISH_DECRYPT ) 00239 { 00240 blowfish_dec( ctx, &X0, &X1 ); 00241 } 00242 else /* MBEDTLS_BLOWFISH_ENCRYPT */ 00243 { 00244 blowfish_enc( ctx, &X0, &X1 ); 00245 } 00246 00247 PUT_UINT32_BE( X0, output, 0 ); 00248 PUT_UINT32_BE( X1, output, 4 ); 00249 00250 return( 0 ); 00251 } 00252 00253 #if defined(MBEDTLS_CIPHER_MODE_CBC) 00254 /* 00255 * Blowfish-CBC buffer encryption/decryption 00256 */ 00257 int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, 00258 int mode, 00259 size_t length, 00260 unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], 00261 const unsigned char *input, 00262 unsigned char *output ) 00263 { 00264 int i; 00265 unsigned char temp[MBEDTLS_BLOWFISH_BLOCKSIZE]; 00266 00267 if( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) 00268 return( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); 00269 00270 if( mode == MBEDTLS_BLOWFISH_DECRYPT ) 00271 { 00272 while( length > 0 ) 00273 { 00274 memcpy( temp, input, MBEDTLS_BLOWFISH_BLOCKSIZE ); 00275 mbedtls_blowfish_crypt_ecb( ctx, mode, input, output ); 00276 00277 for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE;i++ ) 00278 output[i] = (unsigned char)( output[i] ^ iv[i] ); 00279 00280 memcpy( iv, temp, MBEDTLS_BLOWFISH_BLOCKSIZE ); 00281 00282 input += MBEDTLS_BLOWFISH_BLOCKSIZE; 00283 output += MBEDTLS_BLOWFISH_BLOCKSIZE; 00284 length -= MBEDTLS_BLOWFISH_BLOCKSIZE; 00285 } 00286 } 00287 else 00288 { 00289 while( length > 0 ) 00290 { 00291 for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) 00292 output[i] = (unsigned char)( input[i] ^ iv[i] ); 00293 00294 mbedtls_blowfish_crypt_ecb( ctx, mode, output, output ); 00295 memcpy( iv, output, MBEDTLS_BLOWFISH_BLOCKSIZE ); 00296 00297 input += MBEDTLS_BLOWFISH_BLOCKSIZE; 00298 output += MBEDTLS_BLOWFISH_BLOCKSIZE; 00299 length -= MBEDTLS_BLOWFISH_BLOCKSIZE; 00300 } 00301 } 00302 00303 return( 0 ); 00304 } 00305 #endif /* MBEDTLS_CIPHER_MODE_CBC */ 00306 00307 #if defined(MBEDTLS_CIPHER_MODE_CFB) 00308 /* 00309 * Blowfish CFB buffer encryption/decryption 00310 */ 00311 int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, 00312 int mode, 00313 size_t length, 00314 size_t *iv_off, 00315 unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], 00316 const unsigned char *input, 00317 unsigned char *output ) 00318 { 00319 int c; 00320 size_t n = *iv_off; 00321 00322 if( mode == MBEDTLS_BLOWFISH_DECRYPT ) 00323 { 00324 while( length-- ) 00325 { 00326 if( n == 0 ) 00327 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); 00328 00329 c = *input++; 00330 *output++ = (unsigned char)( c ^ iv[n] ); 00331 iv[n] = (unsigned char) c; 00332 00333 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; 00334 } 00335 } 00336 else 00337 { 00338 while( length-- ) 00339 { 00340 if( n == 0 ) 00341 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); 00342 00343 iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); 00344 00345 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; 00346 } 00347 } 00348 00349 *iv_off = n; 00350 00351 return( 0 ); 00352 } 00353 #endif /*MBEDTLS_CIPHER_MODE_CFB */ 00354 00355 #if defined(MBEDTLS_CIPHER_MODE_CTR) 00356 /* 00357 * Blowfish CTR buffer encryption/decryption 00358 */ 00359 int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, 00360 size_t length, 00361 size_t *nc_off, 00362 unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], 00363 unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], 00364 const unsigned char *input, 00365 unsigned char *output ) 00366 { 00367 int c, i; 00368 size_t n = *nc_off; 00369 00370 while( length-- ) 00371 { 00372 if( n == 0 ) { 00373 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, nonce_counter, 00374 stream_block ); 00375 00376 for( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) 00377 if( ++nonce_counter[i - 1] != 0 ) 00378 break; 00379 } 00380 c = *input++; 00381 *output++ = (unsigned char)( c ^ stream_block[n] ); 00382 00383 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; 00384 } 00385 00386 *nc_off = n; 00387 00388 return( 0 ); 00389 } 00390 #endif /* MBEDTLS_CIPHER_MODE_CTR */ 00391 00392 static const uint32_t S[4][256] = { 00393 { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, 00394 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, 00395 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, 00396 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, 00397 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, 00398 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, 00399 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, 00400 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, 00401 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, 00402 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, 00403 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, 00404 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, 00405 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, 00406 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, 00407 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, 00408 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, 00409 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, 00410 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, 00411 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, 00412 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, 00413 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, 00414 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, 00415 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, 00416 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, 00417 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, 00418 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, 00419 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, 00420 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, 00421 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, 00422 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, 00423 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, 00424 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, 00425 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, 00426 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, 00427 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, 00428 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, 00429 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, 00430 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, 00431 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, 00432 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, 00433 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, 00434 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, 00435 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, 00436 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, 00437 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, 00438 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, 00439 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, 00440 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, 00441 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, 00442 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, 00443 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, 00444 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, 00445 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, 00446 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, 00447 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, 00448 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, 00449 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, 00450 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, 00451 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, 00452 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, 00453 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, 00454 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, 00455 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, 00456 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL }, 00457 { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, 00458 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, 00459 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, 00460 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, 00461 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, 00462 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, 00463 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, 00464 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, 00465 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, 00466 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, 00467 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, 00468 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, 00469 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, 00470 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, 00471 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, 00472 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, 00473 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, 00474 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, 00475 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, 00476 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, 00477 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, 00478 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, 00479 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, 00480 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, 00481 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, 00482 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, 00483 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, 00484 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, 00485 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, 00486 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, 00487 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, 00488 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, 00489 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, 00490 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, 00491 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, 00492 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, 00493 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, 00494 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, 00495 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, 00496 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, 00497 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, 00498 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, 00499 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, 00500 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, 00501 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, 00502 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, 00503 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, 00504 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, 00505 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, 00506 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, 00507 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, 00508 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, 00509 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, 00510 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, 00511 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, 00512 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, 00513 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, 00514 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, 00515 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, 00516 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, 00517 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, 00518 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, 00519 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, 00520 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L }, 00521 { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, 00522 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, 00523 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, 00524 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, 00525 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, 00526 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, 00527 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, 00528 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, 00529 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, 00530 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, 00531 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, 00532 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, 00533 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, 00534 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, 00535 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, 00536 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, 00537 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, 00538 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, 00539 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, 00540 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, 00541 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, 00542 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, 00543 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, 00544 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, 00545 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, 00546 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, 00547 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, 00548 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, 00549 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, 00550 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, 00551 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, 00552 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, 00553 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, 00554 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, 00555 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, 00556 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, 00557 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, 00558 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, 00559 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, 00560 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, 00561 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, 00562 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, 00563 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, 00564 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, 00565 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, 00566 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, 00567 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, 00568 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, 00569 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, 00570 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, 00571 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, 00572 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, 00573 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, 00574 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, 00575 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, 00576 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, 00577 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, 00578 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, 00579 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, 00580 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, 00581 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, 00582 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, 00583 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, 00584 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L }, 00585 { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, 00586 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, 00587 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, 00588 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, 00589 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, 00590 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, 00591 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, 00592 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, 00593 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, 00594 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, 00595 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, 00596 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, 00597 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, 00598 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, 00599 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, 00600 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, 00601 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, 00602 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, 00603 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, 00604 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, 00605 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, 00606 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, 00607 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, 00608 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, 00609 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, 00610 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, 00611 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, 00612 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, 00613 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, 00614 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, 00615 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, 00616 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, 00617 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, 00618 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, 00619 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, 00620 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, 00621 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, 00622 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, 00623 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, 00624 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, 00625 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, 00626 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, 00627 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, 00628 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, 00629 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, 00630 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, 00631 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, 00632 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, 00633 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, 00634 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, 00635 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, 00636 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, 00637 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, 00638 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, 00639 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, 00640 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, 00641 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, 00642 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, 00643 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, 00644 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, 00645 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, 00646 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, 00647 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, 00648 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L } 00649 }; 00650 00651 #endif /* !MBEDTLS_BLOWFISH_ALT */ 00652 #endif /* MBEDTLS_BLOWFISH_C */
Generated on Tue Jul 12 2022 12:43:36 by
