Arcola / mbedtls

Fork of mbedtls by Mark Radbourne

Committer:
Jasper Wallace
Date:
Fri Sep 29 18:41:59 2017 +0100
Revision:
1:9ebc941037d5
Parent:
0:cdf462088d13
Child:
2:bbdeda018a3c
Update to mbedtls 2.4.2, security fixes

Changes to mbedtls sources made:

in include/mbedtls/config.h comment out:

#define MBEDTLS_FS_IO
#define MBEDTLS_NET_C
#define MBEDTLS_TIMING_C

uncomment:

#define MBEDTLS_NO_PLATFORM_ENTROPY

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 0:cdf462088d13 1 /* BEGIN_HEADER */
markrad 0:cdf462088d13 2 #include "mbedtls/x509.h"
markrad 0:cdf462088d13 3 #include "mbedtls/x509_crt.h"
markrad 0:cdf462088d13 4 #include "mbedtls/x509_crl.h"
markrad 0:cdf462088d13 5 #include "mbedtls/x509_csr.h"
markrad 0:cdf462088d13 6 #include "mbedtls/pem.h"
markrad 0:cdf462088d13 7 #include "mbedtls/oid.h"
markrad 0:cdf462088d13 8 #include "mbedtls/base64.h"
markrad 0:cdf462088d13 9
markrad 0:cdf462088d13 10 const mbedtls_x509_crt_profile compat_profile =
markrad 0:cdf462088d13 11 {
markrad 0:cdf462088d13 12 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) |
markrad 0:cdf462088d13 13 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_RIPEMD160 ) |
markrad 0:cdf462088d13 14 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA224 ) |
markrad 0:cdf462088d13 15 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) |
markrad 0:cdf462088d13 16 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) |
markrad 0:cdf462088d13 17 MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ),
markrad 0:cdf462088d13 18 0xFFFFFFF, /* Any PK alg */
markrad 0:cdf462088d13 19 0xFFFFFFF, /* Any curve */
markrad 0:cdf462088d13 20 1024,
markrad 0:cdf462088d13 21 };
markrad 0:cdf462088d13 22
markrad 0:cdf462088d13 23 int verify_none( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags )
markrad 0:cdf462088d13 24 {
markrad 0:cdf462088d13 25 ((void) data);
markrad 0:cdf462088d13 26 ((void) crt);
markrad 0:cdf462088d13 27 ((void) certificate_depth);
markrad 0:cdf462088d13 28 *flags |= MBEDTLS_X509_BADCERT_OTHER;
markrad 0:cdf462088d13 29
markrad 0:cdf462088d13 30 return 0;
markrad 0:cdf462088d13 31 }
markrad 0:cdf462088d13 32
markrad 0:cdf462088d13 33 int verify_all( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags )
markrad 0:cdf462088d13 34 {
markrad 0:cdf462088d13 35 ((void) data);
markrad 0:cdf462088d13 36 ((void) crt);
markrad 0:cdf462088d13 37 ((void) certificate_depth);
markrad 0:cdf462088d13 38 *flags = 0;
markrad 0:cdf462088d13 39
markrad 0:cdf462088d13 40 return 0;
markrad 0:cdf462088d13 41 }
markrad 0:cdf462088d13 42
markrad 0:cdf462088d13 43 /* strsep() not available on Windows */
markrad 0:cdf462088d13 44 char *mystrsep(char **stringp, const char *delim)
markrad 0:cdf462088d13 45 {
markrad 0:cdf462088d13 46 const char *p;
markrad 0:cdf462088d13 47 char *ret = *stringp;
markrad 0:cdf462088d13 48
markrad 0:cdf462088d13 49 if( *stringp == NULL )
markrad 0:cdf462088d13 50 return( NULL );
markrad 0:cdf462088d13 51
markrad 0:cdf462088d13 52 for( ; ; (*stringp)++ )
markrad 0:cdf462088d13 53 {
markrad 0:cdf462088d13 54 if( **stringp == '\0' )
markrad 0:cdf462088d13 55 {
markrad 0:cdf462088d13 56 *stringp = NULL;
markrad 0:cdf462088d13 57 goto done;
markrad 0:cdf462088d13 58 }
markrad 0:cdf462088d13 59
markrad 0:cdf462088d13 60 for( p = delim; *p != '\0'; p++ )
markrad 0:cdf462088d13 61 if( **stringp == *p )
markrad 0:cdf462088d13 62 {
markrad 0:cdf462088d13 63 **stringp = '\0';
markrad 0:cdf462088d13 64 (*stringp)++;
markrad 0:cdf462088d13 65 goto done;
markrad 0:cdf462088d13 66 }
markrad 0:cdf462088d13 67 }
markrad 0:cdf462088d13 68
markrad 0:cdf462088d13 69 done:
markrad 0:cdf462088d13 70 return( ret );
markrad 0:cdf462088d13 71 }
markrad 0:cdf462088d13 72
markrad 0:cdf462088d13 73 #if defined(MBEDTLS_X509_CRT_PARSE_C)
markrad 0:cdf462088d13 74 typedef struct {
markrad 0:cdf462088d13 75 char buf[512];
markrad 0:cdf462088d13 76 char *p;
markrad 0:cdf462088d13 77 } verify_print_context;
markrad 0:cdf462088d13 78
markrad 0:cdf462088d13 79 void verify_print_init( verify_print_context *ctx )
markrad 0:cdf462088d13 80 {
markrad 0:cdf462088d13 81 memset( ctx, 0, sizeof( verify_print_context ) );
markrad 0:cdf462088d13 82 ctx->p = ctx->buf;
markrad 0:cdf462088d13 83 }
markrad 0:cdf462088d13 84
markrad 0:cdf462088d13 85 int verify_print( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags )
markrad 0:cdf462088d13 86 {
markrad 0:cdf462088d13 87 int ret;
markrad 0:cdf462088d13 88 verify_print_context *ctx = (verify_print_context *) data;
markrad 0:cdf462088d13 89 char *p = ctx->p;
markrad 0:cdf462088d13 90 size_t n = ctx->buf + sizeof( ctx->buf ) - ctx->p;
markrad 0:cdf462088d13 91 ((void) flags);
markrad 0:cdf462088d13 92
markrad 0:cdf462088d13 93 ret = mbedtls_snprintf( p, n, "depth %d - serial ", certificate_depth );
markrad 0:cdf462088d13 94 MBEDTLS_X509_SAFE_SNPRINTF;
markrad 0:cdf462088d13 95
markrad 0:cdf462088d13 96 ret = mbedtls_x509_serial_gets( p, n, &crt->serial );
markrad 0:cdf462088d13 97 MBEDTLS_X509_SAFE_SNPRINTF;
markrad 0:cdf462088d13 98
markrad 0:cdf462088d13 99 ret = mbedtls_snprintf( p, n, " - subject " );
markrad 0:cdf462088d13 100 MBEDTLS_X509_SAFE_SNPRINTF;
markrad 0:cdf462088d13 101
markrad 0:cdf462088d13 102 ret = mbedtls_x509_dn_gets( p, n, &crt->subject );
markrad 0:cdf462088d13 103 MBEDTLS_X509_SAFE_SNPRINTF;
markrad 0:cdf462088d13 104
markrad 0:cdf462088d13 105 ret = mbedtls_snprintf( p, n, "\n" );
markrad 0:cdf462088d13 106 MBEDTLS_X509_SAFE_SNPRINTF;
markrad 0:cdf462088d13 107
markrad 0:cdf462088d13 108 ctx->p = p;
markrad 0:cdf462088d13 109
markrad 0:cdf462088d13 110 return( 0 );
markrad 0:cdf462088d13 111 }
markrad 0:cdf462088d13 112 #endif /* MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 113 /* END_HEADER */
markrad 0:cdf462088d13 114
markrad 0:cdf462088d13 115 /* BEGIN_DEPENDENCIES
markrad 0:cdf462088d13 116 * depends_on:MBEDTLS_BIGNUM_C
markrad 0:cdf462088d13 117 * END_DEPENDENCIES
markrad 0:cdf462088d13 118 */
markrad 0:cdf462088d13 119
markrad 0:cdf462088d13 120 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 121 void x509_cert_info( char *crt_file, char *result_str )
markrad 0:cdf462088d13 122 {
markrad 0:cdf462088d13 123 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 124 char buf[2000];
markrad 0:cdf462088d13 125 int res;
markrad 0:cdf462088d13 126
markrad 0:cdf462088d13 127 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 128 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 129
markrad 0:cdf462088d13 130 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 131 res = mbedtls_x509_crt_info( buf, 2000, "", &crt );
markrad 0:cdf462088d13 132
markrad 0:cdf462088d13 133 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 134 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 135
markrad 0:cdf462088d13 136 TEST_ASSERT( strcmp( buf, result_str ) == 0 );
markrad 0:cdf462088d13 137
markrad 0:cdf462088d13 138 exit:
markrad 0:cdf462088d13 139 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 140 }
markrad 0:cdf462088d13 141 /* END_CASE */
markrad 0:cdf462088d13 142
markrad 0:cdf462088d13 143 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRL_PARSE_C */
markrad 0:cdf462088d13 144 void mbedtls_x509_crl_info( char *crl_file, char *result_str )
markrad 0:cdf462088d13 145 {
markrad 0:cdf462088d13 146 mbedtls_x509_crl crl;
markrad 0:cdf462088d13 147 char buf[2000];
markrad 0:cdf462088d13 148 int res;
markrad 0:cdf462088d13 149
markrad 0:cdf462088d13 150 mbedtls_x509_crl_init( &crl );
markrad 0:cdf462088d13 151 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 152
markrad 0:cdf462088d13 153 TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == 0 );
markrad 0:cdf462088d13 154 res = mbedtls_x509_crl_info( buf, 2000, "", &crl );
markrad 0:cdf462088d13 155
markrad 0:cdf462088d13 156 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 157 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 158
markrad 0:cdf462088d13 159 TEST_ASSERT( strcmp( buf, result_str ) == 0 );
markrad 0:cdf462088d13 160
markrad 0:cdf462088d13 161 exit:
markrad 0:cdf462088d13 162 mbedtls_x509_crl_free( &crl );
markrad 0:cdf462088d13 163 }
markrad 0:cdf462088d13 164 /* END_CASE */
markrad 0:cdf462088d13 165
Jasper Wallace 1:9ebc941037d5 166 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRL_PARSE_C */
Jasper Wallace 1:9ebc941037d5 167 void mbedtls_x509_crl_parse( char *crl_file, int result )
Jasper Wallace 1:9ebc941037d5 168 {
Jasper Wallace 1:9ebc941037d5 169 mbedtls_x509_crl crl;
Jasper Wallace 1:9ebc941037d5 170 char buf[2000];
Jasper Wallace 1:9ebc941037d5 171
Jasper Wallace 1:9ebc941037d5 172 mbedtls_x509_crl_init( &crl );
Jasper Wallace 1:9ebc941037d5 173 memset( buf, 0, 2000 );
Jasper Wallace 1:9ebc941037d5 174
Jasper Wallace 1:9ebc941037d5 175 TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == result );
Jasper Wallace 1:9ebc941037d5 176
Jasper Wallace 1:9ebc941037d5 177 exit:
Jasper Wallace 1:9ebc941037d5 178 mbedtls_x509_crl_free( &crl );
Jasper Wallace 1:9ebc941037d5 179 }
Jasper Wallace 1:9ebc941037d5 180 /* END_CASE */
Jasper Wallace 1:9ebc941037d5 181
markrad 0:cdf462088d13 182 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CSR_PARSE_C */
markrad 0:cdf462088d13 183 void mbedtls_x509_csr_info( char *csr_file, char *result_str )
markrad 0:cdf462088d13 184 {
markrad 0:cdf462088d13 185 mbedtls_x509_csr csr;
markrad 0:cdf462088d13 186 char buf[2000];
markrad 0:cdf462088d13 187 int res;
markrad 0:cdf462088d13 188
markrad 0:cdf462088d13 189 mbedtls_x509_csr_init( &csr );
markrad 0:cdf462088d13 190 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 191
markrad 0:cdf462088d13 192 TEST_ASSERT( mbedtls_x509_csr_parse_file( &csr, csr_file ) == 0 );
markrad 0:cdf462088d13 193 res = mbedtls_x509_csr_info( buf, 2000, "", &csr );
markrad 0:cdf462088d13 194
markrad 0:cdf462088d13 195 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 196 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 197
markrad 0:cdf462088d13 198 TEST_ASSERT( strcmp( buf, result_str ) == 0 );
markrad 0:cdf462088d13 199
markrad 0:cdf462088d13 200 exit:
markrad 0:cdf462088d13 201 mbedtls_x509_csr_free( &csr );
markrad 0:cdf462088d13 202 }
markrad 0:cdf462088d13 203 /* END_CASE */
markrad 0:cdf462088d13 204
markrad 0:cdf462088d13 205 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 206 void x509_verify_info( int flags, char *prefix, char *result_str )
markrad 0:cdf462088d13 207 {
markrad 0:cdf462088d13 208 char buf[2000];
markrad 0:cdf462088d13 209 int res;
markrad 0:cdf462088d13 210
markrad 0:cdf462088d13 211 memset( buf, 0, sizeof( buf ) );
markrad 0:cdf462088d13 212
markrad 0:cdf462088d13 213 res = mbedtls_x509_crt_verify_info( buf, sizeof( buf ), prefix, flags );
markrad 0:cdf462088d13 214
markrad 0:cdf462088d13 215 TEST_ASSERT( res >= 0 );
markrad 0:cdf462088d13 216
markrad 0:cdf462088d13 217 TEST_ASSERT( strcmp( buf, result_str ) == 0 );
markrad 0:cdf462088d13 218 }
markrad 0:cdf462088d13 219 /* END_CASE */
markrad 0:cdf462088d13 220
markrad 0:cdf462088d13 221 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_X509_CRL_PARSE_C */
markrad 0:cdf462088d13 222 void x509_verify( char *crt_file, char *ca_file, char *crl_file,
markrad 0:cdf462088d13 223 char *cn_name_str, int result, int flags_result,
markrad 0:cdf462088d13 224 char *verify_callback )
markrad 0:cdf462088d13 225 {
markrad 0:cdf462088d13 226 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 227 mbedtls_x509_crt ca;
markrad 0:cdf462088d13 228 mbedtls_x509_crl crl;
markrad 0:cdf462088d13 229 uint32_t flags = 0;
markrad 0:cdf462088d13 230 int res;
markrad 0:cdf462088d13 231 int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *) = NULL;
markrad 0:cdf462088d13 232 char * cn_name = NULL;
markrad 0:cdf462088d13 233
markrad 0:cdf462088d13 234 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 235 mbedtls_x509_crt_init( &ca );
markrad 0:cdf462088d13 236 mbedtls_x509_crl_init( &crl );
markrad 0:cdf462088d13 237
markrad 0:cdf462088d13 238 if( strcmp( cn_name_str, "NULL" ) != 0 )
markrad 0:cdf462088d13 239 cn_name = cn_name_str;
markrad 0:cdf462088d13 240
markrad 0:cdf462088d13 241 if( strcmp( verify_callback, "NULL" ) == 0 )
markrad 0:cdf462088d13 242 f_vrfy = NULL;
markrad 0:cdf462088d13 243 else if( strcmp( verify_callback, "verify_none" ) == 0 )
markrad 0:cdf462088d13 244 f_vrfy = verify_none;
markrad 0:cdf462088d13 245 else if( strcmp( verify_callback, "verify_all" ) == 0 )
markrad 0:cdf462088d13 246 f_vrfy = verify_all;
markrad 0:cdf462088d13 247 else
markrad 0:cdf462088d13 248 TEST_ASSERT( "No known verify callback selected" == 0 );
markrad 0:cdf462088d13 249
markrad 0:cdf462088d13 250 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 251 TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 );
markrad 0:cdf462088d13 252 TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == 0 );
markrad 0:cdf462088d13 253
markrad 0:cdf462088d13 254 res = mbedtls_x509_crt_verify_with_profile( &crt, &ca, &crl, &compat_profile, cn_name, &flags, f_vrfy, NULL );
markrad 0:cdf462088d13 255
markrad 0:cdf462088d13 256 TEST_ASSERT( res == ( result ) );
markrad 0:cdf462088d13 257 TEST_ASSERT( flags == (uint32_t)( flags_result ) );
markrad 0:cdf462088d13 258
markrad 0:cdf462088d13 259 exit:
markrad 0:cdf462088d13 260 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 261 mbedtls_x509_crt_free( &ca );
markrad 0:cdf462088d13 262 mbedtls_x509_crl_free( &crl );
markrad 0:cdf462088d13 263 }
markrad 0:cdf462088d13 264 /* END_CASE */
markrad 0:cdf462088d13 265
markrad 0:cdf462088d13 266 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 267 void x509_verify_callback( char *crt_file, char *ca_file,
markrad 0:cdf462088d13 268 int exp_ret, char *exp_vrfy_out )
markrad 0:cdf462088d13 269 {
markrad 0:cdf462088d13 270 int ret;
markrad 0:cdf462088d13 271 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 272 mbedtls_x509_crt ca;
markrad 0:cdf462088d13 273 uint32_t flags = 0;
markrad 0:cdf462088d13 274 verify_print_context vrfy_ctx;
markrad 0:cdf462088d13 275
markrad 0:cdf462088d13 276 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 277 mbedtls_x509_crt_init( &ca );
markrad 0:cdf462088d13 278 verify_print_init( &vrfy_ctx );
markrad 0:cdf462088d13 279
markrad 0:cdf462088d13 280 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 281 TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 );
markrad 0:cdf462088d13 282
markrad 0:cdf462088d13 283 ret = mbedtls_x509_crt_verify( &crt, &ca, NULL, NULL, &flags,
markrad 0:cdf462088d13 284 verify_print, &vrfy_ctx );
markrad 0:cdf462088d13 285
markrad 0:cdf462088d13 286 TEST_ASSERT( ret == exp_ret );
markrad 0:cdf462088d13 287 TEST_ASSERT( strcmp( vrfy_ctx.buf, exp_vrfy_out ) == 0 );
markrad 0:cdf462088d13 288
markrad 0:cdf462088d13 289 exit:
markrad 0:cdf462088d13 290 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 291 mbedtls_x509_crt_free( &ca );
markrad 0:cdf462088d13 292 }
markrad 0:cdf462088d13 293 /* END_CASE */
markrad 0:cdf462088d13 294
markrad 0:cdf462088d13 295 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 296 void mbedtls_x509_dn_gets( char *crt_file, char *entity, char *result_str )
markrad 0:cdf462088d13 297 {
markrad 0:cdf462088d13 298 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 299 char buf[2000];
markrad 0:cdf462088d13 300 int res = 0;
markrad 0:cdf462088d13 301
markrad 0:cdf462088d13 302 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 303 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 304
markrad 0:cdf462088d13 305 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 306 if( strcmp( entity, "subject" ) == 0 )
markrad 0:cdf462088d13 307 res = mbedtls_x509_dn_gets( buf, 2000, &crt.subject );
markrad 0:cdf462088d13 308 else if( strcmp( entity, "issuer" ) == 0 )
markrad 0:cdf462088d13 309 res = mbedtls_x509_dn_gets( buf, 2000, &crt.issuer );
markrad 0:cdf462088d13 310 else
markrad 0:cdf462088d13 311 TEST_ASSERT( "Unknown entity" == 0 );
markrad 0:cdf462088d13 312
markrad 0:cdf462088d13 313 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 314 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 315
markrad 0:cdf462088d13 316 TEST_ASSERT( strcmp( buf, result_str ) == 0 );
markrad 0:cdf462088d13 317
markrad 0:cdf462088d13 318 exit:
markrad 0:cdf462088d13 319 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 320 }
markrad 0:cdf462088d13 321 /* END_CASE */
markrad 0:cdf462088d13 322
markrad 0:cdf462088d13 323 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 324 void mbedtls_x509_time_is_past( char *crt_file, char *entity, int result )
markrad 0:cdf462088d13 325 {
markrad 0:cdf462088d13 326 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 327
markrad 0:cdf462088d13 328 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 329
markrad 0:cdf462088d13 330 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 331
markrad 0:cdf462088d13 332 if( strcmp( entity, "valid_from" ) == 0 )
markrad 0:cdf462088d13 333 TEST_ASSERT( mbedtls_x509_time_is_past( &crt.valid_from ) == result );
markrad 0:cdf462088d13 334 else if( strcmp( entity, "valid_to" ) == 0 )
markrad 0:cdf462088d13 335 TEST_ASSERT( mbedtls_x509_time_is_past( &crt.valid_to ) == result );
markrad 0:cdf462088d13 336 else
markrad 0:cdf462088d13 337 TEST_ASSERT( "Unknown entity" == 0 );
markrad 0:cdf462088d13 338
markrad 0:cdf462088d13 339 exit:
markrad 0:cdf462088d13 340 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 341 }
markrad 0:cdf462088d13 342 /* END_CASE */
markrad 0:cdf462088d13 343
markrad 0:cdf462088d13 344 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 345 void mbedtls_x509_time_is_future( char *crt_file, char *entity, int result )
markrad 0:cdf462088d13 346 {
markrad 0:cdf462088d13 347 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 348
markrad 0:cdf462088d13 349 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 350
markrad 0:cdf462088d13 351 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 352
markrad 0:cdf462088d13 353 if( strcmp( entity, "valid_from" ) == 0 )
markrad 0:cdf462088d13 354 TEST_ASSERT( mbedtls_x509_time_is_future( &crt.valid_from ) == result );
markrad 0:cdf462088d13 355 else if( strcmp( entity, "valid_to" ) == 0 )
markrad 0:cdf462088d13 356 TEST_ASSERT( mbedtls_x509_time_is_future( &crt.valid_to ) == result );
markrad 0:cdf462088d13 357 else
markrad 0:cdf462088d13 358 TEST_ASSERT( "Unknown entity" == 0 );
markrad 0:cdf462088d13 359
markrad 0:cdf462088d13 360 exit:
markrad 0:cdf462088d13 361 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 362 }
markrad 0:cdf462088d13 363 /* END_CASE */
markrad 0:cdf462088d13 364
markrad 0:cdf462088d13 365 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_FS_IO */
markrad 0:cdf462088d13 366 void x509parse_crt_file( char *crt_file, int result )
markrad 0:cdf462088d13 367 {
markrad 0:cdf462088d13 368 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 369
markrad 0:cdf462088d13 370 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 371
markrad 0:cdf462088d13 372 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == result );
markrad 0:cdf462088d13 373
markrad 0:cdf462088d13 374 exit:
markrad 0:cdf462088d13 375 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 376 }
markrad 0:cdf462088d13 377 /* END_CASE */
markrad 0:cdf462088d13 378
markrad 0:cdf462088d13 379 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 380 void x509parse_crt( char *crt_data, char *result_str, int result )
markrad 0:cdf462088d13 381 {
markrad 0:cdf462088d13 382 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 383 unsigned char buf[2000];
markrad 0:cdf462088d13 384 unsigned char output[2000];
markrad 0:cdf462088d13 385 int data_len, res;
markrad 0:cdf462088d13 386
markrad 0:cdf462088d13 387 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 388 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 389 memset( output, 0, 2000 );
markrad 0:cdf462088d13 390
markrad 0:cdf462088d13 391 data_len = unhexify( buf, crt_data );
markrad 0:cdf462088d13 392
markrad 0:cdf462088d13 393 TEST_ASSERT( mbedtls_x509_crt_parse( &crt, buf, data_len ) == ( result ) );
markrad 0:cdf462088d13 394 if( ( result ) == 0 )
markrad 0:cdf462088d13 395 {
markrad 0:cdf462088d13 396 res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt );
markrad 0:cdf462088d13 397
markrad 0:cdf462088d13 398 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 399 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 400
markrad 0:cdf462088d13 401 TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 );
markrad 0:cdf462088d13 402 }
markrad 0:cdf462088d13 403
markrad 0:cdf462088d13 404 exit:
markrad 0:cdf462088d13 405 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 406 }
markrad 0:cdf462088d13 407 /* END_CASE */
markrad 0:cdf462088d13 408
markrad 0:cdf462088d13 409 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRL_PARSE_C */
markrad 0:cdf462088d13 410 void x509parse_crl( char *crl_data, char *result_str, int result )
markrad 0:cdf462088d13 411 {
markrad 0:cdf462088d13 412 mbedtls_x509_crl crl;
markrad 0:cdf462088d13 413 unsigned char buf[2000];
markrad 0:cdf462088d13 414 unsigned char output[2000];
markrad 0:cdf462088d13 415 int data_len, res;
markrad 0:cdf462088d13 416
markrad 0:cdf462088d13 417 mbedtls_x509_crl_init( &crl );
markrad 0:cdf462088d13 418 memset( buf, 0, 2000 );
markrad 0:cdf462088d13 419 memset( output, 0, 2000 );
markrad 0:cdf462088d13 420
markrad 0:cdf462088d13 421 data_len = unhexify( buf, crl_data );
markrad 0:cdf462088d13 422
markrad 0:cdf462088d13 423 TEST_ASSERT( mbedtls_x509_crl_parse( &crl, buf, data_len ) == ( result ) );
markrad 0:cdf462088d13 424 if( ( result ) == 0 )
markrad 0:cdf462088d13 425 {
markrad 0:cdf462088d13 426 res = mbedtls_x509_crl_info( (char *) output, 2000, "", &crl );
markrad 0:cdf462088d13 427
markrad 0:cdf462088d13 428 TEST_ASSERT( res != -1 );
markrad 0:cdf462088d13 429 TEST_ASSERT( res != -2 );
markrad 0:cdf462088d13 430
markrad 0:cdf462088d13 431 TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 );
markrad 0:cdf462088d13 432 }
markrad 0:cdf462088d13 433
markrad 0:cdf462088d13 434 exit:
markrad 0:cdf462088d13 435 mbedtls_x509_crl_free( &crl );
markrad 0:cdf462088d13 436 }
markrad 0:cdf462088d13 437 /* END_CASE */
markrad 0:cdf462088d13 438
markrad 0:cdf462088d13 439 /* BEGIN_CASE depends_on:MBEDTLS_X509_CSR_PARSE_C */
markrad 0:cdf462088d13 440 void mbedtls_x509_csr_parse( char *csr_der_hex, char *ref_out, int ref_ret )
markrad 0:cdf462088d13 441 {
markrad 0:cdf462088d13 442 mbedtls_x509_csr csr;
markrad 0:cdf462088d13 443 unsigned char *csr_der = NULL;
markrad 0:cdf462088d13 444 char my_out[1000];
markrad 0:cdf462088d13 445 size_t csr_der_len;
markrad 0:cdf462088d13 446 int my_ret;
markrad 0:cdf462088d13 447
markrad 0:cdf462088d13 448 mbedtls_x509_csr_init( &csr );
markrad 0:cdf462088d13 449 memset( my_out, 0, sizeof( my_out ) );
markrad 0:cdf462088d13 450 csr_der = unhexify_alloc( csr_der_hex, &csr_der_len );
markrad 0:cdf462088d13 451
markrad 0:cdf462088d13 452 my_ret = mbedtls_x509_csr_parse_der( &csr, csr_der, csr_der_len );
markrad 0:cdf462088d13 453 TEST_ASSERT( my_ret == ref_ret );
markrad 0:cdf462088d13 454
markrad 0:cdf462088d13 455 if( ref_ret == 0 )
markrad 0:cdf462088d13 456 {
markrad 0:cdf462088d13 457 size_t my_out_len = mbedtls_x509_csr_info( my_out, sizeof( my_out ), "", &csr );
markrad 0:cdf462088d13 458 TEST_ASSERT( my_out_len == strlen( ref_out ) );
markrad 0:cdf462088d13 459 TEST_ASSERT( strcmp( my_out, ref_out ) == 0 );
markrad 0:cdf462088d13 460 }
markrad 0:cdf462088d13 461
markrad 0:cdf462088d13 462 exit:
markrad 0:cdf462088d13 463 mbedtls_x509_csr_free( &csr );
markrad 0:cdf462088d13 464 mbedtls_free( csr_der );
markrad 0:cdf462088d13 465 }
markrad 0:cdf462088d13 466 /* END_CASE */
markrad 0:cdf462088d13 467
markrad 0:cdf462088d13 468 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 469 void mbedtls_x509_crt_parse_path( char *crt_path, int ret, int nb_crt )
markrad 0:cdf462088d13 470 {
markrad 0:cdf462088d13 471 mbedtls_x509_crt chain, *cur;
markrad 0:cdf462088d13 472 int i;
markrad 0:cdf462088d13 473
markrad 0:cdf462088d13 474 mbedtls_x509_crt_init( &chain );
markrad 0:cdf462088d13 475
markrad 0:cdf462088d13 476 TEST_ASSERT( mbedtls_x509_crt_parse_path( &chain, crt_path ) == ret );
markrad 0:cdf462088d13 477
markrad 0:cdf462088d13 478 /* Check how many certs we got */
markrad 0:cdf462088d13 479 for( i = 0, cur = &chain; cur != NULL; cur = cur->next )
markrad 0:cdf462088d13 480 if( cur->raw.p != NULL )
markrad 0:cdf462088d13 481 i++;
markrad 0:cdf462088d13 482
markrad 0:cdf462088d13 483 TEST_ASSERT( i == nb_crt );
markrad 0:cdf462088d13 484
markrad 0:cdf462088d13 485 exit:
markrad 0:cdf462088d13 486 mbedtls_x509_crt_free( &chain );
markrad 0:cdf462088d13 487 }
markrad 0:cdf462088d13 488 /* END_CASE */
markrad 0:cdf462088d13 489
markrad 0:cdf462088d13 490 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
markrad 0:cdf462088d13 491 void mbedtls_x509_crt_verify_chain( char *chain_paths, char *trusted_ca, int flags_result )
markrad 0:cdf462088d13 492 {
markrad 0:cdf462088d13 493 char* act;
markrad 0:cdf462088d13 494 uint32_t flags;
markrad 0:cdf462088d13 495 int result, res;
markrad 0:cdf462088d13 496 mbedtls_x509_crt trusted, chain;
markrad 0:cdf462088d13 497
markrad 0:cdf462088d13 498 result= flags_result?MBEDTLS_ERR_X509_CERT_VERIFY_FAILED:0;
markrad 0:cdf462088d13 499
markrad 0:cdf462088d13 500 mbedtls_x509_crt_init( &chain );
markrad 0:cdf462088d13 501 mbedtls_x509_crt_init( &trusted );
markrad 0:cdf462088d13 502
markrad 0:cdf462088d13 503 while( ( act = mystrsep( &chain_paths, " " ) ) != NULL )
markrad 0:cdf462088d13 504 TEST_ASSERT( mbedtls_x509_crt_parse_file( &chain, act ) == 0 );
markrad 0:cdf462088d13 505 TEST_ASSERT( mbedtls_x509_crt_parse_file( &trusted, trusted_ca ) == 0 );
markrad 0:cdf462088d13 506
markrad 0:cdf462088d13 507 res = mbedtls_x509_crt_verify( &chain, &trusted, NULL, NULL, &flags, NULL, NULL );
markrad 0:cdf462088d13 508
markrad 0:cdf462088d13 509 TEST_ASSERT( res == ( result ) );
markrad 0:cdf462088d13 510 TEST_ASSERT( flags == (uint32_t)( flags_result ) );
markrad 0:cdf462088d13 511
markrad 0:cdf462088d13 512 exit:
markrad 0:cdf462088d13 513 mbedtls_x509_crt_free( &trusted );
markrad 0:cdf462088d13 514 mbedtls_x509_crt_free( &chain );
markrad 0:cdf462088d13 515 }
markrad 0:cdf462088d13 516 /* END_CASE */
markrad 0:cdf462088d13 517
markrad 0:cdf462088d13 518 /* BEGIN_CASE depends_on:MBEDTLS_X509_USE_C */
markrad 0:cdf462088d13 519 void x509_oid_desc( char *oid_str, char *ref_desc )
markrad 0:cdf462088d13 520 {
markrad 0:cdf462088d13 521 mbedtls_x509_buf oid;
markrad 0:cdf462088d13 522 const char *desc = NULL;
markrad 0:cdf462088d13 523 unsigned char buf[20];
markrad 0:cdf462088d13 524 int ret;
markrad 0:cdf462088d13 525
markrad 0:cdf462088d13 526 memset( buf, 0, sizeof buf );
markrad 0:cdf462088d13 527
markrad 0:cdf462088d13 528 oid.tag = MBEDTLS_ASN1_OID;
markrad 0:cdf462088d13 529 oid.len = unhexify( buf, oid_str );
markrad 0:cdf462088d13 530 oid.p = buf;
markrad 0:cdf462088d13 531
markrad 0:cdf462088d13 532 ret = mbedtls_oid_get_extended_key_usage( &oid, &desc );
markrad 0:cdf462088d13 533
markrad 0:cdf462088d13 534 if( strcmp( ref_desc, "notfound" ) == 0 )
markrad 0:cdf462088d13 535 {
markrad 0:cdf462088d13 536 TEST_ASSERT( ret != 0 );
markrad 0:cdf462088d13 537 TEST_ASSERT( desc == NULL );
markrad 0:cdf462088d13 538 }
markrad 0:cdf462088d13 539 else
markrad 0:cdf462088d13 540 {
markrad 0:cdf462088d13 541 TEST_ASSERT( ret == 0 );
markrad 0:cdf462088d13 542 TEST_ASSERT( desc != NULL );
markrad 0:cdf462088d13 543 TEST_ASSERT( strcmp( desc, ref_desc ) == 0 );
markrad 0:cdf462088d13 544 }
markrad 0:cdf462088d13 545 }
markrad 0:cdf462088d13 546 /* END_CASE */
markrad 0:cdf462088d13 547
markrad 0:cdf462088d13 548 /* BEGIN_CASE depends_on:MBEDTLS_X509_USE_C */
markrad 0:cdf462088d13 549 void x509_oid_numstr( char *oid_str, char *numstr, int blen, int ret )
markrad 0:cdf462088d13 550 {
markrad 0:cdf462088d13 551 mbedtls_x509_buf oid;
markrad 0:cdf462088d13 552 unsigned char oid_buf[20];
markrad 0:cdf462088d13 553 char num_buf[100];
markrad 0:cdf462088d13 554
markrad 0:cdf462088d13 555 memset( oid_buf, 0x00, sizeof oid_buf );
markrad 0:cdf462088d13 556 memset( num_buf, 0x2a, sizeof num_buf );
markrad 0:cdf462088d13 557
markrad 0:cdf462088d13 558 oid.tag = MBEDTLS_ASN1_OID;
markrad 0:cdf462088d13 559 oid.len = unhexify( oid_buf, oid_str );
markrad 0:cdf462088d13 560 oid.p = oid_buf;
markrad 0:cdf462088d13 561
markrad 0:cdf462088d13 562 TEST_ASSERT( (size_t) blen <= sizeof num_buf );
markrad 0:cdf462088d13 563
markrad 0:cdf462088d13 564 TEST_ASSERT( mbedtls_oid_get_numeric_string( num_buf, blen, &oid ) == ret );
markrad 0:cdf462088d13 565
markrad 0:cdf462088d13 566 if( ret >= 0 )
markrad 0:cdf462088d13 567 {
markrad 0:cdf462088d13 568 TEST_ASSERT( num_buf[ret] == 0 );
markrad 0:cdf462088d13 569 TEST_ASSERT( strcmp( num_buf, numstr ) == 0 );
markrad 0:cdf462088d13 570 }
markrad 0:cdf462088d13 571 }
markrad 0:cdf462088d13 572 /* END_CASE */
markrad 0:cdf462088d13 573
markrad 0:cdf462088d13 574 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_X509_CHECK_KEY_USAGE */
markrad 0:cdf462088d13 575 void x509_check_key_usage( char *crt_file, int usage, int ret )
markrad 0:cdf462088d13 576 {
markrad 0:cdf462088d13 577 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 578
markrad 0:cdf462088d13 579 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 580
markrad 0:cdf462088d13 581 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 582
markrad 0:cdf462088d13 583 TEST_ASSERT( mbedtls_x509_crt_check_key_usage( &crt, usage ) == ret );
markrad 0:cdf462088d13 584
markrad 0:cdf462088d13 585 exit:
markrad 0:cdf462088d13 586 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 587 }
markrad 0:cdf462088d13 588 /* END_CASE */
markrad 0:cdf462088d13 589
markrad 0:cdf462088d13 590 /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */
markrad 0:cdf462088d13 591 void x509_check_extended_key_usage( char *crt_file, char *usage_hex, int ret )
markrad 0:cdf462088d13 592 {
markrad 0:cdf462088d13 593 mbedtls_x509_crt crt;
markrad 0:cdf462088d13 594 char oid[50];
markrad 0:cdf462088d13 595 size_t len;
markrad 0:cdf462088d13 596
markrad 0:cdf462088d13 597 mbedtls_x509_crt_init( &crt );
markrad 0:cdf462088d13 598
markrad 0:cdf462088d13 599 len = unhexify( (unsigned char *) oid, usage_hex );
markrad 0:cdf462088d13 600
markrad 0:cdf462088d13 601 TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
markrad 0:cdf462088d13 602
markrad 0:cdf462088d13 603 TEST_ASSERT( mbedtls_x509_crt_check_extended_key_usage( &crt, oid, len ) == ret );
markrad 0:cdf462088d13 604
markrad 0:cdf462088d13 605 exit:
markrad 0:cdf462088d13 606 mbedtls_x509_crt_free( &crt );
markrad 0:cdf462088d13 607 }
markrad 0:cdf462088d13 608 /* END_CASE */
markrad 0:cdf462088d13 609
markrad 0:cdf462088d13 610 /* BEGIN_CASE depends_on:MBEDTLS_X509_USE_C */
markrad 0:cdf462088d13 611 void x509_get_time( int tag, char *time_str, int ret,
markrad 0:cdf462088d13 612 int year, int mon, int day,
markrad 0:cdf462088d13 613 int hour, int min, int sec )
markrad 0:cdf462088d13 614 {
markrad 0:cdf462088d13 615 mbedtls_x509_time time;
Jasper Wallace 1:9ebc941037d5 616 unsigned char buf[21];
markrad 0:cdf462088d13 617 unsigned char* start = buf;
markrad 0:cdf462088d13 618 unsigned char* end = buf;
markrad 0:cdf462088d13 619
markrad 0:cdf462088d13 620 memset( &time, 0x00, sizeof( time ) );
markrad 0:cdf462088d13 621 *end = (unsigned char)tag; end++;
Jasper Wallace 1:9ebc941037d5 622 *end = strlen( time_str );
Jasper Wallace 1:9ebc941037d5 623 TEST_ASSERT( *end < 20 );
markrad 0:cdf462088d13 624 end++;
markrad 0:cdf462088d13 625 memcpy( end, time_str, (size_t)*(end - 1) );
markrad 0:cdf462088d13 626 end += *(end - 1);
markrad 0:cdf462088d13 627
markrad 0:cdf462088d13 628 TEST_ASSERT( mbedtls_x509_get_time( &start, end, &time ) == ret );
markrad 0:cdf462088d13 629 if( ret == 0 )
markrad 0:cdf462088d13 630 {
markrad 0:cdf462088d13 631 TEST_ASSERT( year == time.year );
markrad 0:cdf462088d13 632 TEST_ASSERT( mon == time.mon );
markrad 0:cdf462088d13 633 TEST_ASSERT( day == time.day );
markrad 0:cdf462088d13 634 TEST_ASSERT( hour == time.hour );
markrad 0:cdf462088d13 635 TEST_ASSERT( min == time.min );
markrad 0:cdf462088d13 636 TEST_ASSERT( sec == time.sec );
markrad 0:cdf462088d13 637 }
markrad 0:cdf462088d13 638 }
markrad 0:cdf462088d13 639 /* END_CASE */
markrad 0:cdf462088d13 640
markrad 0:cdf462088d13 641 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_X509_RSASSA_PSS_SUPPORT */
markrad 0:cdf462088d13 642 void x509_parse_rsassa_pss_params( char *hex_params, int params_tag,
markrad 0:cdf462088d13 643 int ref_msg_md, int ref_mgf_md,
markrad 0:cdf462088d13 644 int ref_salt_len, int ref_ret )
markrad 0:cdf462088d13 645 {
markrad 0:cdf462088d13 646 int my_ret;
markrad 0:cdf462088d13 647 mbedtls_x509_buf params;
markrad 0:cdf462088d13 648 mbedtls_md_type_t my_msg_md, my_mgf_md;
markrad 0:cdf462088d13 649 int my_salt_len;
markrad 0:cdf462088d13 650
markrad 0:cdf462088d13 651 params.p = unhexify_alloc( hex_params, &params.len );
markrad 0:cdf462088d13 652 params.tag = params_tag;
markrad 0:cdf462088d13 653
markrad 0:cdf462088d13 654 my_ret = mbedtls_x509_get_rsassa_pss_params( &params, &my_msg_md, &my_mgf_md,
markrad 0:cdf462088d13 655 &my_salt_len );
markrad 0:cdf462088d13 656
markrad 0:cdf462088d13 657 TEST_ASSERT( my_ret == ref_ret );
markrad 0:cdf462088d13 658
markrad 0:cdf462088d13 659 if( ref_ret == 0 )
markrad 0:cdf462088d13 660 {
markrad 0:cdf462088d13 661 TEST_ASSERT( my_msg_md == (mbedtls_md_type_t) ref_msg_md );
markrad 0:cdf462088d13 662 TEST_ASSERT( my_mgf_md == (mbedtls_md_type_t) ref_mgf_md );
markrad 0:cdf462088d13 663 TEST_ASSERT( my_salt_len == ref_salt_len );
markrad 0:cdf462088d13 664 }
markrad 0:cdf462088d13 665
markrad 0:cdf462088d13 666 exit:
markrad 0:cdf462088d13 667 mbedtls_free( params.p );
markrad 0:cdf462088d13 668 }
markrad 0:cdf462088d13 669 /* END_CASE */
markrad 0:cdf462088d13 670
markrad 0:cdf462088d13 671 /* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_SELF_TEST */
markrad 0:cdf462088d13 672 void x509_selftest()
markrad 0:cdf462088d13 673 {
markrad 0:cdf462088d13 674 TEST_ASSERT( mbedtls_x509_self_test( 1 ) == 0 );
markrad 0:cdf462088d13 675 }
markrad 0:cdf462088d13 676 /* END_CASE */