1/* BEGIN_HEADER */ 2#include "mbedtls/pk.h" 3#include "mbedtls/pem.h" 4#include "mbedtls/oid.h" 5#include "mbedtls/legacy_or_psa.h" 6/* END_HEADER */ 7 8/* BEGIN_DEPENDENCIES 9 * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_BIGNUM_C 10 * END_DEPENDENCIES 11 */ 12 13/* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */ 14void pk_parse_keyfile_rsa( char * key_file, char * password, int result ) 15{ 16 mbedtls_pk_context ctx; 17 int res; 18 char *pwd = password; 19 20 PSA_INIT_IF_NO_MD(); 21 mbedtls_pk_init( &ctx ); 22 23 if( strcmp( pwd, "NULL" ) == 0 ) 24 pwd = NULL; 25 26 res = mbedtls_pk_parse_keyfile( &ctx, key_file, pwd, 27 mbedtls_test_rnd_std_rand, NULL ); 28 29 TEST_ASSERT( res == result ); 30 31 if( res == 0 ) 32 { 33 mbedtls_rsa_context *rsa; 34 TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_RSA ) ); 35 rsa = mbedtls_pk_rsa( ctx ); 36 TEST_ASSERT( mbedtls_rsa_check_privkey( rsa ) == 0 ); 37 } 38 39exit: 40 mbedtls_pk_free( &ctx ); 41 PSA_DONE_IF_NO_MD(); 42} 43/* END_CASE */ 44 45/* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */ 46void pk_parse_public_keyfile_rsa( char * key_file, int result ) 47{ 48 mbedtls_pk_context ctx; 49 int res; 50 51 PSA_INIT_IF_NO_MD(); 52 mbedtls_pk_init( &ctx ); 53 54 res = mbedtls_pk_parse_public_keyfile( &ctx, key_file ); 55 56 TEST_ASSERT( res == result ); 57 58 if( res == 0 ) 59 { 60 mbedtls_rsa_context *rsa; 61 TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_RSA ) ); 62 rsa = mbedtls_pk_rsa( ctx ); 63 TEST_ASSERT( mbedtls_rsa_check_pubkey( rsa ) == 0 ); 64 } 65 66exit: 67 mbedtls_pk_free( &ctx ); 68 PSA_DONE_IF_NO_MD(); 69} 70/* END_CASE */ 71 72/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */ 73void pk_parse_public_keyfile_ec( char * key_file, int result ) 74{ 75 mbedtls_pk_context ctx; 76 int res; 77 78 mbedtls_pk_init( &ctx ); 79 80 res = mbedtls_pk_parse_public_keyfile( &ctx, key_file ); 81 82 TEST_ASSERT( res == result ); 83 84 if( res == 0 ) 85 { 86 mbedtls_ecp_keypair *eckey; 87 TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_ECKEY ) ); 88 eckey = mbedtls_pk_ec( ctx ); 89 TEST_ASSERT( mbedtls_ecp_check_pubkey( &eckey->grp, &eckey->Q ) == 0 ); 90 } 91 92exit: 93 mbedtls_pk_free( &ctx ); 94} 95/* END_CASE */ 96 97/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */ 98void pk_parse_keyfile_ec( char * key_file, char * password, int result ) 99{ 100 mbedtls_pk_context ctx; 101 int res; 102 103 mbedtls_pk_init( &ctx ); 104 105 res = mbedtls_pk_parse_keyfile( &ctx, key_file, password, 106 mbedtls_test_rnd_std_rand, NULL ); 107 108 TEST_ASSERT( res == result ); 109 110 if( res == 0 ) 111 { 112 mbedtls_ecp_keypair *eckey; 113 TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_ECKEY ) ); 114 eckey = mbedtls_pk_ec( ctx ); 115 TEST_ASSERT( mbedtls_ecp_check_privkey( &eckey->grp, &eckey->d ) == 0 ); 116 } 117 118exit: 119 mbedtls_pk_free( &ctx ); 120} 121/* END_CASE */ 122 123/* BEGIN_CASE */ 124void pk_parse_key( data_t * buf, int result ) 125{ 126 mbedtls_pk_context pk; 127 128 mbedtls_pk_init( &pk ); 129 130 TEST_ASSERT( mbedtls_pk_parse_key( &pk, buf->x, buf->len, NULL, 0, 131 mbedtls_test_rnd_std_rand, NULL ) == result ); 132 133exit: 134 mbedtls_pk_free( &pk ); 135} 136/* END_CASE */ 137