blob: b7115d97720f339c6fd9e363f060884345a3ace1 [file] [log] [blame]
Paul Bakker8123e9d2011-01-06 15:37:30 +00001BEGIN_HEADER
Paul Bakker8123e9d2011-01-06 15:37:30 +00002#include <polarssl/cipher.h>
3END_HEADER
4
Paul Bakker5690efc2011-05-26 13:16:06 +00005BEGIN_DEPENDENCIES
6depends_on:POLARSSL_CIPHER_C
7END_DEPENDENCIES
8
Paul Bakker8123e9d2011-01-06 15:37:30 +00009BEGIN_CASE
10enc_dec_buf:cipher_id:cipher_string:key_len:length:
Paul Bakker23986e52011-04-24 08:57:21 +000011 size_t length = {length};
Paul Bakker8123e9d2011-01-06 15:37:30 +000012 unsigned char key[32];
13 unsigned char iv[16];
14
15 const cipher_info_t *cipher_info;
16 cipher_context_t ctx_dec;
17 cipher_context_t ctx_enc;
18
19 unsigned char inbuf[64];
20 unsigned char encbuf[64];
21 unsigned char decbuf[64];
22
Paul Bakker23986e52011-04-24 08:57:21 +000023 size_t outlen = 0;
24 size_t enclen = 0;
Paul Bakker8123e9d2011-01-06 15:37:30 +000025
26 memset( key, 0, 32 );
27 memset( iv , 0, 16 );
28
29 memset( &ctx_dec, 0, sizeof( ctx_dec ) );
30 memset( &ctx_enc, 0, sizeof( ctx_enc ) );
31
32 memset( inbuf, 5, 64 );
33 memset( encbuf, 0, 64 );
34 memset( decbuf, 0, 64 );
35
36 /* Check and get info structures */
37 cipher_info = cipher_info_from_type( {cipher_id} );
38 TEST_ASSERT( NULL != cipher_info );
39 TEST_ASSERT( cipher_info_from_string( "{cipher_string}" ) == cipher_info );
40
41 /* Initialise enc and dec contexts */
42 TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
43 TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
44
45 TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
46 TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
47
48 TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
49 TEST_ASSERT( 0 == cipher_reset( &ctx_enc, iv ) );
50
Paul Bakker343a8702011-06-09 14:27:58 +000051 if( POLARSSL_MODE_CBC == cipher_info->mode )
52 {
53 enclen = cipher_get_block_size( &ctx_enc )
Paul Bakker8123e9d2011-01-06 15:37:30 +000054 * ( 1 + length / cipher_get_block_size( &ctx_enc ) );
Paul Bakker343a8702011-06-09 14:27:58 +000055 }
56 else
57 {
58 enclen = length;
59 }
Paul Bakker8123e9d2011-01-06 15:37:30 +000060
61 /* encode length number of bytes from inbuf */
62 TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +000063 if( POLARSSL_MODE_CBC == cipher_info->mode )
64 {
65 TEST_ASSERT( outlen == enclen - cipher_get_block_size ( &ctx_enc ) );
66 }
67 else
68 {
69 TEST_ASSERT( outlen == enclen );
70 }
71
Paul Bakker8123e9d2011-01-06 15:37:30 +000072 TEST_ASSERT( 0 == cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +000073 if( POLARSSL_MODE_CBC == cipher_info->mode )
74 {
75 TEST_ASSERT( outlen == cipher_get_block_size ( &ctx_enc ) );
76 }
77 else
78 {
79 TEST_ASSERT( outlen == 0 );
80 }
81
Paul Bakker8123e9d2011-01-06 15:37:30 +000082
83 /* decode the previously encoded string */
84 TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, enclen, decbuf, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +000085 if( POLARSSL_MODE_CBC == cipher_info->mode )
86 {
87 TEST_ASSERT( enclen - cipher_get_block_size ( &ctx_enc ) == outlen );
88 }
89 else
90 {
91 TEST_ASSERT( enclen == outlen );
92 }
93
Paul Bakker8123e9d2011-01-06 15:37:30 +000094 TEST_ASSERT( 0 == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +000095 if( POLARSSL_MODE_CBC == cipher_info->mode )
96 {
97 TEST_ASSERT( length - enclen + cipher_get_block_size ( &ctx_enc ) == outlen );
98 }
99 else
100 {
101 TEST_ASSERT( outlen == 0 );
102 }
103
Paul Bakker8123e9d2011-01-06 15:37:30 +0000104
105 TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) );
106
107 TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
108 TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
109END_CASE
110
111BEGIN_CASE
112dec_empty_buf:
113 unsigned char key[32];
114 unsigned char iv[16];
115
116 cipher_context_t ctx_dec;
117 const cipher_info_t *cipher_info;
118
119 unsigned char encbuf[64];
120 unsigned char decbuf[64];
121
Paul Bakkerf4a3f302011-04-24 15:53:29 +0000122 size_t outlen = 0;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000123
124 memset( key, 0, 32 );
125 memset( iv , 0, 16 );
126
127 memset( &ctx_dec, 0, sizeof( ctx_dec ) );
128
129 memset( encbuf, 0, 64 );
130 memset( decbuf, 0, 64 );
131
132 /* Initialise enc and dec contexts */
133 cipher_info = cipher_info_from_type( POLARSSL_CIPHER_AES_128_CBC );
134 TEST_ASSERT( NULL != cipher_info);
135
136 TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
137
138 TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, 128, POLARSSL_DECRYPT ) );
139
140 TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
141
142 /* decode 0-byte string */
143 TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) );
144 TEST_ASSERT( 0 == outlen );
Paul Bakkerc65ab342011-06-09 15:44:37 +0000145 TEST_ASSERT( POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
Paul Bakker8123e9d2011-01-06 15:37:30 +0000146 TEST_ASSERT( 0 == outlen );
147
148 TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
149END_CASE
150
151BEGIN_CASE
152enc_dec_buf_multipart:cipher_id:key_len:first_length:second_length:
Paul Bakker23986e52011-04-24 08:57:21 +0000153 size_t first_length = {first_length};
154 size_t second_length = {second_length};
155 size_t length = first_length + second_length;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000156 unsigned char key[32];
157 unsigned char iv[16];
158
159 cipher_context_t ctx_dec;
160 cipher_context_t ctx_enc;
161 const cipher_info_t *cipher_info;
162
163 unsigned char inbuf[64];
164 unsigned char encbuf[64];
165 unsigned char decbuf[64];
166
Paul Bakker23986e52011-04-24 08:57:21 +0000167 size_t outlen = 0;
168 size_t totaloutlen = 0;
169 size_t enclen = 0;
Paul Bakker8123e9d2011-01-06 15:37:30 +0000170
171 memset( key, 0, 32 );
172 memset( iv , 0, 16 );
173
174 memset( &ctx_dec, 0, sizeof( ctx_dec ) );
175 memset( &ctx_enc, 0, sizeof( ctx_enc ) );
176
177 memset( inbuf, 5, 64 );
178 memset( encbuf, 0, 64 );
179 memset( decbuf, 0, 64 );
180
181 /* Initialise enc and dec contexts */
182 cipher_info = cipher_info_from_type( {cipher_id} );
183 TEST_ASSERT( NULL != cipher_info);
184
185 TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
186 TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
187
188 TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
189 TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
190
191 TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
192 TEST_ASSERT( 0 == cipher_reset( &ctx_enc, iv ) );
193
Paul Bakker343a8702011-06-09 14:27:58 +0000194 if( POLARSSL_MODE_CBC == cipher_info->mode )
195 {
196 enclen = cipher_get_block_size(&ctx_enc )
Paul Bakker8123e9d2011-01-06 15:37:30 +0000197 * ( 1 + length / cipher_get_block_size( &ctx_enc ) );
Paul Bakker343a8702011-06-09 14:27:58 +0000198 }
199 else
200 {
201 enclen = length;
202 }
Paul Bakker8123e9d2011-01-06 15:37:30 +0000203
204 /* encode length number of bytes from inbuf */
205 TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) );
206 totaloutlen = outlen;
207 TEST_ASSERT( 0 == cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) );
208 totaloutlen += outlen;
Paul Bakker343a8702011-06-09 14:27:58 +0000209 if( POLARSSL_MODE_CBC == cipher_info->mode )
210 {
211 TEST_ASSERT( totaloutlen == enclen - cipher_get_block_size ( &ctx_enc ) );
212 }
213 else
214 {
215 TEST_ASSERT( totaloutlen == enclen );
216 }
Paul Bakker8123e9d2011-01-06 15:37:30 +0000217 TEST_ASSERT( 0 == cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) );
218 totaloutlen += outlen;
Paul Bakker343a8702011-06-09 14:27:58 +0000219 if( POLARSSL_MODE_CBC == cipher_info->mode )
220 {
221 TEST_ASSERT( outlen == cipher_get_block_size ( &ctx_enc ) );
222 }
223 else
224 {
225 TEST_ASSERT( outlen == 0 );
226 }
Paul Bakker8123e9d2011-01-06 15:37:30 +0000227
228 /* decode the previously encoded string */
229 TEST_ASSERT( 0 == cipher_update( &ctx_dec, encbuf, enclen, decbuf, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +0000230 if( POLARSSL_MODE_CBC == cipher_info->mode )
231 {
232 TEST_ASSERT( enclen - cipher_get_block_size ( &ctx_enc ) == outlen );
233 }
234 else
235 {
236 TEST_ASSERT( enclen == outlen );
237 }
Paul Bakker8123e9d2011-01-06 15:37:30 +0000238 TEST_ASSERT( 0 == cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) );
Paul Bakker343a8702011-06-09 14:27:58 +0000239 if( POLARSSL_MODE_CBC == cipher_info->mode )
240 {
241 TEST_ASSERT( length - enclen + cipher_get_block_size ( &ctx_enc ) == outlen );
242 }
243 else
244 {
245 TEST_ASSERT( outlen == 0 );
246 }
Paul Bakker8123e9d2011-01-06 15:37:30 +0000247
248
249 TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) );
250
251 TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
252 TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
253END_CASE
254
255
256BEGIN_CASE
257cipher_selftest:
258{
259 TEST_ASSERT( cipher_self_test( 0 ) == 0 );
260}
261END_CASE