• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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