blob: 6b92b870b11fbf7eca54eee533af6ad0245562ef [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/aes.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006 * depends_on:MBEDTLS_AES_C
Paul Bakker33b43f12013-08-20 11:48:36 +02007 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010011void aes_encrypt_ecb(data_t *key_str, data_t *src_str,
12 data_t *dst, int setkey_result)
Paul Bakker367dae42009-06-28 21:50:27 +000013{
Paul Bakker367dae42009-06-28 21:50:27 +000014 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020015 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000016
Paul Bakker367dae42009-06-28 21:50:27 +000017 memset(output, 0x00, 100);
18
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010019 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000020
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010021 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == setkey_result);
22 if (setkey_result == 0) {
23 TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +000024
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010025 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker2b222c82009-07-27 21:03:45 +000026 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020027
Paul Bakkerbd51b262014-07-10 15:26:12 +020028exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010029 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000030}
Paul Bakker33b43f12013-08-20 11:48:36 +020031/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000032
Paul Bakker33b43f12013-08-20 11:48:36 +020033/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010034void aes_decrypt_ecb(data_t *key_str, data_t *src_str,
35 data_t *dst, int setkey_result)
Paul Bakker367dae42009-06-28 21:50:27 +000036{
Paul Bakker367dae42009-06-28 21:50:27 +000037 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020038 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000039
Paul Bakker367dae42009-06-28 21:50:27 +000040 memset(output, 0x00, 100);
41
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010042 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000043
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010044 TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == setkey_result);
45 if (setkey_result == 0) {
46 TEST_ASSERT(mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_DECRYPT, src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +000047
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010048 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker2b222c82009-07-27 21:03:45 +000049 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020050
Paul Bakkerbd51b262014-07-10 15:26:12 +020051exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010052 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000053}
Paul Bakker33b43f12013-08-20 11:48:36 +020054/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000055
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020056/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010057void aes_encrypt_cbc(data_t *key_str, data_t *iv_str,
58 data_t *src_str, data_t *dst,
59 int cbc_result)
Paul Bakker367dae42009-06-28 21:50:27 +000060{
Paul Bakker367dae42009-06-28 21:50:27 +000061 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020062 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000063
Paul Bakker367dae42009-06-28 21:50:27 +000064 memset(output, 0x00, 100);
65
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010066 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000067
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010068 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
69 TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
70 src_str->x, output) == cbc_result);
71 if (cbc_result == 0) {
Paul Bakker367dae42009-06-28 21:50:27 +000072
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010073 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
74 src_str->len, dst->len) == 0);
Paul Bakkerf3ccc682010-03-18 21:21:02 +000075 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020076
Paul Bakkerbd51b262014-07-10 15:26:12 +020077exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010078 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000079}
Paul Bakker33b43f12013-08-20 11:48:36 +020080/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000081
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020082/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010083void aes_decrypt_cbc(data_t *key_str, data_t *iv_str,
84 data_t *src_str, data_t *dst,
85 int cbc_result)
Paul Bakker367dae42009-06-28 21:50:27 +000086{
Paul Bakker367dae42009-06-28 21:50:27 +000087 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020088 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000089
Paul Bakker367dae42009-06-28 21:50:27 +000090 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010091 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +000092
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010093 TEST_ASSERT(mbedtls_aes_setkey_dec(&ctx, key_str->x, key_str->len * 8) == 0);
94 TEST_ASSERT(mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
95 src_str->x, output) == cbc_result);
96 if (cbc_result == 0) {
Paul Bakker367dae42009-06-28 21:50:27 +000097
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010098 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
99 src_str->len, dst->len) == 0);
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000100 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200101
Paul Bakkerbd51b262014-07-10 15:26:12 +0200102exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100103 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000104}
Paul Bakker33b43f12013-08-20 11:48:36 +0200105/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000106
Aorimn5f778012016-06-09 23:22:58 +0200107/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100108void aes_encrypt_xts(char *hex_key_string, char *hex_data_unit_string,
109 char *hex_src_string, char *hex_dst_string)
Aorimn5f778012016-06-09 23:22:58 +0200110{
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100111 enum { AES_BLOCK_SIZE = 16 };
112 unsigned char *data_unit = NULL;
113 unsigned char *key = NULL;
114 unsigned char *src = NULL;
115 unsigned char *dst = NULL;
116 unsigned char *output = NULL;
Jaeden Amero9366feb2018-05-29 18:55:17 +0100117 mbedtls_aes_xts_context ctx;
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100118 size_t key_len, src_len, dst_len, data_unit_len;
Aorimn5f778012016-06-09 23:22:58 +0200119
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100120 mbedtls_aes_xts_init(&ctx);
Aorimn5f778012016-06-09 23:22:58 +0200121
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100122 data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
123 &data_unit_len);
124 TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
Aorimn5f778012016-06-09 23:22:58 +0200125
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100126 key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
127 TEST_ASSERT(key_len % 2 == 0);
Aorimn5f778012016-06-09 23:22:58 +0200128
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100129 src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
130 dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
131 TEST_ASSERT(src_len == dst_len);
Aorimn5f778012016-06-09 23:22:58 +0200132
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100133 output = mbedtls_test_zero_alloc(dst_len);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100134
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100135 TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == 0);
136 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, src_len,
137 data_unit, src, output) == 0);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100138
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100139 TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
Aorimn5f778012016-06-09 23:22:58 +0200140
141exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100142 mbedtls_aes_xts_free(&ctx);
143 mbedtls_free(data_unit);
144 mbedtls_free(key);
145 mbedtls_free(src);
146 mbedtls_free(dst);
147 mbedtls_free(output);
Aorimn5f778012016-06-09 23:22:58 +0200148}
149/* END_CASE */
150
151/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100152void aes_decrypt_xts(char *hex_key_string, char *hex_data_unit_string,
153 char *hex_dst_string, char *hex_src_string)
Aorimn5f778012016-06-09 23:22:58 +0200154{
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100155 enum { AES_BLOCK_SIZE = 16 };
156 unsigned char *data_unit = NULL;
157 unsigned char *key = NULL;
158 unsigned char *src = NULL;
159 unsigned char *dst = NULL;
160 unsigned char *output = NULL;
Jaeden Amero9366feb2018-05-29 18:55:17 +0100161 mbedtls_aes_xts_context ctx;
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100162 size_t key_len, src_len, dst_len, data_unit_len;
Aorimn5f778012016-06-09 23:22:58 +0200163
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100164 mbedtls_aes_xts_init(&ctx);
Aorimn5f778012016-06-09 23:22:58 +0200165
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100166 data_unit = mbedtls_test_unhexify_alloc(hex_data_unit_string,
167 &data_unit_len);
168 TEST_ASSERT(data_unit_len == AES_BLOCK_SIZE);
Aorimn5f778012016-06-09 23:22:58 +0200169
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100170 key = mbedtls_test_unhexify_alloc(hex_key_string, &key_len);
171 TEST_ASSERT(key_len % 2 == 0);
Aorimn5f778012016-06-09 23:22:58 +0200172
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100173 src = mbedtls_test_unhexify_alloc(hex_src_string, &src_len);
174 dst = mbedtls_test_unhexify_alloc(hex_dst_string, &dst_len);
175 TEST_ASSERT(src_len == dst_len);
Aorimn5f778012016-06-09 23:22:58 +0200176
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100177 output = mbedtls_test_zero_alloc(dst_len);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100178
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100179 TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == 0);
180 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_DECRYPT, src_len,
181 data_unit, src, output) == 0);
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100182
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100183 TEST_ASSERT(memcmp(output, dst, dst_len) == 0);
Aorimn5f778012016-06-09 23:22:58 +0200184
185exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100186 mbedtls_aes_xts_free(&ctx);
187 mbedtls_free(data_unit);
188 mbedtls_free(key);
189 mbedtls_free(src);
190 mbedtls_free(dst);
191 mbedtls_free(output);
Aorimn5f778012016-06-09 23:22:58 +0200192}
193/* END_CASE */
194
Jaeden Amero425382d2018-04-28 17:26:25 +0100195/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100196void aes_crypt_xts_size(int size, int retval)
Jaeden Amero425382d2018-04-28 17:26:25 +0100197{
198 mbedtls_aes_xts_context ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500199 const unsigned char src[16] = { 0 };
200 unsigned char output[16];
Jaeden Amero425382d2018-04-28 17:26:25 +0100201 unsigned char data_unit[16];
202 size_t length = size;
203
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100204 mbedtls_aes_xts_init(&ctx);
205 memset(data_unit, 0x00, sizeof(data_unit));
Jaeden Amero425382d2018-04-28 17:26:25 +0100206
207
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500208 /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as
209 * otherwise we wouldn't get to the size check we're interested in. */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100210 TEST_ASSERT(mbedtls_aes_crypt_xts(&ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src,
211 output) == retval);
JoeSubbiani67889a52021-06-17 16:12:23 +0100212exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100213 mbedtls_aes_xts_free(&ctx);
Jaeden Amero425382d2018-04-28 17:26:25 +0100214}
215/* END_CASE */
216
Jaeden Amero142383e2018-05-31 10:40:34 +0100217/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100218void aes_crypt_xts_keysize(int size, int retval)
Jaeden Amero142383e2018-05-31 10:40:34 +0100219{
220 mbedtls_aes_xts_context ctx;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500221 const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
Jaeden Amero142383e2018-05-31 10:40:34 +0100222 size_t key_len = size;
223
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100224 mbedtls_aes_xts_init(&ctx);
Jaeden Amero142383e2018-05-31 10:40:34 +0100225
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100226 TEST_ASSERT(mbedtls_aes_xts_setkey_enc(&ctx, key, key_len * 8) == retval);
227 TEST_ASSERT(mbedtls_aes_xts_setkey_dec(&ctx, key, key_len * 8) == retval);
Jaeden Amero142383e2018-05-31 10:40:34 +0100228exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100229 mbedtls_aes_xts_free(&ctx);
Jaeden Amero142383e2018-05-31 10:40:34 +0100230}
231/* END_CASE */
Jaeden Amero425382d2018-04-28 17:26:25 +0100232
233
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200234/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100235void aes_encrypt_cfb128(data_t *key_str, data_t *iv_str,
236 data_t *src_str, data_t *dst)
Paul Bakker367dae42009-06-28 21:50:27 +0000237{
Paul Bakker367dae42009-06-28 21:50:27 +0000238 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200239 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000240 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000241
Paul Bakker367dae42009-06-28 21:50:27 +0000242 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100243 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000244
Paul Bakker367dae42009-06-28 21:50:27 +0000245
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100246 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
247 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x,
248 src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +0000249
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100250 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200251
Paul Bakkerbd51b262014-07-10 15:26:12 +0200252exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100253 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000254}
Paul Bakker33b43f12013-08-20 11:48:36 +0200255/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000256
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200257/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100258void aes_decrypt_cfb128(data_t *key_str, data_t *iv_str,
259 data_t *src_str, data_t *dst)
Paul Bakker367dae42009-06-28 21:50:27 +0000260{
Paul Bakker367dae42009-06-28 21:50:27 +0000261 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200262 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000263 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000264
Paul Bakker367dae42009-06-28 21:50:27 +0000265 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100266 mbedtls_aes_init(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000267
Paul Bakker367dae42009-06-28 21:50:27 +0000268
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100269 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
270 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x,
271 src_str->x, output) == 0);
Paul Bakker367dae42009-06-28 21:50:27 +0000272
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100273 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200274
Paul Bakkerbd51b262014-07-10 15:26:12 +0200275exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100276 mbedtls_aes_free(&ctx);
Paul Bakker367dae42009-06-28 21:50:27 +0000277}
Paul Bakker33b43f12013-08-20 11:48:36 +0200278/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000279
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200280/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100281void aes_encrypt_cfb8(data_t *key_str, data_t *iv_str,
282 data_t *src_str, data_t *dst)
Paul Bakker556efba2014-01-24 15:38:12 +0100283{
Paul Bakker556efba2014-01-24 15:38:12 +0100284 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200285 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100286
Paul Bakker556efba2014-01-24 15:38:12 +0100287 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100288 mbedtls_aes_init(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100289
Paul Bakker556efba2014-01-24 15:38:12 +0100290
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100291 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
292 TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x,
293 src_str->x, output) == 0);
Paul Bakker556efba2014-01-24 15:38:12 +0100294
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100295 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
296 src_str->len, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200297
Paul Bakkerbd51b262014-07-10 15:26:12 +0200298exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100299 mbedtls_aes_free(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100300}
301/* END_CASE */
302
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100304void aes_decrypt_cfb8(data_t *key_str, data_t *iv_str,
305 data_t *src_str, data_t *dst)
Paul Bakker556efba2014-01-24 15:38:12 +0100306{
Paul Bakker556efba2014-01-24 15:38:12 +0100307 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200308 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100309
Paul Bakker556efba2014-01-24 15:38:12 +0100310 memset(output, 0x00, 100);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100311 mbedtls_aes_init(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100312
Paul Bakker556efba2014-01-24 15:38:12 +0100313
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100314 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x, key_str->len * 8) == 0);
315 TEST_ASSERT(mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x,
316 src_str->x, output) == 0);
Paul Bakker556efba2014-01-24 15:38:12 +0100317
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100318 TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x,
319 src_str->len, dst->len) == 0);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200320
Paul Bakkerbd51b262014-07-10 15:26:12 +0200321exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100322 mbedtls_aes_free(&ctx);
Paul Bakker556efba2014-01-24 15:38:12 +0100323}
324/* END_CASE */
325
Simon Butcher03018842018-04-22 22:57:58 +0100326/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100327void aes_encrypt_ofb(int fragment_size, data_t *key_str,
328 data_t *iv_str, data_t *src_str,
329 data_t *expected_output)
Simon Butcher03018842018-04-22 22:57:58 +0100330{
Simon Butchere416bf92018-06-02 18:28:32 +0100331 unsigned char output[32];
Simon Butcher03018842018-04-22 22:57:58 +0100332 mbedtls_aes_context ctx;
333 size_t iv_offset = 0;
334 int in_buffer_len;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100335 unsigned char *src_str_next;
Simon Butcher03018842018-04-22 22:57:58 +0100336
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100337 memset(output, 0x00, sizeof(output));
338 mbedtls_aes_init(&ctx);
Simon Butcher03018842018-04-22 22:57:58 +0100339
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100340 TEST_ASSERT((size_t) fragment_size < sizeof(output));
Simon Butchere416bf92018-06-02 18:28:32 +0100341
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100342 TEST_ASSERT(mbedtls_aes_setkey_enc(&ctx, key_str->x,
343 key_str->len * 8) == 0);
Ronald Cron9ed40732020-06-25 09:03:34 +0200344 in_buffer_len = src_str->len;
345 src_str_next = src_str->x;
Simon Butcher03018842018-04-22 22:57:58 +0100346
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100347 while (in_buffer_len > 0) {
348 TEST_ASSERT(mbedtls_aes_crypt_ofb(&ctx, fragment_size, &iv_offset,
349 iv_str->x, src_str_next, output) == 0);
Simon Butcher03018842018-04-22 22:57:58 +0100350
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100351 TEST_ASSERT(memcmp(output, expected_output->x, fragment_size) == 0);
Simon Butcher03018842018-04-22 22:57:58 +0100352
353 in_buffer_len -= fragment_size;
Ronald Cron55d97f22020-06-26 17:00:30 +0200354 expected_output->x += fragment_size;
Simon Butcher03018842018-04-22 22:57:58 +0100355 src_str_next += fragment_size;
356
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100357 if (in_buffer_len < fragment_size) {
Simon Butcher03018842018-04-22 22:57:58 +0100358 fragment_size = in_buffer_len;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100359 }
Simon Butcher03018842018-04-22 22:57:58 +0100360 }
361
362exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100363 mbedtls_aes_free(&ctx);
Simon Butcher03018842018-04-22 22:57:58 +0100364}
365/* END_CASE */
366
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500367/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100368void aes_check_params()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500369{
370 mbedtls_aes_context aes_ctx;
371#if defined(MBEDTLS_CIPHER_MODE_XTS)
372 mbedtls_aes_xts_context xts_ctx;
373#endif
374 const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
375 const unsigned char in[16] = { 0 };
376 unsigned char out[16];
377 size_t size;
378 const int valid_mode = MBEDTLS_AES_ENCRYPT;
379 const int invalid_mode = 42;
380
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100381 TEST_INVALID_PARAM(mbedtls_aes_init(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500382#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100383 TEST_INVALID_PARAM(mbedtls_aes_xts_init(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500384#endif
385
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100386 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
387 mbedtls_aes_setkey_enc(NULL, key, 128));
388 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
389 mbedtls_aes_setkey_enc(&aes_ctx, NULL, 128));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500390
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100391 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
392 mbedtls_aes_setkey_dec(NULL, key, 128));
393 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
394 mbedtls_aes_setkey_dec(&aes_ctx, NULL, 128));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500395
396#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100397 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
398 mbedtls_aes_xts_setkey_enc(NULL, key, 128));
399 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
400 mbedtls_aes_xts_setkey_enc(&xts_ctx, NULL, 128));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500401
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100402 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
403 mbedtls_aes_xts_setkey_dec(NULL, key, 128));
404 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
405 mbedtls_aes_xts_setkey_dec(&xts_ctx, NULL, 128));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500406#endif
407
408
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100409 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
410 mbedtls_aes_crypt_ecb(NULL,
411 valid_mode, in, out));
412 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
413 mbedtls_aes_crypt_ecb(&aes_ctx,
414 invalid_mode, in, out));
415 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
416 mbedtls_aes_crypt_ecb(&aes_ctx,
417 valid_mode, NULL, out));
418 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
419 mbedtls_aes_crypt_ecb(&aes_ctx,
420 valid_mode, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500421
422#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100423 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
424 mbedtls_aes_crypt_cbc(NULL,
425 valid_mode, 16,
426 out, in, out));
427 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
428 mbedtls_aes_crypt_cbc(&aes_ctx,
429 invalid_mode, 16,
430 out, in, out));
431 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
432 mbedtls_aes_crypt_cbc(&aes_ctx,
433 valid_mode, 16,
434 NULL, in, out));
435 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
436 mbedtls_aes_crypt_cbc(&aes_ctx,
437 valid_mode, 16,
438 out, NULL, out));
439 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
440 mbedtls_aes_crypt_cbc(&aes_ctx,
441 valid_mode, 16,
442 out, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500443#endif /* MBEDTLS_CIPHER_MODE_CBC */
444
445#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100446 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
447 mbedtls_aes_crypt_xts(NULL,
448 valid_mode, 16,
449 in, in, out));
450 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
451 mbedtls_aes_crypt_xts(&xts_ctx,
452 invalid_mode, 16,
453 in, in, out));
454 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
455 mbedtls_aes_crypt_xts(&xts_ctx,
456 valid_mode, 16,
457 NULL, in, out));
458 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
459 mbedtls_aes_crypt_xts(&xts_ctx,
460 valid_mode, 16,
461 in, NULL, out));
462 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
463 mbedtls_aes_crypt_xts(&xts_ctx,
464 valid_mode, 16,
465 in, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500466#endif /* MBEDTLS_CIPHER_MODE_XTS */
467
468#if defined(MBEDTLS_CIPHER_MODE_CFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100469 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
470 mbedtls_aes_crypt_cfb128(NULL,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500471 valid_mode, 16,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100472 &size, out, in, out));
473 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
474 mbedtls_aes_crypt_cfb128(&aes_ctx,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500475 invalid_mode, 16,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100476 &size, out, in, out));
477 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
478 mbedtls_aes_crypt_cfb128(&aes_ctx,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500479 valid_mode, 16,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100480 NULL, out, in, out));
481 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
482 mbedtls_aes_crypt_cfb128(&aes_ctx,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500483 valid_mode, 16,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100484 &size, NULL, in, out));
485 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
486 mbedtls_aes_crypt_cfb128(&aes_ctx,
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500487 valid_mode, 16,
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100488 &size, out, NULL, out));
489 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
490 mbedtls_aes_crypt_cfb128(&aes_ctx,
491 valid_mode, 16,
492 &size, out, in, NULL));
493
494
495 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
496 mbedtls_aes_crypt_cfb8(NULL,
497 valid_mode, 16,
498 out, in, out));
499 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
500 mbedtls_aes_crypt_cfb8(&aes_ctx,
501 invalid_mode, 16,
502 out, in, out));
503 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
504 mbedtls_aes_crypt_cfb8(&aes_ctx,
505 valid_mode, 16,
506 NULL, in, out));
507 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
508 mbedtls_aes_crypt_cfb8(&aes_ctx,
509 valid_mode, 16,
510 out, NULL, out));
511 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
512 mbedtls_aes_crypt_cfb8(&aes_ctx,
513 valid_mode, 16,
514 out, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500515#endif /* MBEDTLS_CIPHER_MODE_CFB */
516
517#if defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100518 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
519 mbedtls_aes_crypt_ofb(NULL, 16,
520 &size, out, in, out));
521 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
522 mbedtls_aes_crypt_ofb(&aes_ctx, 16,
523 NULL, out, in, out));
524 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
525 mbedtls_aes_crypt_ofb(&aes_ctx, 16,
526 &size, NULL, in, out));
527 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
528 mbedtls_aes_crypt_ofb(&aes_ctx, 16,
529 &size, out, NULL, out));
530 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
531 mbedtls_aes_crypt_ofb(&aes_ctx, 16,
532 &size, out, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500533#endif /* MBEDTLS_CIPHER_MODE_OFB */
534
535#if defined(MBEDTLS_CIPHER_MODE_CTR)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100536 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
537 mbedtls_aes_crypt_ctr(NULL, 16, &size, out,
538 out, in, out));
539 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
540 mbedtls_aes_crypt_ctr(&aes_ctx, 16, NULL, out,
541 out, in, out));
542 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
543 mbedtls_aes_crypt_ctr(&aes_ctx, 16, &size, NULL,
544 out, in, out));
545 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
546 mbedtls_aes_crypt_ctr(&aes_ctx, 16, &size, out,
547 NULL, in, out));
548 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
549 mbedtls_aes_crypt_ctr(&aes_ctx, 16, &size, out,
550 out, NULL, out));
551 TEST_INVALID_PARAM_RET(MBEDTLS_ERR_AES_BAD_INPUT_DATA,
552 mbedtls_aes_crypt_ctr(&aes_ctx, 16, &size, out,
553 out, in, NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500554#endif /* MBEDTLS_CIPHER_MODE_CTR */
555}
556/* END_CASE */
557
558/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100559void aes_misc_params()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500560{
561#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
562 defined(MBEDTLS_CIPHER_MODE_XTS) || \
563 defined(MBEDTLS_CIPHER_MODE_CFB) || \
564 defined(MBEDTLS_CIPHER_MODE_OFB)
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500565 const unsigned char in[16] = { 0 };
566 unsigned char out[16];
567#endif
Andrzej Kurek8ffd8a62022-09-27 07:54:16 -0400568#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
569 defined(MBEDTLS_CIPHER_MODE_CFB) || \
570 defined(MBEDTLS_CIPHER_MODE_OFB)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100571 mbedtls_aes_context aes_ctx;
Andrzej Kurek8ffd8a62022-09-27 07:54:16 -0400572#endif
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500573#if defined(MBEDTLS_CIPHER_MODE_XTS)
574 mbedtls_aes_xts_context xts_ctx;
575#endif
576#if defined(MBEDTLS_CIPHER_MODE_CFB) || \
577 defined(MBEDTLS_CIPHER_MODE_OFB)
578 size_t size;
579#endif
580
581 /* These calls accept NULL */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100582 TEST_VALID_PARAM(mbedtls_aes_free(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500583#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100584 TEST_VALID_PARAM(mbedtls_aes_xts_free(NULL));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500585#endif
586
587#if defined(MBEDTLS_CIPHER_MODE_CBC)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100588 TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
589 15,
590 out, in, out)
591 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
592 TEST_ASSERT(mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT,
593 17,
594 out, in, out)
595 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500596#endif
597
598#if defined(MBEDTLS_CIPHER_MODE_XTS)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100599 TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
600 15,
601 in, in, out)
602 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
603 TEST_ASSERT(mbedtls_aes_crypt_xts(&xts_ctx, MBEDTLS_AES_ENCRYPT,
604 (1 << 24) + 1,
605 in, in, out)
606 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500607#endif
608
609#if defined(MBEDTLS_CIPHER_MODE_CFB)
610 size = 16;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100611 TEST_ASSERT(mbedtls_aes_crypt_cfb128(&aes_ctx, MBEDTLS_AES_ENCRYPT, 16,
612 &size, out, in, out)
613 == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500614#endif
615
616#if defined(MBEDTLS_CIPHER_MODE_OFB)
617 size = 16;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100618 TEST_ASSERT(mbedtls_aes_crypt_ofb(&aes_ctx, 16, &size, out, in, out)
619 == MBEDTLS_ERR_AES_BAD_INPUT_DATA);
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500620#endif
621}
622/* END_CASE */
623
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200624/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100625void aes_selftest()
Paul Bakker3d360822009-07-05 11:29:38 +0000626{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100627 TEST_ASSERT(mbedtls_aes_self_test(1) == 0);
Paul Bakker3d360822009-07-05 11:29:38 +0000628}
Paul Bakker33b43f12013-08-20 11:48:36 +0200629/* END_CASE */