blob: 1d1422a4fde5ee776c4f3389ad1820172415b571 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/blowfish.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakkera9379c02012-07-04 11:02:11 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006 * depends_on:MBEDTLS_BLOWFISH_C
Paul Bakker33b43f12013-08-20 11:48:36 +02007 * END_DEPENDENCIES
8 */
Paul Bakkera9379c02012-07-04 11:02:11 +00009
Hanno Beckere38b4cd2018-12-12 18:46:19 +000010/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
11void blowfish_invalid_param( )
12{
13 mbedtls_blowfish_context ctx;
14 unsigned char buf[16] = { 0 };
Hanno Becker49acc642018-12-17 09:24:51 +000015 size_t const valid_keylength = sizeof( buf ) * 8;
16 size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT;
17 size_t invalid_mode = 42;
Hanno Beckere38b4cd2018-12-12 18:46:19 +000018 size_t off;
19 ((void) off);
20
21 TEST_INVALID_PARAM( mbedtls_blowfish_init( NULL ) );
22 TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) );
23
24 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
25 mbedtls_blowfish_setkey( NULL,
26 buf,
Hanno Becker49acc642018-12-17 09:24:51 +000027 valid_keylength ) );
Hanno Beckere38b4cd2018-12-12 18:46:19 +000028 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
29 mbedtls_blowfish_setkey( &ctx,
30 NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000031 valid_keylength ) );
Hanno Beckere38b4cd2018-12-12 18:46:19 +000032
33 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
34 mbedtls_blowfish_crypt_ecb( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000035 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000036 buf, buf ) );
37 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
38 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000039 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000040 buf, buf ) );
41 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
42 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000043 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000044 NULL, buf ) );
45 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
46 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000047 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000048 buf, NULL ) );
49
50#if defined(MBEDTLS_CIPHER_MODE_CBC)
51 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
52 mbedtls_blowfish_crypt_cbc( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000053 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000054 sizeof( buf ),
55 buf, buf, buf ) );
56 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
57 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000058 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000059 sizeof( buf ),
60 buf, buf, buf ) );
61 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
62 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000063 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000064 sizeof( buf ),
65 NULL, buf, buf ) );
66 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
67 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000068 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000069 sizeof( buf ),
70 buf, NULL, buf ) );
71 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
72 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000073 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000074 sizeof( buf ),
75 buf, buf, NULL ) );
76#endif /* MBEDTLS_CIPHER_MODE_CBC */
77
78#if defined(MBEDTLS_CIPHER_MODE_CFB)
79 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
80 mbedtls_blowfish_crypt_cfb64( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000081 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000082 sizeof( buf ),
83 &off, buf,
84 buf, buf ) );
85 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
86 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000087 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000088 sizeof( buf ),
89 &off, buf,
90 buf, buf ) );
91 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
92 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000093 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000094 sizeof( buf ),
95 NULL, buf,
96 buf, buf ) );
97 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
98 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000099 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000100 sizeof( buf ),
101 &off, NULL,
102 buf, buf ) );
103 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
104 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000105 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000106 sizeof( buf ),
107 &off, buf,
108 NULL, buf ) );
109 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
110 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000111 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000112 sizeof( buf ),
113 &off, buf,
114 buf, NULL ) );
115#endif /* MBEDTLS_CIPHER_MODE_CFB */
116
117#if defined(MBEDTLS_CIPHER_MODE_CTR)
118 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
119 mbedtls_blowfish_crypt_ctr( NULL,
120 sizeof( buf ),
121 &off,
122 buf, buf,
123 buf, buf ) );
124 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
125 mbedtls_blowfish_crypt_ctr( &ctx,
126 sizeof( buf ),
127 NULL,
128 buf, buf,
129 buf, buf ) );
130 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
131 mbedtls_blowfish_crypt_ctr( &ctx,
132 sizeof( buf ),
133 &off,
134 NULL, buf,
135 buf, buf ) );
136 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
137 mbedtls_blowfish_crypt_ctr( &ctx,
138 sizeof( buf ),
139 &off,
140 buf, NULL,
141 buf, buf ) );
142 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
143 mbedtls_blowfish_crypt_ctr( &ctx,
144 sizeof( buf ),
145 &off,
146 buf, buf,
147 NULL, buf ) );
148 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
149 mbedtls_blowfish_crypt_ctr( &ctx,
150 sizeof( buf ),
151 &off,
152 buf, buf,
153 buf, NULL ) );
154#endif /* MBEDTLS_CIPHER_MODE_CTR */
155
156exit:
157 return;
158}
159/* END_CASE */
160
Paul Bakker33b43f12013-08-20 11:48:36 +0200161/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100162void blowfish_encrypt_ecb( data_t * key_str, data_t * src_str,
163 data_t * hex_dst_string, int setkey_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000164{
Paul Bakkera9379c02012-07-04 11:02:11 +0000165 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200166 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000167
Paul Bakkera9379c02012-07-04 11:02:11 +0000168 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200169 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000170
Paul Bakkera9379c02012-07-04 11:02:11 +0000171
Azim Khand30ca132017-06-09 04:32:58 +0100172 TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200173 if( setkey_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000174 {
Azim Khand30ca132017-06-09 04:32:58 +0100175 TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000176
Azim Khand30ca132017-06-09 04:32:58 +0100177 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 8, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000178 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200179
Paul Bakkerbd51b262014-07-10 15:26:12 +0200180exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200181 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000182}
Paul Bakker33b43f12013-08-20 11:48:36 +0200183/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000184
Paul Bakker33b43f12013-08-20 11:48:36 +0200185/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100186void blowfish_decrypt_ecb( data_t * key_str, data_t * src_str,
187 data_t * hex_dst_string, int setkey_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000188{
Paul Bakkera9379c02012-07-04 11:02:11 +0000189 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200190 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000191
Paul Bakkera9379c02012-07-04 11:02:11 +0000192 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200193 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000194
Paul Bakkera9379c02012-07-04 11:02:11 +0000195
Azim Khand30ca132017-06-09 04:32:58 +0100196 TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200197 if( setkey_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000198 {
Azim Khand30ca132017-06-09 04:32:58 +0100199 TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000200
Azim Khand30ca132017-06-09 04:32:58 +0100201 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 8, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000202 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200203
Paul Bakkerbd51b262014-07-10 15:26:12 +0200204exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000206}
Paul Bakker33b43f12013-08-20 11:48:36 +0200207/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000208
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200209/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100210void blowfish_encrypt_cbc( data_t * key_str, data_t * iv_str,
211 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +0100212 int cbc_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000213{
Paul Bakkera9379c02012-07-04 11:02:11 +0000214 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200215 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000216
Paul Bakkera9379c02012-07-04 11:02:11 +0000217 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200218 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000219
Paul Bakkera9379c02012-07-04 11:02:11 +0000220
Azim Khand30ca132017-06-09 04:32:58 +0100221 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000222
Azim Khand30ca132017-06-09 04:32:58 +0100223 TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200224 if( cbc_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000225 {
Paul Bakkera9379c02012-07-04 11:02:11 +0000226
Azim Khand30ca132017-06-09 04:32:58 +0100227 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000228 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200229
Paul Bakkerbd51b262014-07-10 15:26:12 +0200230exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200231 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000232}
Paul Bakker33b43f12013-08-20 11:48:36 +0200233/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000234
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200235/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100236void blowfish_decrypt_cbc( data_t * key_str, data_t * iv_str,
237 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +0100238 int cbc_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000239{
Paul Bakkera9379c02012-07-04 11:02:11 +0000240 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200241 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000242
Paul Bakkera9379c02012-07-04 11:02:11 +0000243 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200244 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000245
Paul Bakkera9379c02012-07-04 11:02:11 +0000246
Azim Khand30ca132017-06-09 04:32:58 +0100247 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
248 TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200249 if( cbc_result == 0)
Paul Bakkera9379c02012-07-04 11:02:11 +0000250 {
Paul Bakkera9379c02012-07-04 11:02:11 +0000251
Azim Khand30ca132017-06-09 04:32:58 +0100252 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000253 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200254
Paul Bakkerbd51b262014-07-10 15:26:12 +0200255exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200256 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000257}
Paul Bakker33b43f12013-08-20 11:48:36 +0200258/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000259
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200260/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100261void blowfish_encrypt_cfb64( data_t * key_str, data_t * iv_str,
262 data_t * src_str, data_t * hex_dst_string
Azim Khand30ca132017-06-09 04:32:58 +0100263 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000264{
Paul Bakkera9379c02012-07-04 11:02:11 +0000265 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000267 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000268
Paul Bakkera9379c02012-07-04 11:02:11 +0000269 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200270 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000271
Paul Bakkera9379c02012-07-04 11:02:11 +0000272
Azim Khand30ca132017-06-09 04:32:58 +0100273 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
274 TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000275
Azim Khand30ca132017-06-09 04:32:58 +0100276 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200277
Paul Bakkerbd51b262014-07-10 15:26:12 +0200278exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200279 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000280}
Paul Bakker33b43f12013-08-20 11:48:36 +0200281/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000282
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200283/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100284void blowfish_decrypt_cfb64( data_t * key_str, data_t * iv_str,
285 data_t * src_str, data_t * hex_dst_string
Azim Khand30ca132017-06-09 04:32:58 +0100286 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000287{
Paul Bakkera9379c02012-07-04 11:02:11 +0000288 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200289 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000290 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000291
Paul Bakkera9379c02012-07-04 11:02:11 +0000292 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200293 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000294
Paul Bakkera9379c02012-07-04 11:02:11 +0000295
Azim Khand30ca132017-06-09 04:32:58 +0100296 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
297 TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000298
Azim Khand30ca132017-06-09 04:32:58 +0100299 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200300
Paul Bakkerbd51b262014-07-10 15:26:12 +0200301exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200302 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000303}
Paul Bakker33b43f12013-08-20 11:48:36 +0200304/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000305
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200306/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Azim Khan5fcca462018-06-29 11:05:32 +0100307void blowfish_encrypt_ctr( data_t * key_str, data_t * iv_str,
308 data_t * src_str, data_t * hex_dst_string )
Paul Bakkera9379c02012-07-04 11:02:11 +0000309{
Paul Bakkera9379c02012-07-04 11:02:11 +0000310 unsigned char stream_str[100];
Paul Bakkera9379c02012-07-04 11:02:11 +0000311 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200312 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000313 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000314
Paul Bakkera9379c02012-07-04 11:02:11 +0000315 memset(stream_str, 0x00, 100);
Paul Bakkera9379c02012-07-04 11:02:11 +0000316 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200317 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000318
Paul Bakkera9379c02012-07-04 11:02:11 +0000319
Azim Khand30ca132017-06-09 04:32:58 +0100320 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
321 TEST_ASSERT( mbedtls_blowfish_crypt_ctr( &ctx, src_str->len, &iv_offset, iv_str->x, stream_str, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000322
Azim Khand30ca132017-06-09 04:32:58 +0100323 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200324
Paul Bakkerbd51b262014-07-10 15:26:12 +0200325exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000327}
Paul Bakker33b43f12013-08-20 11:48:36 +0200328/* END_CASE */