blob: e998795da4d735ee5a1f50a7246f4636b1bec05b [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 */
11void aes_encrypt_ecb( char *hex_key_string, char *hex_src_string,
12 char *hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000013{
14 unsigned char key_str[100];
15 unsigned char src_str[100];
16 unsigned char dst_str[100];
17 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020018 mbedtls_aes_context ctx;
Paul Bakker69998dd2009-07-11 19:15:20 +000019 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +000020
21 memset(key_str, 0x00, 100);
22 memset(src_str, 0x00, 100);
23 memset(dst_str, 0x00, 100);
24 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020025 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000026
Paul Bakker33b43f12013-08-20 11:48:36 +020027 key_len = unhexify( key_str, hex_key_string );
28 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000029
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020030 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020031 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000032 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020033 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str, output ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000034 hexify( dst_str, output, 16 );
Paul Bakker367dae42009-06-28 21:50:27 +000035
Paul Bakker33b43f12013-08-20 11:48:36 +020036 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000037 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020038
Paul Bakkerbd51b262014-07-10 15:26:12 +020039exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020040 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000041}
Paul Bakker33b43f12013-08-20 11:48:36 +020042/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000043
Paul Bakker33b43f12013-08-20 11:48:36 +020044/* BEGIN_CASE */
45void aes_decrypt_ecb( char *hex_key_string, char *hex_src_string,
46 char *hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000047{
48 unsigned char key_str[100];
49 unsigned char src_str[100];
50 unsigned char dst_str[100];
51 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020052 mbedtls_aes_context ctx;
Paul Bakker69998dd2009-07-11 19:15:20 +000053 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +000054
55 memset(key_str, 0x00, 100);
56 memset(src_str, 0x00, 100);
57 memset(dst_str, 0x00, 100);
58 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020059 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000060
Paul Bakker33b43f12013-08-20 11:48:36 +020061 key_len = unhexify( key_str, hex_key_string );
62 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000063
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020064 TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str, key_len * 8 ) == setkey_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020065 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000066 {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067 TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str, output ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000068 hexify( dst_str, output, 16 );
Paul Bakker367dae42009-06-28 21:50:27 +000069
Paul Bakker33b43f12013-08-20 11:48:36 +020070 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000071 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020072
Paul Bakkerbd51b262014-07-10 15:26:12 +020073exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020074 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000075}
Paul Bakker33b43f12013-08-20 11:48:36 +020076/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000077
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020078/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +020079void aes_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
80 char *hex_src_string, char *hex_dst_string,
81 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +000082{
83 unsigned char key_str[100];
84 unsigned char iv_str[100];
85 unsigned char src_str[100];
86 unsigned char dst_str[100];
87 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020088 mbedtls_aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +000089 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +000090
91 memset(key_str, 0x00, 100);
92 memset(iv_str, 0x00, 100);
93 memset(src_str, 0x00, 100);
94 memset(dst_str, 0x00, 100);
95 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020096 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000097
Paul Bakker33b43f12013-08-20 11:48:36 +020098 key_len = unhexify( key_str, hex_key_string );
99 unhexify( iv_str, hex_iv_string );
100 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000101
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200102 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
103 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, data_len, iv_str, src_str, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200104 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000105 {
106 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000107
Paul Bakker33b43f12013-08-20 11:48:36 +0200108 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000109 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200110
Paul Bakkerbd51b262014-07-10 15:26:12 +0200111exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200112 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000113}
Paul Bakker33b43f12013-08-20 11:48:36 +0200114/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000115
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200116/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +0200117void aes_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
118 char *hex_src_string, char *hex_dst_string,
119 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +0000120{
121 unsigned char key_str[100];
122 unsigned char iv_str[100];
123 unsigned char src_str[100];
124 unsigned char dst_str[100];
125 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200126 mbedtls_aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000127 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000128
129 memset(key_str, 0x00, 100);
130 memset(iv_str, 0x00, 100);
131 memset(src_str, 0x00, 100);
132 memset(dst_str, 0x00, 100);
133 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200134 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000135
Paul Bakker33b43f12013-08-20 11:48:36 +0200136 key_len = unhexify( key_str, hex_key_string );
137 unhexify( iv_str, hex_iv_string );
138 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000139
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200140 mbedtls_aes_setkey_dec( &ctx, key_str, key_len * 8 );
141 TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, data_len, iv_str, src_str, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200142 if( cbc_result == 0)
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000143 {
144 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000145
Paul Bakker33b43f12013-08-20 11:48:36 +0200146 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000147 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200148
Paul Bakkerbd51b262014-07-10 15:26:12 +0200149exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200150 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000151}
Paul Bakker33b43f12013-08-20 11:48:36 +0200152/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000153
Aorimn5f778012016-06-09 23:22:58 +0200154/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
155void aes_encrypt_xts( char *hex_key_string, char *hex_iv_string,
156 char *hex_src_string, char *hex_dst_string,
157 int data_unit_len, int xts_result )
158{
159 unsigned char key_str[100] = { 0, };
160 unsigned char iv_str[100] = { 0, };
161 unsigned char src_str[100] = { 0, };
162 unsigned char dst_str[100] = { 0, };
163 unsigned char output[100] = { 0, };
Jaeden Amero9366feb2018-05-29 18:55:17 +0100164 mbedtls_aes_xts_context ctx;
Aorimn5f778012016-06-09 23:22:58 +0200165 int key_len, data_len;
166
Jaeden Amero9366feb2018-05-29 18:55:17 +0100167 mbedtls_aes_xts_init( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200168
169 key_len = unhexify( key_str, hex_key_string );
170 unhexify( iv_str, hex_iv_string );
171 data_len = unhexify( src_str, hex_src_string );
172
Jaeden Amero9366feb2018-05-29 18:55:17 +0100173 mbedtls_aes_xts_setkey_enc( &ctx, key_str, key_len * 8 );
Aorimn5f778012016-06-09 23:22:58 +0200174
Jaeden Amero9366feb2018-05-29 18:55:17 +0100175 TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, data_unit_len, iv_str, src_str, output ) == xts_result );
Aorimn5f778012016-06-09 23:22:58 +0200176 if( xts_result == 0 )
177 {
178 hexify( dst_str, output, data_len );
179
180 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
181 }
182
183exit:
Jaeden Amero9366feb2018-05-29 18:55:17 +0100184 mbedtls_aes_xts_free( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200185}
186/* END_CASE */
187
188/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_XTS */
189void aes_decrypt_xts( char *hex_key_string, char *hex_iv_string,
190 char *hex_src_string, char *hex_dst_string,
191 int data_unit_len, int xts_result )
192{
193 unsigned char key_str[100] = { 0, };
194 unsigned char iv_str[100] = { 0, };
195 unsigned char src_str[100] = { 0, };
196 unsigned char dst_str[100] = { 0, };
197 unsigned char output[100] = { 0, };
Jaeden Amero9366feb2018-05-29 18:55:17 +0100198 mbedtls_aes_xts_context ctx;
Aorimn5f778012016-06-09 23:22:58 +0200199 int key_len, data_len;
200
Jaeden Amero9366feb2018-05-29 18:55:17 +0100201 mbedtls_aes_xts_init( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200202
203 key_len = unhexify( key_str, hex_key_string );
204 unhexify( iv_str, hex_iv_string );
205 data_len = unhexify( src_str, hex_src_string );
206
Jaeden Amero9366feb2018-05-29 18:55:17 +0100207 mbedtls_aes_xts_setkey_dec( &ctx, key_str, key_len * 8 );
Aorimn5f778012016-06-09 23:22:58 +0200208
Jaeden Amero9366feb2018-05-29 18:55:17 +0100209 TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, data_unit_len, iv_str, src_str, output ) == xts_result );
Aorimn5f778012016-06-09 23:22:58 +0200210 if( xts_result == 0 )
211 {
212 hexify( dst_str, output, data_len );
213
214 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
215 }
216
217exit:
Jaeden Amero9366feb2018-05-29 18:55:17 +0100218 mbedtls_aes_xts_free( &ctx );
Aorimn5f778012016-06-09 23:22:58 +0200219}
220/* END_CASE */
221
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200222/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker33b43f12013-08-20 11:48:36 +0200223void aes_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
224 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000225{
226 unsigned char key_str[100];
227 unsigned char iv_str[100];
228 unsigned char src_str[100];
229 unsigned char dst_str[100];
230 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200231 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000232 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000233 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000234
235 memset(key_str, 0x00, 100);
236 memset(iv_str, 0x00, 100);
237 memset(src_str, 0x00, 100);
238 memset(dst_str, 0x00, 100);
239 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200240 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000241
Paul Bakker33b43f12013-08-20 11:48:36 +0200242 key_len = unhexify( key_str, hex_key_string );
243 unhexify( iv_str, hex_iv_string );
244 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000245
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200246 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
247 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000248 hexify( dst_str, output, 16 );
249
Paul Bakker33b43f12013-08-20 11:48:36 +0200250 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200251
Paul Bakkerbd51b262014-07-10 15:26:12 +0200252exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200253 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 */
Paul Bakker33b43f12013-08-20 11:48:36 +0200258void aes_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
259 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000260{
261 unsigned char key_str[100];
262 unsigned char iv_str[100];
263 unsigned char src_str[100];
264 unsigned char dst_str[100];
265 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200266 mbedtls_aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000267 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000268 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000269
270 memset(key_str, 0x00, 100);
271 memset(iv_str, 0x00, 100);
272 memset(src_str, 0x00, 100);
273 memset(dst_str, 0x00, 100);
274 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200275 mbedtls_aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000276
Paul Bakker33b43f12013-08-20 11:48:36 +0200277 key_len = unhexify( key_str, hex_key_string );
278 unhexify( iv_str, hex_iv_string );
279 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000280
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200281 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
282 TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000283 hexify( dst_str, output, 16 );
284
Paul Bakker33b43f12013-08-20 11:48:36 +0200285 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200286
Paul Bakkerbd51b262014-07-10 15:26:12 +0200287exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200288 mbedtls_aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000289}
Paul Bakker33b43f12013-08-20 11:48:36 +0200290/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000291
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200292/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker556efba2014-01-24 15:38:12 +0100293void aes_encrypt_cfb8( char *hex_key_string, char *hex_iv_string,
294 char *hex_src_string, char *hex_dst_string )
295{
296 unsigned char key_str[100];
297 unsigned char iv_str[100];
298 unsigned char src_str[100];
299 unsigned char dst_str[100];
300 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200301 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100302 int key_len, src_len;
303
304 memset(key_str, 0x00, 100);
305 memset(iv_str, 0x00, 100);
306 memset(src_str, 0x00, 100);
307 memset(dst_str, 0x00, 100);
308 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200309 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100310
311 key_len = unhexify( key_str, hex_key_string );
312 unhexify( iv_str, hex_iv_string );
313 src_len = unhexify( src_str, hex_src_string );
314
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
316 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_len, iv_str, src_str, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100317 hexify( dst_str, output, src_len );
318
319 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200320
Paul Bakkerbd51b262014-07-10 15:26:12 +0200321exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100323}
324/* END_CASE */
325
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200326/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */
Paul Bakker556efba2014-01-24 15:38:12 +0100327void aes_decrypt_cfb8( char *hex_key_string, char *hex_iv_string,
328 char *hex_src_string, char *hex_dst_string )
329{
330 unsigned char key_str[100];
331 unsigned char iv_str[100];
332 unsigned char src_str[100];
333 unsigned char dst_str[100];
334 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200335 mbedtls_aes_context ctx;
Paul Bakker556efba2014-01-24 15:38:12 +0100336 int key_len, src_len;
337
338 memset(key_str, 0x00, 100);
339 memset(iv_str, 0x00, 100);
340 memset(src_str, 0x00, 100);
341 memset(dst_str, 0x00, 100);
342 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200343 mbedtls_aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100344
345 key_len = unhexify( key_str, hex_key_string );
346 unhexify( iv_str, hex_iv_string );
347 src_len = unhexify( src_str, hex_src_string );
348
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200349 mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 );
350 TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_len, iv_str, src_str, output ) == 0 );
Paul Bakker556efba2014-01-24 15:38:12 +0100351 hexify( dst_str, output, src_len );
352
353 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200354
Paul Bakkerbd51b262014-07-10 15:26:12 +0200355exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200356 mbedtls_aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100357}
358/* END_CASE */
359
Simon Butcher03018842018-04-22 22:57:58 +0100360/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_OFB */
361void aes_encrypt_ofb( int fragment_size, char *hex_key_string,
Simon Butcher00131442018-05-22 22:40:36 +0100362 char *hex_iv_string, char *hex_src_string,
363 char *hex_dst_string )
Simon Butcher03018842018-04-22 22:57:58 +0100364{
Simon Butchere416bf92018-06-02 18:28:32 +0100365 unsigned char key_str[32];
366 unsigned char iv_str[16];
367 unsigned char src_str[64];
368 unsigned char dst_str[64];
369 unsigned char output[32];
Simon Butcher03018842018-04-22 22:57:58 +0100370 mbedtls_aes_context ctx;
371 size_t iv_offset = 0;
372 int in_buffer_len;
373 unsigned char* src_str_next;
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100374 int key_len;
Simon Butcher03018842018-04-22 22:57:58 +0100375
Simon Butcherb7836e12018-06-02 18:36:49 +0100376 memset( key_str, 0x00, sizeof( key_str ) );
377 memset( iv_str, 0x00, sizeof( iv_str ) );
378 memset( src_str, 0x00, sizeof( src_str ) );
379 memset( dst_str, 0x00, sizeof( dst_str ) );
380 memset( output, 0x00, sizeof( output ) );
Simon Butcher03018842018-04-22 22:57:58 +0100381 mbedtls_aes_init( &ctx );
382
Simon Butchere416bf92018-06-02 18:28:32 +0100383 TEST_ASSERT( strlen( hex_key_string ) <= ( 32 * 2 ) );
384 TEST_ASSERT( strlen( hex_iv_string ) <= ( 16 * 2 ) );
385 TEST_ASSERT( strlen( hex_src_string ) <= ( 64 * 2 ) );
386 TEST_ASSERT( strlen( hex_dst_string ) <= ( 64 * 2 ) );
387
Simon Butcher03018842018-04-22 22:57:58 +0100388 key_len = unhexify( key_str, hex_key_string );
Simon Butcherdbe7fbf2018-04-29 14:51:35 +0100389 unhexify( iv_str, hex_iv_string );
Simon Butcher03018842018-04-22 22:57:58 +0100390 in_buffer_len = unhexify( src_str, hex_src_string );
391
Simon Butcherad4e4932018-04-29 00:43:47 +0100392 TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str, key_len * 8 ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100393 src_str_next = src_str;
394
395 while( in_buffer_len > 0 )
396 {
397 TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset,
398 iv_str, src_str_next, output ) == 0 );
399
400 hexify( dst_str, output, fragment_size );
401 TEST_ASSERT( strncmp( (char *) dst_str, hex_dst_string,
Simon Butcher00131442018-05-22 22:40:36 +0100402 ( 2 * fragment_size ) ) == 0 );
Simon Butcher03018842018-04-22 22:57:58 +0100403
404 in_buffer_len -= fragment_size;
405 hex_dst_string += ( fragment_size * 2 );
406 src_str_next += fragment_size;
407
408 if( in_buffer_len < fragment_size )
409 fragment_size = in_buffer_len;
410 }
411
412exit:
413 mbedtls_aes_free( &ctx );
414}
415/* END_CASE */
416
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200417/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Paul Bakker33b43f12013-08-20 11:48:36 +0200418void aes_selftest()
Paul Bakker3d360822009-07-05 11:29:38 +0000419{
Andres AG93012e82016-09-09 09:10:28 +0100420 TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 );
Paul Bakker3d360822009-07-05 11:29:38 +0000421}
Paul Bakker33b43f12013-08-20 11:48:36 +0200422/* END_CASE */