blob: eb6891cadcbba569ed411a40f7e44c379383a3b0 [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 Beckerf947c0a2018-12-17 14:17:10 +000010/* BEGIN_CASE */
11void blowfish_valid_param( )
12{
13 TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) );
14}
15/* END_CASE */
16
Hanno Beckere38b4cd2018-12-12 18:46:19 +000017/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
18void blowfish_invalid_param( )
19{
20 mbedtls_blowfish_context ctx;
21 unsigned char buf[16] = { 0 };
Hanno Becker49acc642018-12-17 09:24:51 +000022 size_t const valid_keylength = sizeof( buf ) * 8;
23 size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT;
24 size_t invalid_mode = 42;
Hanno Beckere38b4cd2018-12-12 18:46:19 +000025 size_t off;
26 ((void) off);
27
28 TEST_INVALID_PARAM( mbedtls_blowfish_init( NULL ) );
29 TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) );
30
31 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
32 mbedtls_blowfish_setkey( NULL,
33 buf,
Hanno Becker49acc642018-12-17 09:24:51 +000034 valid_keylength ) );
Hanno Beckere38b4cd2018-12-12 18:46:19 +000035 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
36 mbedtls_blowfish_setkey( &ctx,
37 NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000038 valid_keylength ) );
Hanno Beckere38b4cd2018-12-12 18:46:19 +000039
40 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
41 mbedtls_blowfish_crypt_ecb( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000042 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000043 buf, buf ) );
44 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
45 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000046 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000047 buf, buf ) );
48 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
49 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000050 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000051 NULL, buf ) );
52 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
53 mbedtls_blowfish_crypt_ecb( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000054 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000055 buf, NULL ) );
56
57#if defined(MBEDTLS_CIPHER_MODE_CBC)
58 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
59 mbedtls_blowfish_crypt_cbc( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000060 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000061 sizeof( buf ),
62 buf, buf, buf ) );
63 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
64 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000065 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000066 sizeof( buf ),
67 buf, buf, buf ) );
68 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
69 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000070 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000071 sizeof( buf ),
72 NULL, buf, buf ) );
73 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
74 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000075 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000076 sizeof( buf ),
77 buf, NULL, buf ) );
78 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
79 mbedtls_blowfish_crypt_cbc( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000080 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000081 sizeof( buf ),
82 buf, buf, NULL ) );
83#endif /* MBEDTLS_CIPHER_MODE_CBC */
84
85#if defined(MBEDTLS_CIPHER_MODE_CFB)
86 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
87 mbedtls_blowfish_crypt_cfb64( NULL,
Hanno Becker49acc642018-12-17 09:24:51 +000088 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000089 sizeof( buf ),
90 &off, buf,
91 buf, buf ) );
92 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
93 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +000094 invalid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +000095 sizeof( buf ),
96 &off, buf,
97 buf, buf ) );
98 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
99 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000100 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000101 sizeof( buf ),
102 NULL, buf,
103 buf, buf ) );
104 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
105 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000106 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000107 sizeof( buf ),
108 &off, NULL,
109 buf, buf ) );
110 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
111 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000112 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000113 sizeof( buf ),
114 &off, buf,
115 NULL, buf ) );
116 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
117 mbedtls_blowfish_crypt_cfb64( &ctx,
Hanno Becker49acc642018-12-17 09:24:51 +0000118 valid_mode,
Hanno Beckere38b4cd2018-12-12 18:46:19 +0000119 sizeof( buf ),
120 &off, buf,
121 buf, NULL ) );
122#endif /* MBEDTLS_CIPHER_MODE_CFB */
123
124#if defined(MBEDTLS_CIPHER_MODE_CTR)
125 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
126 mbedtls_blowfish_crypt_ctr( NULL,
127 sizeof( buf ),
128 &off,
129 buf, buf,
130 buf, buf ) );
131 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
132 mbedtls_blowfish_crypt_ctr( &ctx,
133 sizeof( buf ),
134 NULL,
135 buf, buf,
136 buf, buf ) );
137 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
138 mbedtls_blowfish_crypt_ctr( &ctx,
139 sizeof( buf ),
140 &off,
141 NULL, buf,
142 buf, buf ) );
143 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
144 mbedtls_blowfish_crypt_ctr( &ctx,
145 sizeof( buf ),
146 &off,
147 buf, NULL,
148 buf, buf ) );
149 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
150 mbedtls_blowfish_crypt_ctr( &ctx,
151 sizeof( buf ),
152 &off,
153 buf, buf,
154 NULL, buf ) );
155 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
156 mbedtls_blowfish_crypt_ctr( &ctx,
157 sizeof( buf ),
158 &off,
159 buf, buf,
160 buf, NULL ) );
161#endif /* MBEDTLS_CIPHER_MODE_CTR */
162
163exit:
164 return;
165}
166/* END_CASE */
167
Paul Bakker33b43f12013-08-20 11:48:36 +0200168/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100169void blowfish_encrypt_ecb( data_t * key_str, data_t * src_str,
170 data_t * hex_dst_string, int setkey_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000171{
Paul Bakkera9379c02012-07-04 11:02:11 +0000172 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200173 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000174
Paul Bakkera9379c02012-07-04 11:02:11 +0000175 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200176 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000177
Paul Bakkera9379c02012-07-04 11:02:11 +0000178
Azim Khand30ca132017-06-09 04:32:58 +0100179 TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200180 if( setkey_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000181 {
Azim Khand30ca132017-06-09 04:32:58 +0100182 TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000183
Ronald Cron9fde3532020-06-10 11:42:32 +0200184 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
185 8, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000186 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200187
Paul Bakkerbd51b262014-07-10 15:26:12 +0200188exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200189 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000190}
Paul Bakker33b43f12013-08-20 11:48:36 +0200191/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000192
Paul Bakker33b43f12013-08-20 11:48:36 +0200193/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100194void blowfish_decrypt_ecb( data_t * key_str, data_t * src_str,
195 data_t * hex_dst_string, int setkey_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000196{
Paul Bakkera9379c02012-07-04 11:02:11 +0000197 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200198 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000199
Paul Bakkera9379c02012-07-04 11:02:11 +0000200 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200201 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000202
Paul Bakkera9379c02012-07-04 11:02:11 +0000203
Azim Khand30ca132017-06-09 04:32:58 +0100204 TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200205 if( setkey_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000206 {
Azim Khand30ca132017-06-09 04:32:58 +0100207 TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->x, output ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000208
Ronald Cron9fde3532020-06-10 11:42:32 +0200209 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
210 8, hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000211 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200212
Paul Bakkerbd51b262014-07-10 15:26:12 +0200213exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200214 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000215}
Paul Bakker33b43f12013-08-20 11:48:36 +0200216/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000217
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200218/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100219void blowfish_encrypt_cbc( data_t * key_str, data_t * iv_str,
220 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +0100221 int cbc_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000222{
Paul Bakkera9379c02012-07-04 11:02:11 +0000223 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200224 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000225
Paul Bakkera9379c02012-07-04 11:02:11 +0000226 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200227 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000228
Paul Bakkera9379c02012-07-04 11:02:11 +0000229
Azim Khand30ca132017-06-09 04:32:58 +0100230 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000231
Azim Khand30ca132017-06-09 04:32:58 +0100232 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 +0200233 if( cbc_result == 0 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000234 {
Paul Bakkera9379c02012-07-04 11:02:11 +0000235
Ronald Cron9fde3532020-06-10 11:42:32 +0200236 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
237 src_str->len,
238 hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000239 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200240
Paul Bakkerbd51b262014-07-10 15:26:12 +0200241exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200242 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000243}
Paul Bakker33b43f12013-08-20 11:48:36 +0200244/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000245
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200246/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100247void blowfish_decrypt_cbc( data_t * key_str, data_t * iv_str,
248 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +0100249 int cbc_result )
Paul Bakkera9379c02012-07-04 11:02:11 +0000250{
Paul Bakkera9379c02012-07-04 11:02:11 +0000251 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200252 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000253
Paul Bakkera9379c02012-07-04 11:02:11 +0000254 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200255 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000256
Paul Bakkera9379c02012-07-04 11:02:11 +0000257
Azim Khand30ca132017-06-09 04:32:58 +0100258 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
259 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 +0200260 if( cbc_result == 0)
Paul Bakkera9379c02012-07-04 11:02:11 +0000261 {
Paul Bakkera9379c02012-07-04 11:02:11 +0000262
Ronald Cron9fde3532020-06-10 11:42:32 +0200263 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
264 src_str->len,
265 hex_dst_string->len ) == 0 );
Paul Bakkera9379c02012-07-04 11:02:11 +0000266 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200267
Paul Bakkerbd51b262014-07-10 15:26:12 +0200268exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200269 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000270}
Paul Bakker33b43f12013-08-20 11:48:36 +0200271/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000272
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200273/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100274void blowfish_encrypt_cfb64( data_t * key_str, data_t * iv_str,
275 data_t * src_str, data_t * hex_dst_string
Azim Khand30ca132017-06-09 04:32:58 +0100276 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000277{
Paul Bakkera9379c02012-07-04 11:02:11 +0000278 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200279 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000280 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000281
Paul Bakkera9379c02012-07-04 11:02:11 +0000282 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200283 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000284
Paul Bakkera9379c02012-07-04 11:02:11 +0000285
Azim Khand30ca132017-06-09 04:32:58 +0100286 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
287 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 +0000288
Ronald Cron9fde3532020-06-10 11:42:32 +0200289 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
290 src_str->len,
291 hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200292
Paul Bakkerbd51b262014-07-10 15:26:12 +0200293exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200294 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000295}
Paul Bakker33b43f12013-08-20 11:48:36 +0200296/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000297
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200298/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100299void blowfish_decrypt_cfb64( data_t * key_str, data_t * iv_str,
300 data_t * src_str, data_t * hex_dst_string
Azim Khand30ca132017-06-09 04:32:58 +0100301 )
Paul Bakkera9379c02012-07-04 11:02:11 +0000302{
Paul Bakkera9379c02012-07-04 11:02:11 +0000303 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200304 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000305 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000306
Paul Bakkera9379c02012-07-04 11:02:11 +0000307 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200308 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000309
Paul Bakkera9379c02012-07-04 11:02:11 +0000310
Azim Khand30ca132017-06-09 04:32:58 +0100311 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
312 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 +0000313
Ronald Cron9fde3532020-06-10 11:42:32 +0200314 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
315 src_str->len,
316 hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200317
Paul Bakkerbd51b262014-07-10 15:26:12 +0200318exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200319 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000320}
Paul Bakker33b43f12013-08-20 11:48:36 +0200321/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000322
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200323/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Azim Khan5fcca462018-06-29 11:05:32 +0100324void blowfish_encrypt_ctr( data_t * key_str, data_t * iv_str,
325 data_t * src_str, data_t * hex_dst_string )
Paul Bakkera9379c02012-07-04 11:02:11 +0000326{
Paul Bakkera9379c02012-07-04 11:02:11 +0000327 unsigned char stream_str[100];
Paul Bakkera9379c02012-07-04 11:02:11 +0000328 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200329 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000330 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000331
Paul Bakkera9379c02012-07-04 11:02:11 +0000332 memset(stream_str, 0x00, 100);
Paul Bakkera9379c02012-07-04 11:02:11 +0000333 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200334 mbedtls_blowfish_init( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000335
Paul Bakkera9379c02012-07-04 11:02:11 +0000336
Azim Khand30ca132017-06-09 04:32:58 +0100337 mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 );
338 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 +0000339
Ronald Cron9fde3532020-06-10 11:42:32 +0200340 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
341 src_str->len,
342 hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200343
Paul Bakkerbd51b262014-07-10 15:26:12 +0200344exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200345 mbedtls_blowfish_free( &ctx );
Paul Bakkera9379c02012-07-04 11:02:11 +0000346}
Paul Bakker33b43f12013-08-20 11:48:36 +0200347/* END_CASE */