blob: 637d13c66172e83dc80925f521b9526201f78898 [file] [log] [blame]
Paul Bakker37940d9f2009-07-10 22:38:58 +00001BEGIN_HEADER
2#include <polarssl/x509.h>
Paul Bakker96743fc2011-02-12 14:30:57 +00003#include <polarssl/pem.h>
Paul Bakkerb63b0af2011-01-13 17:54:59 +00004
Paul Bakker915275b2012-09-28 07:10:55 +00005int verify_none( void *data, x509_cert *crt, int certificate_depth, int *flags )
Paul Bakkerb63b0af2011-01-13 17:54:59 +00006{
Paul Bakker5a624082011-01-18 16:31:52 +00007 ((void) data);
8 ((void) crt);
9 ((void) certificate_depth);
Paul Bakker915275b2012-09-28 07:10:55 +000010 *flags |= BADCERT_OTHER;
11
12 return 0;
Paul Bakkerb63b0af2011-01-13 17:54:59 +000013}
14
Paul Bakker915275b2012-09-28 07:10:55 +000015int verify_all( void *data, x509_cert *crt, int certificate_depth, int *flags )
Paul Bakkerb63b0af2011-01-13 17:54:59 +000016{
Paul Bakker5a624082011-01-18 16:31:52 +000017 ((void) data);
18 ((void) crt);
19 ((void) certificate_depth);
Paul Bakker915275b2012-09-28 07:10:55 +000020 *flags = 0;
Paul Bakker5a624082011-01-18 16:31:52 +000021
Paul Bakkerb63b0af2011-01-13 17:54:59 +000022 return 0;
23}
24
Paul Bakker37940d9f2009-07-10 22:38:58 +000025END_HEADER
26
Paul Bakker5690efc2011-05-26 13:16:06 +000027BEGIN_DEPENDENCIES
28depends_on:POLARSSL_X509_PARSE_C:POLARSSL_BIGNUM_C
29END_DEPENDENCIES
30
Paul Bakker37940d9f2009-07-10 22:38:58 +000031BEGIN_CASE
32x509_cert_info:crt_file:result_str
33{
34 x509_cert crt;
35 char buf[2000];
Paul Bakker69998dd2009-07-11 19:15:20 +000036 int res;
Paul Bakker37940d9f2009-07-10 22:38:58 +000037
38 memset( &crt, 0, sizeof( x509_cert ) );
39 memset( buf, 0, 2000 );
40
Paul Bakker69e095c2011-12-10 21:55:01 +000041 TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +000042 res = x509parse_cert_info( buf, 2000, "", &crt );
Paul Bakker37940d9f2009-07-10 22:38:58 +000043
Paul Bakkerb08e6842012-02-11 18:43:20 +000044 x509_free( &crt );
45
Paul Bakker37940d9f2009-07-10 22:38:58 +000046 TEST_ASSERT( res != -1 );
47 TEST_ASSERT( res != -2 );
48
49 TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
50}
51END_CASE
52
53BEGIN_CASE
54x509_crl_info:crl_file:result_str
55{
56 x509_crl crl;
57 char buf[2000];
Paul Bakker69998dd2009-07-11 19:15:20 +000058 int res;
Paul Bakker37940d9f2009-07-10 22:38:58 +000059
60 memset( &crl, 0, sizeof( x509_crl ) );
61 memset( buf, 0, 2000 );
62
63 TEST_ASSERT( x509parse_crlfile( &crl, {crl_file} ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +000064 res = x509parse_crl_info( buf, 2000, "", &crl );
Paul Bakker37940d9f2009-07-10 22:38:58 +000065
Paul Bakkerb08e6842012-02-11 18:43:20 +000066 x509_crl_free( &crl );
67
Paul Bakker37940d9f2009-07-10 22:38:58 +000068 TEST_ASSERT( res != -1 );
69 TEST_ASSERT( res != -2 );
70
71 TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
72}
73END_CASE
74
75BEGIN_CASE
Paul Bakkerb63b0af2011-01-13 17:54:59 +000076x509_verify:crt_file:ca_file:crl_file:cn_name:result:flags:verify_callback
Paul Bakker37940d9f2009-07-10 22:38:58 +000077{
78 x509_cert crt;
79 x509_cert ca;
80 x509_crl crl;
81 int flags = 0;
Paul Bakker69998dd2009-07-11 19:15:20 +000082 int res;
Paul Bakker37940d9f2009-07-10 22:38:58 +000083
84 memset( &crt, 0, sizeof( x509_cert ) );
85 memset( &ca, 0, sizeof( x509_cert ) );
86 memset( &crl, 0, sizeof( x509_crl ) );
87
Paul Bakker69e095c2011-12-10 21:55:01 +000088 TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
89 TEST_ASSERT( x509parse_crtfile( &ca, {ca_file} ) == 0 );
Paul Bakker37940d9f2009-07-10 22:38:58 +000090 TEST_ASSERT( x509parse_crlfile( &crl, {crl_file} ) == 0 );
91
Paul Bakkerb63b0af2011-01-13 17:54:59 +000092 res = x509parse_verify( &crt, &ca, &crl, {cn_name}, &flags, {verify_callback}, NULL );
Paul Bakker37940d9f2009-07-10 22:38:58 +000093
Paul Bakkerb08e6842012-02-11 18:43:20 +000094 x509_free( &crt );
95 x509_free( &ca );
96 x509_crl_free( &crl );
97
Paul Bakkerb63b0af2011-01-13 17:54:59 +000098 TEST_ASSERT( res == ( {result} ) );
99 TEST_ASSERT( flags == ( {flags} ) );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000100}
101END_CASE
102
103BEGIN_CASE
104x509_dn_gets:crt_file:entity:result_str
105{
106 x509_cert crt;
107 char buf[2000];
Paul Bakker69998dd2009-07-11 19:15:20 +0000108 int res;
Paul Bakker37940d9f2009-07-10 22:38:58 +0000109
110 memset( &crt, 0, sizeof( x509_cert ) );
111 memset( buf, 0, 2000 );
112
Paul Bakker69e095c2011-12-10 21:55:01 +0000113 TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
Paul Bakker69998dd2009-07-11 19:15:20 +0000114 res = x509parse_dn_gets( buf, 2000, &crt.{entity} );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000115
Paul Bakkerb08e6842012-02-11 18:43:20 +0000116 x509_free( &crt );
117
Paul Bakker37940d9f2009-07-10 22:38:58 +0000118 TEST_ASSERT( res != -1 );
119 TEST_ASSERT( res != -2 );
120
121 TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
122}
123END_CASE
124
125BEGIN_CASE
126x509_time_expired:crt_file:entity:result
127{
128 x509_cert crt;
129
130 memset( &crt, 0, sizeof( x509_cert ) );
131
Paul Bakker69e095c2011-12-10 21:55:01 +0000132 TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000133 TEST_ASSERT( x509parse_time_expired( &crt.{entity} ) == {result} );
Paul Bakkerb08e6842012-02-11 18:43:20 +0000134
135 x509_free( &crt );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000136}
137END_CASE
138
139BEGIN_CASE
Paul Bakker0d844dd2014-07-07 17:44:14 +0200140x509_time_future:crt_file:entity:result
141{
142 x509_cert crt;
143
144 memset( &crt, 0, sizeof( x509_cert ) );
145
146 TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
147 TEST_ASSERT( x509parse_time_future( &crt.{entity} ) == {result} );
148
149 x509_free( &crt );
150}
151END_CASE
152
153BEGIN_CASE
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000154x509parse_keyfile:key_file:password:result
Paul Bakker37940d9f2009-07-10 22:38:58 +0000155{
156 rsa_context rsa;
Paul Bakker69998dd2009-07-11 19:15:20 +0000157 int res;
Paul Bakker37940d9f2009-07-10 22:38:58 +0000158
159 memset( &rsa, 0, sizeof( rsa_context ) );
160
Paul Bakker69998dd2009-07-11 19:15:20 +0000161 res = x509parse_keyfile( &rsa, {key_file}, {password} );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000162
163 TEST_ASSERT( res == {result} );
164
165 if( res == 0 )
166 {
167 TEST_ASSERT( rsa_check_privkey( &rsa ) == 0 );
168 }
Paul Bakkerb08e6842012-02-11 18:43:20 +0000169
170 rsa_free( &rsa );
Paul Bakker37940d9f2009-07-10 22:38:58 +0000171}
172END_CASE
173
174BEGIN_CASE
Paul Bakker36f1b192011-07-13 11:32:29 +0000175x509parse_public_keyfile:key_file:result
176{
177 rsa_context rsa;
178 int res;
179
180 memset( &rsa, 0, sizeof( rsa_context ) );
181
182 res = x509parse_public_keyfile( &rsa, {key_file} );
183
184 TEST_ASSERT( res == {result} );
185
186 if( res == 0 )
187 {
188 TEST_ASSERT( rsa_check_pubkey( &rsa ) == 0 );
189 }
Paul Bakkerb08e6842012-02-11 18:43:20 +0000190
191 rsa_free( &rsa );
Paul Bakker36f1b192011-07-13 11:32:29 +0000192}
193END_CASE
194
195BEGIN_CASE
Paul Bakkerb2c38f52009-07-19 19:36:15 +0000196x509parse_crt:crt_data:result_str:result
197{
198 x509_cert crt;
199 unsigned char buf[2000];
200 unsigned char output[2000];
201 int data_len, res;
202
203 memset( &crt, 0, sizeof( x509_cert ) );
204 memset( buf, 0, 2000 );
205 memset( output, 0, 2000 );
206
207 data_len = unhexify( buf, {crt_data} );
208
Paul Bakker69e095c2011-12-10 21:55:01 +0000209 TEST_ASSERT( x509parse_crt( &crt, buf, data_len ) == ( {result} ) );
Paul Bakkerb2c38f52009-07-19 19:36:15 +0000210 if( ( {result} ) == 0 )
211 {
212 res = x509parse_cert_info( (char *) output, 2000, "", &crt );
213
214 TEST_ASSERT( res != -1 );
215 TEST_ASSERT( res != -2 );
216
217 TEST_ASSERT( strcmp( (char *) output, {result_str} ) == 0 );
218 }
Paul Bakkerb08e6842012-02-11 18:43:20 +0000219
220 x509_free( &crt );
Paul Bakkerb2c38f52009-07-19 19:36:15 +0000221}
222END_CASE
223
224BEGIN_CASE
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000225x509parse_crl:crl_data:result_str:result
226{
227 x509_crl crl;
228 unsigned char buf[2000];
229 unsigned char output[2000];
230 int data_len, res;
231
232 memset( &crl, 0, sizeof( x509_crl ) );
233 memset( buf, 0, 2000 );
234 memset( output, 0, 2000 );
235
236 data_len = unhexify( buf, {crl_data} );
237
238 TEST_ASSERT( x509parse_crl( &crl, buf, data_len ) == ( {result} ) );
239 if( ( {result} ) == 0 )
240 {
241 res = x509parse_crl_info( (char *) output, 2000, "", &crl );
242
243 TEST_ASSERT( res != -1 );
244 TEST_ASSERT( res != -2 );
245
246 TEST_ASSERT( strcmp( (char *) output, {result_str} ) == 0 );
247 }
Paul Bakkerb08e6842012-02-11 18:43:20 +0000248
249 x509_crl_free( &crl );
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000250}
251END_CASE
252
253BEGIN_CASE
254x509parse_key:key_data:result_str:result
255{
256 rsa_context rsa;
257 unsigned char buf[2000];
258 unsigned char output[2000];
Paul Bakkereaf90d92011-07-13 14:21:52 +0000259 int data_len;
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000260
261 memset( &rsa, 0, sizeof( rsa_context ) );
262 memset( buf, 0, 2000 );
263 memset( output, 0, 2000 );
264
265 data_len = unhexify( buf, {key_data} );
266
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000267 TEST_ASSERT( x509parse_key( &rsa, buf, data_len, NULL, 0 ) == ( {result} ) );
268 if( ( {result} ) == 0 )
269 {
270 TEST_ASSERT( 1 );
271 }
Paul Bakkerb08e6842012-02-11 18:43:20 +0000272
273 rsa_free( &rsa );
Paul Bakker6b0fa4f2009-07-20 20:35:41 +0000274}
275END_CASE
276
277BEGIN_CASE
Paul Bakker37940d9f2009-07-10 22:38:58 +0000278x509_selftest:
279{
280 TEST_ASSERT( x509_self_test( 0 ) == 0 );
281}
282END_CASE