blob: 95417113dd8be5ec54213373968cc5ce1b8153dd [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
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010011void blowfish_valid_param()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050012{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010013 TEST_VALID_PARAM(mbedtls_blowfish_free(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050014}
15/* END_CASE */
16
17/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010018void blowfish_invalid_param()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050019{
20 mbedtls_blowfish_context ctx;
21 unsigned char buf[16] = { 0 };
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010022 size_t const valid_keylength = sizeof(buf) * 8;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050023 size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT;
24 size_t invalid_mode = 42;
25 size_t off;
26 ((void) off);
27
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010028 TEST_INVALID_PARAM(mbedtls_blowfish_init(NULL));
29 TEST_VALID_PARAM(mbedtls_blowfish_free(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050030
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010031 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
32 mbedtls_blowfish_setkey(NULL,
33 buf,
34 valid_keylength));
35 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
36 mbedtls_blowfish_setkey(&ctx,
37 NULL,
38 valid_keylength));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050039
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010040 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
41 mbedtls_blowfish_crypt_ecb(NULL,
42 valid_mode,
43 buf, buf));
44 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
45 mbedtls_blowfish_crypt_ecb(&ctx,
46 invalid_mode,
47 buf, buf));
48 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
49 mbedtls_blowfish_crypt_ecb(&ctx,
50 valid_mode,
51 NULL, buf));
52 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
53 mbedtls_blowfish_crypt_ecb(&ctx,
54 valid_mode,
55 buf, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050056
57#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010058 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
59 mbedtls_blowfish_crypt_cbc(NULL,
60 valid_mode,
61 sizeof(buf),
62 buf, buf, buf));
63 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
64 mbedtls_blowfish_crypt_cbc(&ctx,
65 invalid_mode,
66 sizeof(buf),
67 buf, buf, buf));
68 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
69 mbedtls_blowfish_crypt_cbc(&ctx,
70 valid_mode,
71 sizeof(buf),
72 NULL, buf, buf));
73 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
74 mbedtls_blowfish_crypt_cbc(&ctx,
75 valid_mode,
76 sizeof(buf),
77 buf, NULL, buf));
78 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
79 mbedtls_blowfish_crypt_cbc(&ctx,
80 valid_mode,
81 sizeof(buf),
82 buf, buf, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050083#endif /* MBEDTLS_CIPHER_MODE_CBC */
84
85#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010086 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
87 mbedtls_blowfish_crypt_cfb64(NULL,
88 valid_mode,
89 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,
94 invalid_mode,
95 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,
100 valid_mode,
101 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,
106 valid_mode,
107 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,
112 valid_mode,
113 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,
118 valid_mode,
119 sizeof(buf),
120 &off, buf,
121 buf, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500122#endif /* MBEDTLS_CIPHER_MODE_CFB */
123
124#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100125 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));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500161#endif /* MBEDTLS_CIPHER_MODE_CTR */
162
163exit:
164 return;
165}
166/* END_CASE */
167
168/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100169void blowfish_encrypt_ecb(data_t *key_str, data_t *src_str,
170 data_t *dst, 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);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100176 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000177
Paul Bakkera9379c02012-07-04 11:02:11 +0000178
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100179 TEST_ASSERT(mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8) == setkey_result);
180 if (setkey_result == 0) {
181 TEST_ASSERT(mbedtls_blowfish_crypt_ecb(&ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->x,
182 output) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000183
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100184 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 8, dst->len) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000185 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200186
Paul Bakkerbd51b262014-07-10 15:26:12 +0200187exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100188 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000189}
Paul Bakker33b43f12013-08-20 11:48:36 +0200190/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000191
Paul Bakker33b43f12013-08-20 11:48:36 +0200192/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100193void blowfish_decrypt_ecb(data_t *key_str, data_t *src_str,
194 data_t *dst, int setkey_result)
Paul Bakkera9379c02012-07-04 11:02:11 +0000195{
Paul Bakkera9379c02012-07-04 11:02:11 +0000196 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200197 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000198
Paul Bakkera9379c02012-07-04 11:02:11 +0000199 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100200 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000201
Paul Bakkera9379c02012-07-04 11:02:11 +0000202
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100203 TEST_ASSERT(mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8) == setkey_result);
204 if (setkey_result == 0) {
205 TEST_ASSERT(mbedtls_blowfish_crypt_ecb(&ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->x,
206 output) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000207
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100208 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 8, dst->len) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000209 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200210
Paul Bakkerbd51b262014-07-10 15:26:12 +0200211exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100212 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000213}
Paul Bakker33b43f12013-08-20 11:48:36 +0200214/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000215
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200216/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100217void blowfish_encrypt_cbc(data_t *key_str, data_t *iv_str,
218 data_t *src_str, data_t *dst,
219 int cbc_result)
Paul Bakkera9379c02012-07-04 11:02:11 +0000220{
Paul Bakkera9379c02012-07-04 11:02:11 +0000221 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200222 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000223
Paul Bakkera9379c02012-07-04 11:02:11 +0000224 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100225 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000226
Paul Bakkera9379c02012-07-04 11:02:11 +0000227
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100228 mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8);
Paul Bakkera9379c02012-07-04 11:02:11 +0000229
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100230 TEST_ASSERT(mbedtls_blowfish_crypt_cbc(&ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len, iv_str->x,
231 src_str->x, output) == cbc_result);
232 if (cbc_result == 0) {
Paul Bakkera9379c02012-07-04 11:02:11 +0000233
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100234 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
235 src_str->len, dst->len) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000236 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200237
Paul Bakkerbd51b262014-07-10 15:26:12 +0200238exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100239 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000240}
Paul Bakker33b43f12013-08-20 11:48:36 +0200241/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000242
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200243/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100244void blowfish_decrypt_cbc(data_t *key_str, data_t *iv_str,
245 data_t *src_str, data_t *dst,
246 int cbc_result)
Paul Bakkera9379c02012-07-04 11:02:11 +0000247{
Paul Bakkera9379c02012-07-04 11:02:11 +0000248 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200249 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000250
Paul Bakkera9379c02012-07-04 11:02:11 +0000251 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100252 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000253
Paul Bakkera9379c02012-07-04 11:02:11 +0000254
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100255 mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8);
256 TEST_ASSERT(mbedtls_blowfish_crypt_cbc(&ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len, iv_str->x,
257 src_str->x, output) == cbc_result);
258 if (cbc_result == 0) {
Paul Bakkera9379c02012-07-04 11:02:11 +0000259
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100260 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
261 dst->len) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000262 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200263
Paul Bakkerbd51b262014-07-10 15:26:12 +0200264exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100265 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000266}
Paul Bakker33b43f12013-08-20 11:48:36 +0200267/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000268
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200269/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100270void blowfish_encrypt_cfb64(data_t *key_str, data_t *iv_str,
271 data_t *src_str, data_t *dst)
Paul Bakkera9379c02012-07-04 11:02:11 +0000272{
Paul Bakkera9379c02012-07-04 11:02:11 +0000273 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000275 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000276
Paul Bakkera9379c02012-07-04 11:02:11 +0000277 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100278 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000279
Paul Bakkera9379c02012-07-04 11:02:11 +0000280
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100281 mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8);
282 TEST_ASSERT(mbedtls_blowfish_crypt_cfb64(&ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len,
283 &iv_offset, iv_str->x, src_str->x, output) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000284
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100285 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
286 dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200287
Paul Bakkerbd51b262014-07-10 15:26:12 +0200288exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100289 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000290}
Paul Bakker33b43f12013-08-20 11:48:36 +0200291/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000292
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200293/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100294void blowfish_decrypt_cfb64(data_t *key_str, data_t *iv_str,
295 data_t *src_str, data_t *dst)
Paul Bakkera9379c02012-07-04 11:02:11 +0000296{
Paul Bakkera9379c02012-07-04 11:02:11 +0000297 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200298 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000299 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000300
Paul Bakkera9379c02012-07-04 11:02:11 +0000301 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100302 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000303
Paul Bakkera9379c02012-07-04 11:02:11 +0000304
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100305 mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8);
306 TEST_ASSERT(mbedtls_blowfish_crypt_cfb64(&ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len,
307 &iv_offset, iv_str->x, src_str->x, output) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000308
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100309 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
310 dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200311
Paul Bakkerbd51b262014-07-10 15:26:12 +0200312exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100313 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000314}
Paul Bakker33b43f12013-08-20 11:48:36 +0200315/* END_CASE */
Paul Bakkera9379c02012-07-04 11:02:11 +0000316
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200317/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CTR */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100318void blowfish_encrypt_ctr(data_t *key_str, data_t *iv_str,
319 data_t *src_str, data_t *dst)
Paul Bakkera9379c02012-07-04 11:02:11 +0000320{
Paul Bakkera9379c02012-07-04 11:02:11 +0000321 unsigned char stream_str[100];
Paul Bakkera9379c02012-07-04 11:02:11 +0000322 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200323 mbedtls_blowfish_context ctx;
Paul Bakkera9379c02012-07-04 11:02:11 +0000324 size_t iv_offset = 0;
Paul Bakkera9379c02012-07-04 11:02:11 +0000325
Paul Bakkera9379c02012-07-04 11:02:11 +0000326 memset(stream_str, 0x00, 100);
Paul Bakkera9379c02012-07-04 11:02:11 +0000327 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100328 mbedtls_blowfish_init(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000329
Paul Bakkera9379c02012-07-04 11:02:11 +0000330
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100331 mbedtls_blowfish_setkey(&ctx, key_str->x, key_str->len * 8);
332 TEST_ASSERT(mbedtls_blowfish_crypt_ctr(&ctx, src_str->len, &iv_offset, iv_str->x, stream_str,
333 src_str->x, output) == 0);
Paul Bakkera9379c02012-07-04 11:02:11 +0000334
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100335 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len,
336 dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200337
Paul Bakkerbd51b262014-07-10 15:26:12 +0200338exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100339 mbedtls_blowfish_free(&ctx);
Paul Bakkera9379c02012-07-04 11:02:11 +0000340}
Paul Bakker33b43f12013-08-20 11:48:36 +0200341/* END_CASE */