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