blob: 66bf355efd3335796715b845aa5456fa6544ef15 [file] [log] [blame]
Paul Bakkera9379c02012-07-04 11:02:11 +00001/*
2 * Blowfish implementation
3 *
Bence Szépkúti44bfbe32020-08-19 16:54:51 +02004 * Copyright The Mbed TLS Contributors
Bence Szépkúti4e9f7122020-06-05 13:02:18 +02005 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
6 *
7 * This file is provided under the Apache License 2.0, or the
8 * GNU General Public License v2.0 or later.
9 *
10 * **********
11 * Apache License 2.0:
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +020012 *
13 * Licensed under the Apache License, Version 2.0 (the "License"); you may
14 * not use this file except in compliance with the License.
15 * You may obtain a copy of the License at
16 *
17 * http://www.apache.org/licenses/LICENSE-2.0
18 *
19 * Unless required by applicable law or agreed to in writing, software
20 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 * See the License for the specific language governing permissions and
23 * limitations under the License.
Paul Bakkera9379c02012-07-04 11:02:11 +000024 *
Bence Szépkúti4e9f7122020-06-05 13:02:18 +020025 * **********
26 *
27 * **********
28 * GNU General Public License v2.0 or later:
29 *
30 * This program is free software; you can redistribute it and/or modify
31 * it under the terms of the GNU General Public License as published by
32 * the Free Software Foundation; either version 2 of the License, or
33 * (at your option) any later version.
34 *
35 * This program is distributed in the hope that it will be useful,
36 * but WITHOUT ANY WARRANTY; without even the implied warranty of
37 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38 * GNU General Public License for more details.
39 *
40 * You should have received a copy of the GNU General Public License along
41 * with this program; if not, write to the Free Software Foundation, Inc.,
42 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
43 *
44 * **********
Paul Bakkera9379c02012-07-04 11:02:11 +000045 */
46/*
47 * The Blowfish block cipher was designed by Bruce Schneier in 1993.
48 * http://www.schneier.com/blowfish.html
49 * http://en.wikipedia.org/wiki/Blowfish_%28cipher%29
50 *
51 */
52
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020053#if !defined(MBEDTLS_CONFIG_FILE)
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000054#include "mbedtls/config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020055#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020056#include MBEDTLS_CONFIG_FILE
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020057#endif
Paul Bakkera9379c02012-07-04 11:02:11 +000058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059#if defined(MBEDTLS_BLOWFISH_C)
Paul Bakkera9379c02012-07-04 11:02:11 +000060
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000061#include "mbedtls/blowfish.h"
Paul Bakkera9379c02012-07-04 11:02:11 +000062
Rich Evans00ab4702015-02-06 13:43:58 +000063#include <string.h>
64
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020065#if !defined(MBEDTLS_BLOWFISH_ALT)
Paul Bakker90995b52013-06-24 19:20:35 +020066
Paul Bakkerc7ea99a2014-06-18 11:12:03 +020067/* Implementation that should never be optimized out by the compiler */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020068static void mbedtls_zeroize( void *v, size_t n ) {
Simon Butcher88ffc082016-05-20 00:00:37 +010069 volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0;
Paul Bakkerc7ea99a2014-06-18 11:12:03 +020070}
71
Paul Bakkera9379c02012-07-04 11:02:11 +000072/*
73 * 32-bit integer manipulation macros (big endian)
74 */
Paul Bakker5c2364c2012-10-01 14:41:15 +000075#ifndef GET_UINT32_BE
76#define GET_UINT32_BE(n,b,i) \
Paul Bakkera9379c02012-07-04 11:02:11 +000077{ \
Paul Bakker5c2364c2012-10-01 14:41:15 +000078 (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
79 | ( (uint32_t) (b)[(i) + 1] << 16 ) \
80 | ( (uint32_t) (b)[(i) + 2] << 8 ) \
81 | ( (uint32_t) (b)[(i) + 3] ); \
Paul Bakkera9379c02012-07-04 11:02:11 +000082}
83#endif
84
Paul Bakker5c2364c2012-10-01 14:41:15 +000085#ifndef PUT_UINT32_BE
86#define PUT_UINT32_BE(n,b,i) \
Paul Bakkera9379c02012-07-04 11:02:11 +000087{ \
88 (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
89 (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
90 (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
91 (b)[(i) + 3] = (unsigned char) ( (n) ); \
92}
93#endif
94
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020095static const uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2] = {
Paul Bakkerd6f17b42012-10-01 20:58:19 +000096 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
97 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
98 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
99 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
100 0x9216D5D9L, 0x8979FB1BL
101};
102
Paul Bakkera9379c02012-07-04 11:02:11 +0000103/* declarations of data at the end of this file */
Paul Bakker5c2364c2012-10-01 14:41:15 +0000104static const uint32_t S[4][256];
Paul Bakkera9379c02012-07-04 11:02:11 +0000105
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200106static uint32_t F( mbedtls_blowfish_context *ctx, uint32_t x )
Paul Bakkera9379c02012-07-04 11:02:11 +0000107{
108 unsigned short a, b, c, d;
Paul Bakker5c2364c2012-10-01 14:41:15 +0000109 uint32_t y;
Paul Bakkera9379c02012-07-04 11:02:11 +0000110
111 d = (unsigned short)(x & 0xFF);
112 x >>= 8;
113 c = (unsigned short)(x & 0xFF);
114 x >>= 8;
115 b = (unsigned short)(x & 0xFF);
116 x >>= 8;
117 a = (unsigned short)(x & 0xFF);
118 y = ctx->S[0][a] + ctx->S[1][b];
119 y = y ^ ctx->S[2][c];
120 y = y + ctx->S[3][d];
121
Paul Bakkerd8bb8262014-06-17 14:06:49 +0200122 return( y );
Paul Bakkera9379c02012-07-04 11:02:11 +0000123}
124
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200125static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr )
Paul Bakkera9379c02012-07-04 11:02:11 +0000126{
Paul Bakker5c2364c2012-10-01 14:41:15 +0000127 uint32_t Xl, Xr, temp;
Paul Bakkera9379c02012-07-04 11:02:11 +0000128 short i;
129
130 Xl = *xl;
131 Xr = *xr;
132
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200133 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i )
Paul Bakkera9379c02012-07-04 11:02:11 +0000134 {
135 Xl = Xl ^ ctx->P[i];
Paul Bakker66d5d072014-06-17 16:39:18 +0200136 Xr = F( ctx, Xl ) ^ Xr;
Paul Bakkera9379c02012-07-04 11:02:11 +0000137
138 temp = Xl;
139 Xl = Xr;
140 Xr = temp;
141 }
142
143 temp = Xl;
144 Xl = Xr;
145 Xr = temp;
146
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147 Xr = Xr ^ ctx->P[MBEDTLS_BLOWFISH_ROUNDS];
148 Xl = Xl ^ ctx->P[MBEDTLS_BLOWFISH_ROUNDS + 1];
Paul Bakkera9379c02012-07-04 11:02:11 +0000149
150 *xl = Xl;
151 *xr = Xr;
152}
153
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200154static void blowfish_dec( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr )
Paul Bakkera9379c02012-07-04 11:02:11 +0000155{
Paul Bakker5c2364c2012-10-01 14:41:15 +0000156 uint32_t Xl, Xr, temp;
Paul Bakkera9379c02012-07-04 11:02:11 +0000157 short i;
158
159 Xl = *xl;
160 Xr = *xr;
161
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200162 for( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i )
Paul Bakkera9379c02012-07-04 11:02:11 +0000163 {
164 Xl = Xl ^ ctx->P[i];
Paul Bakker66d5d072014-06-17 16:39:18 +0200165 Xr = F( ctx, Xl ) ^ Xr;
Paul Bakkera9379c02012-07-04 11:02:11 +0000166
167 temp = Xl;
168 Xl = Xr;
169 Xr = temp;
170 }
171
172 temp = Xl;
173 Xl = Xr;
174 Xr = temp;
175
176 Xr = Xr ^ ctx->P[1];
177 Xl = Xl ^ ctx->P[0];
178
179 *xl = Xl;
180 *xr = Xr;
181}
182
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200183void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx )
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200184{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200185 memset( ctx, 0, sizeof( mbedtls_blowfish_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200186}
187
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200188void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx )
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200189{
190 if( ctx == NULL )
191 return;
192
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200193 mbedtls_zeroize( ctx, sizeof( mbedtls_blowfish_context ) );
Paul Bakkerc7ea99a2014-06-18 11:12:03 +0200194}
195
Paul Bakkera9379c02012-07-04 11:02:11 +0000196/*
197 * Blowfish key schedule
198 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200199int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key,
Manuel Pégourié-Gonnardb8186a52015-06-18 14:58:58 +0200200 unsigned int keybits )
Paul Bakkera9379c02012-07-04 11:02:11 +0000201{
202 unsigned int i, j, k;
Paul Bakker5c2364c2012-10-01 14:41:15 +0000203 uint32_t data, datal, datar;
Paul Bakkera9379c02012-07-04 11:02:11 +0000204
Manuel Pégourié-Gonnard097c7bb2015-06-18 16:43:38 +0200205 if( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS ||
Manuel Pégourié-Gonnardb8186a52015-06-18 14:58:58 +0200206 ( keybits % 8 ) )
Paul Bakkera9379c02012-07-04 11:02:11 +0000207 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200208 return( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH );
Paul Bakkera9379c02012-07-04 11:02:11 +0000209 }
210
Manuel Pégourié-Gonnardb8186a52015-06-18 14:58:58 +0200211 keybits >>= 3;
Paul Bakkera9379c02012-07-04 11:02:11 +0000212
Paul Bakker9af723c2014-05-01 13:03:14 +0200213 for( i = 0; i < 4; i++ )
Paul Bakkera9379c02012-07-04 11:02:11 +0000214 {
215 for( j = 0; j < 256; j++ )
216 ctx->S[i][j] = S[i][j];
217 }
218
219 j = 0;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200220 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i )
Paul Bakkera9379c02012-07-04 11:02:11 +0000221 {
222 data = 0x00000000;
223 for( k = 0; k < 4; ++k )
224 {
225 data = ( data << 8 ) | key[j++];
Manuel Pégourié-Gonnardb8186a52015-06-18 14:58:58 +0200226 if( j >= keybits )
Paul Bakkera9379c02012-07-04 11:02:11 +0000227 j = 0;
228 }
229 ctx->P[i] = P[i] ^ data;
230 }
231
232 datal = 0x00000000;
233 datar = 0x00000000;
234
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200235 for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000236 {
237 blowfish_enc( ctx, &datal, &datar );
238 ctx->P[i] = datal;
239 ctx->P[i + 1] = datar;
240 }
241
242 for( i = 0; i < 4; i++ )
243 {
244 for( j = 0; j < 256; j += 2 )
245 {
246 blowfish_enc( ctx, &datal, &datar );
247 ctx->S[i][j] = datal;
248 ctx->S[i][j + 1] = datar;
249 }
250 }
251 return( 0 );
252}
253
254/*
255 * Blowfish-ECB block encryption/decryption
256 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200257int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx,
Paul Bakkera9379c02012-07-04 11:02:11 +0000258 int mode,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200259 const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE],
260 unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] )
Paul Bakkera9379c02012-07-04 11:02:11 +0000261{
Paul Bakker5c2364c2012-10-01 14:41:15 +0000262 uint32_t X0, X1;
Paul Bakkera9379c02012-07-04 11:02:11 +0000263
Paul Bakker9af723c2014-05-01 13:03:14 +0200264 GET_UINT32_BE( X0, input, 0 );
265 GET_UINT32_BE( X1, input, 4 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000266
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200267 if( mode == MBEDTLS_BLOWFISH_DECRYPT )
Paul Bakkera9379c02012-07-04 11:02:11 +0000268 {
Paul Bakker66d5d072014-06-17 16:39:18 +0200269 blowfish_dec( ctx, &X0, &X1 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000270 }
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200271 else /* MBEDTLS_BLOWFISH_ENCRYPT */
Paul Bakkera9379c02012-07-04 11:02:11 +0000272 {
Paul Bakker66d5d072014-06-17 16:39:18 +0200273 blowfish_enc( ctx, &X0, &X1 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000274 }
275
Paul Bakker5c2364c2012-10-01 14:41:15 +0000276 PUT_UINT32_BE( X0, output, 0 );
277 PUT_UINT32_BE( X1, output, 4 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000278
279 return( 0 );
280}
281
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282#if defined(MBEDTLS_CIPHER_MODE_CBC)
Paul Bakkera9379c02012-07-04 11:02:11 +0000283/*
284 * Blowfish-CBC buffer encryption/decryption
285 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200286int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx,
Paul Bakkera9379c02012-07-04 11:02:11 +0000287 int mode,
288 size_t length,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200289 unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE],
Paul Bakkera9379c02012-07-04 11:02:11 +0000290 const unsigned char *input,
291 unsigned char *output )
292{
293 int i;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200294 unsigned char temp[MBEDTLS_BLOWFISH_BLOCKSIZE];
Paul Bakkera9379c02012-07-04 11:02:11 +0000295
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200296 if( length % MBEDTLS_BLOWFISH_BLOCKSIZE )
297 return( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH );
Paul Bakkera9379c02012-07-04 11:02:11 +0000298
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200299 if( mode == MBEDTLS_BLOWFISH_DECRYPT )
Paul Bakkera9379c02012-07-04 11:02:11 +0000300 {
301 while( length > 0 )
302 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303 memcpy( temp, input, MBEDTLS_BLOWFISH_BLOCKSIZE );
304 mbedtls_blowfish_crypt_ecb( ctx, mode, input, output );
Paul Bakkera9379c02012-07-04 11:02:11 +0000305
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200306 for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE;i++ )
Paul Bakkera9379c02012-07-04 11:02:11 +0000307 output[i] = (unsigned char)( output[i] ^ iv[i] );
308
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200309 memcpy( iv, temp, MBEDTLS_BLOWFISH_BLOCKSIZE );
Paul Bakkera9379c02012-07-04 11:02:11 +0000310
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200311 input += MBEDTLS_BLOWFISH_BLOCKSIZE;
312 output += MBEDTLS_BLOWFISH_BLOCKSIZE;
313 length -= MBEDTLS_BLOWFISH_BLOCKSIZE;
Paul Bakkera9379c02012-07-04 11:02:11 +0000314 }
315 }
316 else
317 {
318 while( length > 0 )
319 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200320 for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ )
Paul Bakkera9379c02012-07-04 11:02:11 +0000321 output[i] = (unsigned char)( input[i] ^ iv[i] );
322
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200323 mbedtls_blowfish_crypt_ecb( ctx, mode, output, output );
324 memcpy( iv, output, MBEDTLS_BLOWFISH_BLOCKSIZE );
Paul Bakkera9379c02012-07-04 11:02:11 +0000325
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326 input += MBEDTLS_BLOWFISH_BLOCKSIZE;
327 output += MBEDTLS_BLOWFISH_BLOCKSIZE;
328 length -= MBEDTLS_BLOWFISH_BLOCKSIZE;
Paul Bakkera9379c02012-07-04 11:02:11 +0000329 }
330 }
331
332 return( 0 );
333}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334#endif /* MBEDTLS_CIPHER_MODE_CBC */
Paul Bakkera9379c02012-07-04 11:02:11 +0000335
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200336#if defined(MBEDTLS_CIPHER_MODE_CFB)
Paul Bakkera9379c02012-07-04 11:02:11 +0000337/*
338 * Blowfish CFB buffer encryption/decryption
339 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200340int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx,
Paul Bakkera9379c02012-07-04 11:02:11 +0000341 int mode,
342 size_t length,
343 size_t *iv_off,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344 unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE],
Paul Bakkera9379c02012-07-04 11:02:11 +0000345 const unsigned char *input,
346 unsigned char *output )
347{
348 int c;
349 size_t n = *iv_off;
350
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200351 if( mode == MBEDTLS_BLOWFISH_DECRYPT )
Paul Bakkera9379c02012-07-04 11:02:11 +0000352 {
353 while( length-- )
354 {
355 if( n == 0 )
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200356 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv );
Paul Bakkera9379c02012-07-04 11:02:11 +0000357
358 c = *input++;
359 *output++ = (unsigned char)( c ^ iv[n] );
360 iv[n] = (unsigned char) c;
361
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200362 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE;
Paul Bakkera9379c02012-07-04 11:02:11 +0000363 }
364 }
365 else
366 {
367 while( length-- )
368 {
369 if( n == 0 )
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200370 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv );
Paul Bakkera9379c02012-07-04 11:02:11 +0000371
372 iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ );
373
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200374 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE;
Paul Bakkera9379c02012-07-04 11:02:11 +0000375 }
376 }
377
378 *iv_off = n;
379
380 return( 0 );
381}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200382#endif /*MBEDTLS_CIPHER_MODE_CFB */
Paul Bakkera9379c02012-07-04 11:02:11 +0000383
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200384#if defined(MBEDTLS_CIPHER_MODE_CTR)
Paul Bakkera9379c02012-07-04 11:02:11 +0000385/*
386 * Blowfish CTR buffer encryption/decryption
387 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200388int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx,
Paul Bakkera9379c02012-07-04 11:02:11 +0000389 size_t length,
390 size_t *nc_off,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200391 unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE],
392 unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE],
Paul Bakkera9379c02012-07-04 11:02:11 +0000393 const unsigned char *input,
394 unsigned char *output )
395{
396 int c, i;
397 size_t n = *nc_off;
398
399 while( length-- )
400 {
401 if( n == 0 ) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200402 mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, nonce_counter,
Paul Bakkerb9e4e2c2014-05-01 14:18:25 +0200403 stream_block );
Paul Bakkera9379c02012-07-04 11:02:11 +0000404
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200405 for( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- )
Paul Bakkera9379c02012-07-04 11:02:11 +0000406 if( ++nonce_counter[i - 1] != 0 )
407 break;
408 }
409 c = *input++;
410 *output++ = (unsigned char)( c ^ stream_block[n] );
411
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200412 n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE;
Paul Bakkera9379c02012-07-04 11:02:11 +0000413 }
414
415 *nc_off = n;
416
417 return( 0 );
418}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200419#endif /* MBEDTLS_CIPHER_MODE_CTR */
Paul Bakkera9379c02012-07-04 11:02:11 +0000420
Paul Bakker5c2364c2012-10-01 14:41:15 +0000421static const uint32_t S[4][256] = {
Paul Bakkera9379c02012-07-04 11:02:11 +0000422 { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
423 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
424 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
425 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
426 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
427 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
428 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
429 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
430 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
431 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
432 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
433 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
434 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
435 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
436 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
437 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
438 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
439 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
440 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
441 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
442 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
443 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
444 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
445 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
446 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
447 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
448 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
449 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
450 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
451 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
452 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
453 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
454 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
455 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
456 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
457 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
458 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
459 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
460 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
461 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
462 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
463 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
464 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
465 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
466 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
467 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
468 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
469 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
470 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
471 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
472 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
473 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
474 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
475 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
476 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
477 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
478 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
479 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
480 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
481 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
482 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
483 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
484 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
485 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL },
486 { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
487 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
488 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
489 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
490 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
491 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
492 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
493 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
494 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
495 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
496 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
497 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
498 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
499 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
500 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
501 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
502 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
503 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
504 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
505 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
506 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
507 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
508 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
509 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
510 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
511 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
512 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
513 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
514 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
515 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
516 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
517 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
518 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
519 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
520 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
521 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
522 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
523 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
524 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
525 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
526 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
527 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
528 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
529 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
530 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
531 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
532 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
533 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
534 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
535 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
536 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
537 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
538 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
539 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
540 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
541 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
542 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
543 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
544 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
545 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
546 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
547 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
548 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
549 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L },
550 { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
551 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
552 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
553 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
554 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
555 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
556 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
557 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
558 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
559 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
560 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
561 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
562 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
563 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
564 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
565 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
566 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
567 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
568 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
569 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
570 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
571 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
572 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
573 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
574 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
575 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
576 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
577 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
578 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
579 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
580 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
581 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
582 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
583 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
584 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
585 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
586 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
587 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
588 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
589 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
590 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
591 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
592 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
593 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
594 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
595 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
596 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
597 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
598 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
599 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
600 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
601 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
602 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
603 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
604 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
605 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
606 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
607 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
608 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
609 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
610 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
611 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
612 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
613 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L },
614 { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
615 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
616 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
617 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
618 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
619 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
620 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
621 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
622 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
623 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
624 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
625 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
626 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
627 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
628 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
629 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
630 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
631 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
632 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
633 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
634 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
635 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
636 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
637 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
638 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
639 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
640 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
641 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
642 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
643 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
644 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
645 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
646 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
647 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
648 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
649 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
650 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
651 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
652 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
653 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
654 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
655 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
656 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
657 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
658 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
659 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
660 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
661 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
662 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
663 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
664 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
665 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
666 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
667 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
668 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
669 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
670 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
671 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
672 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
673 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
674 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
675 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
676 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
677 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L }
678};
679
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200680#endif /* !MBEDTLS_BLOWFISH_ALT */
681#endif /* MBEDTLS_BLOWFISH_C */