blob: 2a2f9cbcd660adffaca542131e5647165b37bc8c [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"
Andrzej Kurekfba59212020-08-07 21:02:25 -04003#include "mbedtls/platform.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02004/* END_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00005
Paul Bakker33b43f12013-08-20 11:48:36 +02006/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02007 * depends_on:MBEDTLS_AES_C
Paul Bakker33b43f12013-08-20 11:48:36 +02008 * END_DEPENDENCIES
9 */
Paul Bakker5690efc2011-05-26 13:16:06 +000010
Paul Bakker33b43f12013-08-20 11:48:36 +020011/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +010012void aes_encrypt_ecb( data_t * key_str, data_t * src_str,
13 data_t * hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000014{
Paul Bakker367dae42009-06-28 21:50:27 +000015 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020016 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000017
Paul Bakker367dae42009-06-28 21:50:27 +000018 memset(output, 0x00, 100);
19
Simon Butcher249b3d62018-12-09 22:18:46 +000020 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000021
Azim Khand30ca132017-06-09 04:32:58 +010022 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020023 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000024 {
Azim Khand30ca132017-06-09 04:32:58 +010025 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +000026
Azim Khand30ca132017-06-09 04:32:58 +010027 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000028 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020029
Paul Bakkerbd51b262014-07-10 15:26:12 +020030exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020031 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000032}
Paul Bakker33b43f12013-08-20 11:48:36 +020033/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000034
Paul Bakker33b43f12013-08-20 11:48:36 +020035/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +010036void aes_decrypt_ecb( data_t * key_str, data_t * src_str,
37 data_t * hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000038{
Paul Bakker367dae42009-06-28 21:50:27 +000039 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000041
Paul Bakker367dae42009-06-28 21:50:27 +000042 memset(output, 0x00, 100);
43
Simon Butcher249b3d62018-12-09 22:18:46 +000044 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000045
Azim Khand30ca132017-06-09 04:32:58 +010046 TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020047 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000048 {
Azim Khand30ca132017-06-09 04:32:58 +010049 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +000050
Azim Khand30ca132017-06-09 04:32:58 +010051 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000052 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020053
Paul Bakkerbd51b262014-07-10 15:26:12 +020054exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000056}
Paul Bakker33b43f12013-08-20 11:48:36 +020057/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000058
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +010060void aes_encrypt_cbc( data_t * key_str, data_t * iv_str,
61 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +010062 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +000063{
Paul Bakker367dae42009-06-28 21:50:27 +000064 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020065 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000066
Paul Bakker367dae42009-06-28 21:50:27 +000067 memset(output, 0x00, 100);
68
Simon Butcher249b3d62018-12-09 22:18:46 +000069 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000070
Azim Khand30ca132017-06-09 04:32:58 +010071 mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 );
72 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020073 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +000074 {
Paul Bakker367dae42009-06-28 21:50:27 +000075
Azim Khand30ca132017-06-09 04:32:58 +010076 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +000077 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020078
Paul Bakkerbd51b262014-07-10 15:26:12 +020079exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020080 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000081}
Paul Bakker33b43f12013-08-20 11:48:36 +020082/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000083
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020084/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +010085void aes_decrypt_cbc( data_t * key_str, data_t * iv_str,
86 data_t * src_str, data_t * hex_dst_string,
Azim Khand30ca132017-06-09 04:32:58 +010087 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +000088{
Paul Bakker367dae42009-06-28 21:50:27 +000089 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020090 mbedtls_aes_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000091
Paul Bakker367dae42009-06-28 21:50:27 +000092 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020093 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000094
Azim Khand30ca132017-06-09 04:32:58 +010095 mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 );
96 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020097 if( cbc_result == 0)
Paul Bakkerf3ccc682010-03-18 21:21:02 +000098 {
Paul Bakker367dae42009-06-28 21:50:27 +000099
Azim Khand30ca132017-06-09 04:32:58 +0100100 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000101 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200102
Paul Bakkerbd51b262014-07-10 15:26:12 +0200103exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200104 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000105}
Paul Bakker33b43f12013-08-20 11:48:36 +0200106/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000107
Aorimn5f778012016-06-09 23:22:58 +0200108/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
Jaeden Amerocd9fc5e2018-05-30 15:23:24 +0100109void aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string,
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100110 char *hex_src_string, char *hex_dst_string )
Aorimn5f778012016-06-09 23:22:58 +0200111{
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100112 enum { AES_BLOCK_SIZE = 16 };
113 unsigned char *data_unit = NULL;
114 unsigned char *key = NULL;
115 unsigned char *src = NULL;
116 unsigned char *dst = NULL;
117 unsigned char *output = NULL;
Jaeden Amero9366feb2018-05-29 18:55:17 +0100118 mbedtls_aes_xts_context ctx;
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100119 size_t key_len, src_len, dst_len, data_unit_len;
Aorimn5f778012016-06-09 23:22:58 +0200120
Jaeden Amero9366feb2018-05-29 18:55:17 +0100121 mbedtls_aes_xts_init( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200122
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100123 data_unit = unhexify_alloc( hex_data_unit_string, &data_unit_len );
124 TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE );
Aorimn5f778012016-06-09 23:22:58 +0200125
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100126 key = unhexify_alloc( hex_key_string, &key_len );
127 TEST_ASSERT( key_len % 2 == 0 );
Aorimn5f778012016-06-09 23:22:58 +0200128
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100129 src = unhexify_alloc( hex_src_string, &src_len );
130 dst = unhexify_alloc( hex_dst_string, &dst_len );
131 TEST_ASSERT( src_len == dst_len );
Aorimn5f778012016-06-09 23:22:58 +0200132
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100133 output = zero_alloc( dst_len );
134
135 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 );
138
139 TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 );
Aorimn5f778012016-06-09 23:22:58 +0200140
141exit:
Jaeden Amero9366feb2018-05-29 18:55:17 +0100142 mbedtls_aes_xts_free( &ctx );
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100143 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 */
Jaeden Amerocd9fc5e2018-05-30 15:23:24 +0100152void aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string,
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100153 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
Jaeden Amero9366feb2018-05-29 18:55:17 +0100164 mbedtls_aes_xts_init( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200165
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100166 data_unit = unhexify_alloc( hex_data_unit_string, &data_unit_len );
167 TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE );
Aorimn5f778012016-06-09 23:22:58 +0200168
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100169 key = unhexify_alloc( hex_key_string, &key_len );
170 TEST_ASSERT( key_len % 2 == 0 );
Aorimn5f778012016-06-09 23:22:58 +0200171
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100172 src = unhexify_alloc( hex_src_string, &src_len );
173 dst = unhexify_alloc( hex_dst_string, &dst_len );
174 TEST_ASSERT( src_len == dst_len );
Aorimn5f778012016-06-09 23:22:58 +0200175
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100176 output = zero_alloc( dst_len );
177
178 TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 );
179 TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len,
180 data_unit, src, output ) == 0 );
181
182 TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 );
Aorimn5f778012016-06-09 23:22:58 +0200183
184exit:
Jaeden Amero9366feb2018-05-29 18:55:17 +0100185 mbedtls_aes_xts_free( &ctx );
Jaeden Ameroe5c4b072018-04-28 17:26:25 +0100186 mbedtls_free( data_unit );
187 mbedtls_free( key );
188 mbedtls_free( src );
189 mbedtls_free( dst );
190 mbedtls_free( output );
Aorimn5f778012016-06-09 23:22:58 +0200191}
192/* END_CASE */
193
Jaeden Amero425382d2018-04-28 17:26:25 +0100194/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
195void aes_crypt_xts_size( int size, int retval )
196{
197 mbedtls_aes_xts_context ctx;
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100198 const unsigned char src[16] = { 0 };
199 unsigned char output[16];
Jaeden Amero425382d2018-04-28 17:26:25 +0100200 unsigned char data_unit[16];
201 size_t length = size;
202
203 mbedtls_aes_xts_init( &ctx );
204 memset( data_unit, 0x00, sizeof( data_unit ) );
205
206
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100207 /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as
208 * otherwise we wouldn't get to the size check we're interested in. */
Jaeden Amero425382d2018-04-28 17:26:25 +0100209 TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval );
210}
211/* END_CASE */
212
Jaeden Amero142383e2018-05-31 10:40:34 +0100213/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
214void aes_crypt_xts_keysize( int size, int retval )
215{
216 mbedtls_aes_xts_context ctx;
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100217 const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
Jaeden Amero142383e2018-05-31 10:40:34 +0100218 size_t key_len = size;
219
220 mbedtls_aes_xts_init( &ctx );
221
222 TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval );
223 TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval );
224exit:
225 mbedtls_aes_xts_free( &ctx );
226}
227/* END_CASE */
Jaeden Amero425382d2018-04-28 17:26:25 +0100228
229
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200230/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100231void aes_encrypt_cfb128( data_t * key_str, data_t * iv_str,
232 data_t * src_str, data_t * hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000233{
Paul Bakker367dae42009-06-28 21:50:27 +0000234 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200235 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000236 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000237
Paul Bakker367dae42009-06-28 21:50:27 +0000238 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200239 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000240
Paul Bakker367dae42009-06-28 21:50:27 +0000241
Azim Khand30ca132017-06-09 04:32:58 +0100242 mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 );
243 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000244
Azim Khand30ca132017-06-09 04:32:58 +0100245 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200246
Paul Bakkerbd51b262014-07-10 15:26:12 +0200247exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200248 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000249}
Paul Bakker33b43f12013-08-20 11:48:36 +0200250/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000251
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200252/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100253void aes_decrypt_cfb128( data_t * key_str, data_t * iv_str,
254 data_t * src_str, data_t * hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000255{
Paul Bakker367dae42009-06-28 21:50:27 +0000256 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200257 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000258 size_t iv_offset = 0;
Paul Bakker367dae42009-06-28 21:50:27 +0000259
Paul Bakker367dae42009-06-28 21:50:27 +0000260 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200261 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000262
Paul Bakker367dae42009-06-28 21:50:27 +0000263
Azim Khand30ca132017-06-09 04:32:58 +0100264 mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 );
265 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000266
Azim Khand30ca132017-06-09 04:32:58 +0100267 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200268
Paul Bakkerbd51b262014-07-10 15:26:12 +0200269exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200270 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000271}
Paul Bakker33b43f12013-08-20 11:48:36 +0200272/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000273
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200274/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100275void aes_encrypt_cfb8( data_t * key_str, data_t * iv_str,
276 data_t * src_str, data_t * hex_dst_string )
Paul Bakker556efba2014-01-24 15:38:12 +0100277{
Paul Bakker556efba2014-01-24 15:38:12 +0100278 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200279 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100280
Paul Bakker556efba2014-01-24 15:38:12 +0100281 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100283
Paul Bakker556efba2014-01-24 15:38:12 +0100284
Azim Khand30ca132017-06-09 04:32:58 +0100285 mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 );
286 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100287
Azim Khand30ca132017-06-09 04:32:58 +0100288 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200289
Paul Bakkerbd51b262014-07-10 15:26:12 +0200290exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200291 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100292}
293/* END_CASE */
294
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200295/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Azim Khan5fcca462018-06-29 11:05:32 +0100296void aes_decrypt_cfb8( data_t * key_str, data_t * iv_str,
297 data_t * src_str, data_t * hex_dst_string )
Paul Bakker556efba2014-01-24 15:38:12 +0100298{
Paul Bakker556efba2014-01-24 15:38:12 +0100299 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200300 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100301
Paul Bakker556efba2014-01-24 15:38:12 +0100302 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200303 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100304
Paul Bakker556efba2014-01-24 15:38:12 +0100305
Azim Khand30ca132017-06-09 04:32:58 +0100306 mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 );
307 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100308
Azim Khand30ca132017-06-09 04:32:58 +0100309 TEST_ASSERT( hexcmp( output, hex_dst_string->x, src_str->len, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200310
Paul Bakkerbd51b262014-07-10 15:26:12 +0200311exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200312 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100313}
314/* END_CASE */
315
Simon Butcher03018842018-04-22 22:57:58 +0100316/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
317void aes_encrypt_ofb( int fragment_size, char *hex_key_string,
Simon Butcher00131442018-05-22 22:40:36 +0100318 char *hex_iv_string, char *hex_src_string,
319 char *hex_dst_string )
Simon Butcher03018842018-04-22 22:57:58 +0100320{
Simon Butchere416bf92018-06-02 18:28:32 +0100321 unsigned char key_str[32];
322 unsigned char iv_str[16];
323 unsigned char src_str[64];
324 unsigned char dst_str[64];
325 unsigned char output[32];
Simon Butcher03018842018-04-22 22:57:58 +0100326 mbedtls_aes_context ctx;
327 size_t iv_offset = 0;
328 int in_buffer_len;
329 unsigned char* src_str_next;
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100330 int key_len;
Simon Butcher03018842018-04-22 22:57:58 +0100331
Simon Butcherb7836e12018-06-02 18:36:49 +0100332 memset( key_str, 0x00, sizeof( key_str ) );
333 memset( iv_str, 0x00, sizeof( iv_str ) );
334 memset( src_str, 0x00, sizeof( src_str ) );
335 memset( dst_str, 0x00, sizeof( dst_str ) );
336 memset( output, 0x00, sizeof( output ) );
Simon Butcher03018842018-04-22 22:57:58 +0100337 mbedtls_aes_init( &ctx );
338
Simon Butchere416bf92018-06-02 18:28:32 +0100339 TEST_ASSERT( strlen( hex_key_string ) <= ( 32 * 2 ) );
340 TEST_ASSERT( strlen( hex_iv_string ) <= ( 16 * 2 ) );
341 TEST_ASSERT( strlen( hex_src_string ) <= ( 64 * 2 ) );
342 TEST_ASSERT( strlen( hex_dst_string ) <= ( 64 * 2 ) );
343
Simon Butcher03018842018-04-22 22:57:58 +0100344 key_len = unhexify( key_str, hex_key_string );
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100345 unhexify( iv_str, hex_iv_string );
Simon Butcher03018842018-04-22 22:57:58 +0100346 in_buffer_len = unhexify( src_str, hex_src_string );
347
Simon Butcherad4e4932018-04-29 00:43:47 +0100348 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100349 src_str_next = src_str;
350
351 while( in_buffer_len > 0 )
352 {
353 TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset,
354 iv_str, src_str_next, output ) == 0 );
355
356 hexify( dst_str, output, fragment_size );
357 TEST_ASSERT( strncmp( (char *) dst_str, hex_dst_string,
Simon Butcher00131442018-05-22 22:40:36 +0100358 ( 2 * fragment_size ) ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100359
360 in_buffer_len -= fragment_size;
361 hex_dst_string += ( fragment_size * 2 );
362 src_str_next += fragment_size;
363
364 if( in_buffer_len < fragment_size )
365 fragment_size = in_buffer_len;
366 }
367
368exit:
369 mbedtls_aes_free( &ctx );
370}
371/* END_CASE */
372
Andrzej Kurekfba59212020-08-07 21:02:25 -0400373/* BEGIN_CASE depends_on:MBEDTLS_VALIDATE_AES_KEYS_INTEGRITY:MBEDTLS_AES_SCA_COUNTERMEASURES:!MBEDTLS_AES_SETKEY_ENC_ALT:!MBEDTLS_AESNI_C */
374void aes_encrypt_ecb_crc( data_t * key_str, data_t * src_str,
375 data_t * hex_dst_string, unsigned int crc, int crypt_result, int check_crc )
376{
377 unsigned char output[100];
378 mbedtls_aes_context ctx;
379
380 memset(output, 0x00, 100);
381
382 mbedtls_aes_init( &ctx );
383
384 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == 0 );
385
386 if( check_crc )
387 TEST_ASSERT( ctx.crc == crc );
388 else
389 ctx.crc = crc;
390
391 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == crypt_result );
392
393 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
394
395exit:
396 mbedtls_aes_free( &ctx );
397}
398/* END_CASE */
399
400/* BEGIN_CASE depends_on:MBEDTLS_VALIDATE_AES_KEYS_INTEGRITY:MBEDTLS_AES_SCA_COUNTERMEASURES:!MBEDTLS_AES_SETKEY_ENC_ALT:!MBEDTLS_AESNI_C */
401void aes_decrypt_ecb_crc( data_t * key_str, data_t * src_str,
402 data_t * hex_dst_string, unsigned int crc, int crypt_result, int check_crc )
403{
404 unsigned char output[100];
405 mbedtls_aes_context ctx;
406
407 memset(output, 0x00, 100);
408
409 mbedtls_aes_init( &ctx );
410
411 TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == 0 );
412
413 if( check_crc )
414 TEST_ASSERT( ctx.crc == crc );
415 else
416 ctx.crc = crc;
417
418 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == crypt_result );
419
420 TEST_ASSERT( hexcmp( output, hex_dst_string->x, 16, hex_dst_string->len ) == 0 );
421
422exit:
423 mbedtls_aes_free( &ctx );
424}
425/* END_CASE */
426
Manuel Pégourié-Gonnarda2b0e272018-12-10 15:23:58 +0100427/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100428void aes_check_params( )
Simon Butchera6463452018-12-06 17:41:56 +0000429{
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100430 mbedtls_aes_context aes_ctx;
431#if defined(MBEDTLS_CIPHER_MODE_XTS)
432 mbedtls_aes_xts_context xts_ctx;
433#endif
Simon Butchera6463452018-12-06 17:41:56 +0000434 const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
Manuel Pégourié-Gonnard1aca2602018-12-12 12:56:55 +0100435 const unsigned char in[16] = { 0 };
436 unsigned char out[16];
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100437 size_t size;
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100438 const int valid_mode = MBEDTLS_AES_ENCRYPT;
439 const int invalid_mode = 42;
Simon Butchera6463452018-12-06 17:41:56 +0000440
441 TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) );
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100442#if defined(MBEDTLS_CIPHER_MODE_XTS)
Manuel Pégourié-Gonnard44c5d582018-12-10 16:56:14 +0100443 TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) );
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100444#endif
Manuel Pégourié-Gonnard44c5d582018-12-10 16:56:14 +0100445
Simon Butchera6463452018-12-06 17:41:56 +0000446 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
447 mbedtls_aes_setkey_enc( NULL, key, 128 ) );
Simon Butchera6463452018-12-06 17:41:56 +0000448 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100449 mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) );
Simon Butchera6463452018-12-06 17:41:56 +0000450
Simon Butchera6463452018-12-06 17:41:56 +0000451 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
452 mbedtls_aes_setkey_dec( NULL, key, 128 ) );
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100453 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
454 mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) );
455
456#if defined(MBEDTLS_CIPHER_MODE_XTS)
457 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
458 mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) );
459 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
460 mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) );
Simon Butchera6463452018-12-06 17:41:56 +0000461
462 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
Manuel Pégourié-Gonnard68e3dff2018-12-12 12:48:04 +0100463 mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) );
464 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
465 mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) );
466#endif
Manuel Pégourié-Gonnard1aca2602018-12-12 12:56:55 +0100467
468
469 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
470 mbedtls_aes_crypt_ecb( NULL,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100471 valid_mode, in, out ) );
Manuel Pégourié-Gonnard1aca2602018-12-12 12:56:55 +0100472 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
473 mbedtls_aes_crypt_ecb( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100474 invalid_mode, in, out ) );
Manuel Pégourié-Gonnard1aca2602018-12-12 12:56:55 +0100475 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
476 mbedtls_aes_crypt_ecb( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100477 valid_mode, NULL, out ) );
Manuel Pégourié-Gonnard1aca2602018-12-12 12:56:55 +0100478 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
479 mbedtls_aes_crypt_ecb( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100480 valid_mode, in, NULL ) );
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100481
482#if defined(MBEDTLS_CIPHER_MODE_CBC)
483 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
484 mbedtls_aes_crypt_cbc( NULL,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100485 valid_mode, 16,
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100486 out, in, out ) );
487 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
488 mbedtls_aes_crypt_cbc( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100489 invalid_mode, 16,
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100490 out, in, out ) );
491 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
492 mbedtls_aes_crypt_cbc( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100493 valid_mode, 16,
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100494 NULL, in, out ) );
495 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
496 mbedtls_aes_crypt_cbc( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100497 valid_mode, 16,
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100498 out, NULL, out ) );
499 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
500 mbedtls_aes_crypt_cbc( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100501 valid_mode, 16,
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100502 out, in, NULL ) );
503#endif /* MBEDTLS_CIPHER_MODE_CBC */
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100504
505#if defined(MBEDTLS_CIPHER_MODE_XTS)
506 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
507 mbedtls_aes_crypt_xts( NULL,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100508 valid_mode, 16,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100509 in, in, out ) );
510 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
511 mbedtls_aes_crypt_xts( &xts_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100512 invalid_mode, 16,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100513 in, in, out ) );
514 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
515 mbedtls_aes_crypt_xts( &xts_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100516 valid_mode, 16,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100517 NULL, in, out ) );
518 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
519 mbedtls_aes_crypt_xts( &xts_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100520 valid_mode, 16,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100521 in, NULL, out ) );
522 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
523 mbedtls_aes_crypt_xts( &xts_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100524 valid_mode, 16,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100525 in, in, NULL ) );
526#endif /* MBEDTLS_CIPHER_MODE_XTS */
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100527
528#if defined(MBEDTLS_CIPHER_MODE_CFB)
529 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
530 mbedtls_aes_crypt_cfb128( NULL,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100531 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100532 &size, out, in, out ) );
533 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
534 mbedtls_aes_crypt_cfb128( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100535 invalid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100536 &size, out, in, out ) );
537 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
538 mbedtls_aes_crypt_cfb128( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100539 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100540 NULL, out, in, out ) );
541 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
542 mbedtls_aes_crypt_cfb128( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100543 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100544 &size, NULL, in, out ) );
545 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
546 mbedtls_aes_crypt_cfb128( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100547 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100548 &size, out, NULL, out ) );
549 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
550 mbedtls_aes_crypt_cfb128( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100551 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100552 &size, out, in, NULL ) );
553
554
555 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
556 mbedtls_aes_crypt_cfb8( NULL,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100557 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100558 out, in, out ) );
559 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
560 mbedtls_aes_crypt_cfb8( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100561 invalid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100562 out, in, out ) );
563 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
564 mbedtls_aes_crypt_cfb8( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100565 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100566 NULL, in, out ) );
567 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
568 mbedtls_aes_crypt_cfb8( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100569 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100570 out, NULL, out ) );
571 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
572 mbedtls_aes_crypt_cfb8( &aes_ctx,
Manuel Pégourié-Gonnardab6b9752018-12-18 09:58:18 +0100573 valid_mode, 16,
Manuel Pégourié-Gonnard1677cca2018-12-13 10:27:13 +0100574 out, in, NULL ) );
575#endif /* MBEDTLS_CIPHER_MODE_CFB */
Manuel Pégourié-Gonnard8e41eb72018-12-13 11:00:56 +0100576
577#if defined(MBEDTLS_CIPHER_MODE_OFB)
578 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
579 mbedtls_aes_crypt_ofb( NULL, 16,
580 &size, out, in, out ) );
581 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
582 mbedtls_aes_crypt_ofb( &aes_ctx, 16,
583 NULL, out, in, out ) );
584 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
585 mbedtls_aes_crypt_ofb( &aes_ctx, 16,
586 &size, NULL, in, out ) );
587 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
588 mbedtls_aes_crypt_ofb( &aes_ctx, 16,
589 &size, out, NULL, out ) );
590 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
591 mbedtls_aes_crypt_ofb( &aes_ctx, 16,
592 &size, out, in, NULL ) );
593#endif /* MBEDTLS_CIPHER_MODE_OFB */
Manuel Pégourié-Gonnard2bc535b2018-12-13 11:08:36 +0100594
595#if defined(MBEDTLS_CIPHER_MODE_CTR)
596 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
597 mbedtls_aes_crypt_ctr( NULL, 16, &size, out,
598 out, in, out ) );
599 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
600 mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out,
601 out, in, out ) );
602 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
603 mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL,
604 out, in, out ) );
605 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
606 mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
607 NULL, in, out ) );
608 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
609 mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
610 out, NULL, out ) );
611 TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
612 mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
613 out, in, NULL ) );
614#endif /* MBEDTLS_CIPHER_MODE_CTR */
Manuel Pégourié-Gonnarda4251f42018-12-12 12:04:51 +0100615}
616/* END_CASE */
Simon Butchera6463452018-12-06 17:41:56 +0000617
Manuel Pégourié-Gonnarda4251f42018-12-12 12:04:51 +0100618/* BEGIN_CASE */
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100619void aes_misc_params( )
Manuel Pégourié-Gonnarda4251f42018-12-12 12:04:51 +0100620{
Manuel Pégourié-Gonnard488d9302018-12-18 13:05:49 +0100621#if defined(MBEDTLS_CIPHER_MODE_CBC) || \
622 defined(MBEDTLS_CIPHER_MODE_XTS) || \
623 defined(MBEDTLS_CIPHER_MODE_CFB) || \
624 defined(MBEDTLS_CIPHER_MODE_OFB)
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100625 mbedtls_aes_context aes_ctx;
Manuel Pégourié-Gonnard488d9302018-12-18 13:05:49 +0100626 const unsigned char in[16] = { 0 };
627 unsigned char out[16];
628#endif
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100629#if defined(MBEDTLS_CIPHER_MODE_XTS)
630 mbedtls_aes_xts_context xts_ctx;
631#endif
Manuel Pégourié-Gonnard488d9302018-12-18 13:05:49 +0100632#if defined(MBEDTLS_CIPHER_MODE_CFB) || \
633 defined(MBEDTLS_CIPHER_MODE_OFB)
Manuel Pégourié-Gonnarde55e1032018-12-18 12:09:02 +0100634 size_t size;
Manuel Pégourié-Gonnard488d9302018-12-18 13:05:49 +0100635#endif
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100636
Manuel Pégourié-Gonnard44c5d582018-12-10 16:56:14 +0100637 /* These calls accept NULL */
638 TEST_VALID_PARAM( mbedtls_aes_free( NULL ) );
Manuel Pégourié-Gonnardaf0c6cb2018-12-18 12:02:52 +0100639#if defined(MBEDTLS_CIPHER_MODE_XTS)
Manuel Pégourié-Gonnard44c5d582018-12-10 16:56:14 +0100640 TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) );
Manuel Pégourié-Gonnardaf0c6cb2018-12-18 12:02:52 +0100641#endif
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100642
643#if defined(MBEDTLS_CIPHER_MODE_CBC)
644 TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100645 15,
646 out, in, out )
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100647 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
648 TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT,
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100649 17,
650 out, in, out )
Manuel Pégourié-Gonnard3178d1a2018-12-12 13:05:00 +0100651 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
652#endif
653
Manuel Pégourié-Gonnard191af132018-12-13 10:15:30 +0100654#if defined(MBEDTLS_CIPHER_MODE_XTS)
655 TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT,
656 15,
657 in, in, out )
658 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
659 TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT,
660 (1 << 24) + 1,
661 in, in, out )
662 == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
663#endif
Manuel Pégourié-Gonnarde55e1032018-12-18 12:09:02 +0100664
665#if defined(MBEDTLS_CIPHER_MODE_CFB)
666 size = 16;
667 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16,
668 &size, out, in, out )
669 == MBEDTLS_ERR_AES_BAD_INPUT_DATA );
670#endif
671
672#if defined(MBEDTLS_CIPHER_MODE_OFB)
673 size = 16;
674 TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out )
675 == MBEDTLS_ERR_AES_BAD_INPUT_DATA );
676#endif
Simon Butchera6463452018-12-06 17:41:56 +0000677}
678/* END_CASE */
679
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200680/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Azim Khanf1aaec92017-05-30 14:23:15 +0100681void aes_selftest( )
Paul Bakker3d360822009-07-05 11:29:38 +0000682{
Andres AG93012e82016-09-09 09:10:28 +0100683 TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 );
Paul Bakker3d360822009-07-05 11:29:38 +0000684}
Paul Bakker33b43f12013-08-20 11:48:36 +0200685/* END_CASE */