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