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