blob: 20f5889bc3ef819aff3d3d36171ee652f402b390 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00002#include <polarssl/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
6 * depends_on:POLARSSL_AES_C
7 * 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];
18 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);
Paul Bakker8cfd9d82014-06-18 11:16:11 +020025 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
Paul Bakker33b43f12013-08-20 11:48:36 +020030 TEST_ASSERT( aes_setkey_enc( &ctx, key_str, key_len * 8 ) == setkey_result );
31 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000032 {
Paul Bakkerf3ccc682010-03-18 21:21:02 +000033 TEST_ASSERT( aes_crypt_ecb( &ctx, 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
39 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000040}
Paul Bakker33b43f12013-08-20 11:48:36 +020041/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000042
Paul Bakker33b43f12013-08-20 11:48:36 +020043/* BEGIN_CASE */
44void aes_decrypt_ecb( char *hex_key_string, char *hex_src_string,
45 char *hex_dst_string, int setkey_result )
Paul Bakker367dae42009-06-28 21:50:27 +000046{
47 unsigned char key_str[100];
48 unsigned char src_str[100];
49 unsigned char dst_str[100];
50 unsigned char output[100];
51 aes_context ctx;
Paul Bakker69998dd2009-07-11 19:15:20 +000052 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +000053
54 memset(key_str, 0x00, 100);
55 memset(src_str, 0x00, 100);
56 memset(dst_str, 0x00, 100);
57 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +020058 aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000059
Paul Bakker33b43f12013-08-20 11:48:36 +020060 key_len = unhexify( key_str, hex_key_string );
61 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000062
Paul Bakker33b43f12013-08-20 11:48:36 +020063 TEST_ASSERT( aes_setkey_dec( &ctx, key_str, key_len * 8 ) == setkey_result );
64 if( setkey_result == 0 )
Paul Bakker2b222c82009-07-27 21:03:45 +000065 {
Paul Bakkerf3ccc682010-03-18 21:21:02 +000066 TEST_ASSERT( aes_crypt_ecb( &ctx, AES_DECRYPT, src_str, output ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000067 hexify( dst_str, output, 16 );
Paul Bakker367dae42009-06-28 21:50:27 +000068
Paul Bakker33b43f12013-08-20 11:48:36 +020069 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker2b222c82009-07-27 21:03:45 +000070 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020071
72 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000073}
Paul Bakker33b43f12013-08-20 11:48:36 +020074/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000075
Manuel Pégourié-Gonnard92cb1d32013-09-13 16:24:20 +020076/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +020077void aes_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
78 char *hex_src_string, char *hex_dst_string,
79 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +000080{
81 unsigned char key_str[100];
82 unsigned char iv_str[100];
83 unsigned char src_str[100];
84 unsigned char dst_str[100];
85 unsigned char output[100];
86 aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +000087 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +000088
89 memset(key_str, 0x00, 100);
90 memset(iv_str, 0x00, 100);
91 memset(src_str, 0x00, 100);
92 memset(dst_str, 0x00, 100);
93 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +020094 aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000095
Paul Bakker33b43f12013-08-20 11:48:36 +020096 key_len = unhexify( key_str, hex_key_string );
97 unhexify( iv_str, hex_iv_string );
98 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000099
100 aes_setkey_enc( &ctx, key_str, key_len * 8 );
Paul Bakker33b43f12013-08-20 11:48:36 +0200101 TEST_ASSERT( aes_crypt_cbc( &ctx, AES_ENCRYPT, data_len, iv_str, src_str, output ) == cbc_result );
102 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000103 {
104 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000105
Paul Bakker33b43f12013-08-20 11:48:36 +0200106 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000107 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200108
109 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000110}
Paul Bakker33b43f12013-08-20 11:48:36 +0200111/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000112
Manuel Pégourié-Gonnard92cb1d32013-09-13 16:24:20 +0200113/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CBC */
Paul Bakker33b43f12013-08-20 11:48:36 +0200114void aes_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
115 char *hex_src_string, char *hex_dst_string,
116 int cbc_result )
Paul Bakker367dae42009-06-28 21:50:27 +0000117{
118 unsigned char key_str[100];
119 unsigned char iv_str[100];
120 unsigned char src_str[100];
121 unsigned char dst_str[100];
122 unsigned char output[100];
123 aes_context ctx;
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000124 int key_len, data_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000125
126 memset(key_str, 0x00, 100);
127 memset(iv_str, 0x00, 100);
128 memset(src_str, 0x00, 100);
129 memset(dst_str, 0x00, 100);
130 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200131 aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000132
Paul Bakker33b43f12013-08-20 11:48:36 +0200133 key_len = unhexify( key_str, hex_key_string );
134 unhexify( iv_str, hex_iv_string );
135 data_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000136
137 aes_setkey_dec( &ctx, key_str, key_len * 8 );
Paul Bakker33b43f12013-08-20 11:48:36 +0200138 TEST_ASSERT( aes_crypt_cbc( &ctx, AES_DECRYPT, data_len, iv_str, src_str, output ) == cbc_result );
139 if( cbc_result == 0)
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000140 {
141 hexify( dst_str, output, data_len );
Paul Bakker367dae42009-06-28 21:50:27 +0000142
Paul Bakker33b43f12013-08-20 11:48:36 +0200143 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000144 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200145
146 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000147}
Paul Bakker33b43f12013-08-20 11:48:36 +0200148/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000149
Manuel Pégourié-Gonnard387a2112013-09-18 18:54:01 +0200150/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CFB */
Paul Bakker33b43f12013-08-20 11:48:36 +0200151void aes_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
152 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000153{
154 unsigned char key_str[100];
155 unsigned char iv_str[100];
156 unsigned char src_str[100];
157 unsigned char dst_str[100];
158 unsigned char output[100];
159 aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000160 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000161 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000162
163 memset(key_str, 0x00, 100);
164 memset(iv_str, 0x00, 100);
165 memset(src_str, 0x00, 100);
166 memset(dst_str, 0x00, 100);
167 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200168 aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000169
Paul Bakker33b43f12013-08-20 11:48:36 +0200170 key_len = unhexify( key_str, hex_key_string );
171 unhexify( iv_str, hex_iv_string );
172 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000173
174 aes_setkey_enc( &ctx, key_str, key_len * 8 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000175 TEST_ASSERT( aes_crypt_cfb128( &ctx, AES_ENCRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000176 hexify( dst_str, output, 16 );
177
Paul Bakker33b43f12013-08-20 11:48:36 +0200178 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200179
180 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000181}
Paul Bakker33b43f12013-08-20 11:48:36 +0200182/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000183
Manuel Pégourié-Gonnard387a2112013-09-18 18:54:01 +0200184/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CFB */
Paul Bakker33b43f12013-08-20 11:48:36 +0200185void aes_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
186 char *hex_src_string, char *hex_dst_string )
Paul Bakker367dae42009-06-28 21:50:27 +0000187{
188 unsigned char key_str[100];
189 unsigned char iv_str[100];
190 unsigned char src_str[100];
191 unsigned char dst_str[100];
192 unsigned char output[100];
193 aes_context ctx;
Paul Bakkercd43a0b2011-06-09 13:55:44 +0000194 size_t iv_offset = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +0000195 int key_len;
Paul Bakker367dae42009-06-28 21:50:27 +0000196
197 memset(key_str, 0x00, 100);
198 memset(iv_str, 0x00, 100);
199 memset(src_str, 0x00, 100);
200 memset(dst_str, 0x00, 100);
201 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200202 aes_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000203
Paul Bakker33b43f12013-08-20 11:48:36 +0200204 key_len = unhexify( key_str, hex_key_string );
205 unhexify( iv_str, hex_iv_string );
206 unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000207
208 aes_setkey_enc( &ctx, key_str, key_len * 8 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000209 TEST_ASSERT( aes_crypt_cfb128( &ctx, AES_DECRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000210 hexify( dst_str, output, 16 );
211
Paul Bakker33b43f12013-08-20 11:48:36 +0200212 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200213
214 aes_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000215}
Paul Bakker33b43f12013-08-20 11:48:36 +0200216/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000217
Paul Bakker556efba2014-01-24 15:38:12 +0100218/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CFB */
219void aes_encrypt_cfb8( char *hex_key_string, char *hex_iv_string,
220 char *hex_src_string, char *hex_dst_string )
221{
222 unsigned char key_str[100];
223 unsigned char iv_str[100];
224 unsigned char src_str[100];
225 unsigned char dst_str[100];
226 unsigned char output[100];
227 aes_context ctx;
228 int key_len, src_len;
229
230 memset(key_str, 0x00, 100);
231 memset(iv_str, 0x00, 100);
232 memset(src_str, 0x00, 100);
233 memset(dst_str, 0x00, 100);
234 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200235 aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100236
237 key_len = unhexify( key_str, hex_key_string );
238 unhexify( iv_str, hex_iv_string );
239 src_len = unhexify( src_str, hex_src_string );
240
241 aes_setkey_enc( &ctx, key_str, key_len * 8 );
242 TEST_ASSERT( aes_crypt_cfb8( &ctx, AES_ENCRYPT, src_len, iv_str, src_str, output ) == 0 );
243 hexify( dst_str, output, src_len );
244
245 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200246
247 aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100248}
249/* END_CASE */
250
251/* BEGIN_CASE depends_on:POLARSSL_CIPHER_MODE_CFB */
252void aes_decrypt_cfb8( char *hex_key_string, char *hex_iv_string,
253 char *hex_src_string, char *hex_dst_string )
254{
255 unsigned char key_str[100];
256 unsigned char iv_str[100];
257 unsigned char src_str[100];
258 unsigned char dst_str[100];
259 unsigned char output[100];
260 aes_context ctx;
261 int key_len, src_len;
262
263 memset(key_str, 0x00, 100);
264 memset(iv_str, 0x00, 100);
265 memset(src_str, 0x00, 100);
266 memset(dst_str, 0x00, 100);
267 memset(output, 0x00, 100);
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200268 aes_init( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100269
270 key_len = unhexify( key_str, hex_key_string );
271 unhexify( iv_str, hex_iv_string );
272 src_len = unhexify( src_str, hex_src_string );
273
274 aes_setkey_enc( &ctx, key_str, key_len * 8 );
275 TEST_ASSERT( aes_crypt_cfb8( &ctx, AES_DECRYPT, src_len, iv_str, src_str, output ) == 0 );
276 hexify( dst_str, output, src_len );
277
278 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200279
280 aes_free( &ctx );
Paul Bakker556efba2014-01-24 15:38:12 +0100281}
282/* END_CASE */
283
Manuel Pégourié-Gonnard20140162013-10-10 12:48:03 +0200284/* BEGIN_CASE depends_on:POLARSSL_SELF_TEST */
Paul Bakker33b43f12013-08-20 11:48:36 +0200285void aes_selftest()
Paul Bakker3d360822009-07-05 11:29:38 +0000286{
287 TEST_ASSERT( aes_self_test( 0 ) == 0 );
288}
Paul Bakker33b43f12013-08-20 11:48:36 +0200289/* END_CASE */