blob: d6b698463f6981feb5d90c1e4e42259757fce986 [file] [log] [blame]
Paul Bakker1a7550a2013-09-15 13:01:22 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/pk.h"
3#include "mbedtls/pem.h"
4#include "mbedtls/oid.h"
Paul Bakker1a7550a2013-09-15 13:01:22 +02005/* END_HEADER */
6
7/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02008 * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_BIGNUM_C
Paul Bakker1a7550a2013-09-15 13:01:22 +02009 * END_DEPENDENCIES
10 */
11
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020012/* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010013void pk_parse_keyfile_rsa(char *key_file, char *password, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020014{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020015 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020016 int res;
17 char *pwd = password;
18
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010019 mbedtls_pk_init(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020020 USE_PSA_INIT();
Paul Bakker1a7550a2013-09-15 13:01:22 +020021
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010022 if (strcmp(pwd, "NULL") == 0) {
Paul Bakker1a7550a2013-09-15 13:01:22 +020023 pwd = NULL;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010024 }
Paul Bakker1a7550a2013-09-15 13:01:22 +020025
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010026 res = mbedtls_pk_parse_keyfile(&ctx, key_file, pwd);
Paul Bakker1a7550a2013-09-15 13:01:22 +020027
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010028 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020029
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010030 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020031 mbedtls_rsa_context *rsa;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010032 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
33 rsa = mbedtls_pk_rsa(ctx);
34 TEST_ASSERT(mbedtls_rsa_check_privkey(rsa) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020035 }
36
Paul Bakkerbd51b262014-07-10 15:26:12 +020037exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010038 mbedtls_pk_free(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020039 USE_PSA_DONE();
Paul Bakker1a7550a2013-09-15 13:01:22 +020040}
41/* END_CASE */
42
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020043/* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010044void pk_parse_public_keyfile_rsa(char *key_file, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020045{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020046 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020047 int res;
48
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010049 mbedtls_pk_init(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020050 USE_PSA_INIT();
Paul Bakker1a7550a2013-09-15 13:01:22 +020051
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010052 res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
Paul Bakker1a7550a2013-09-15 13:01:22 +020053
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010054 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020055
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010056 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020057 mbedtls_rsa_context *rsa;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010058 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
59 rsa = mbedtls_pk_rsa(ctx);
60 TEST_ASSERT(mbedtls_rsa_check_pubkey(rsa) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020061 }
62
Paul Bakkerbd51b262014-07-10 15:26:12 +020063exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010064 mbedtls_pk_free(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020065 USE_PSA_DONE();
Paul Bakker1a7550a2013-09-15 13:01:22 +020066}
67/* END_CASE */
68
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020069/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010070void pk_parse_public_keyfile_ec(char *key_file, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020071{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020072 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020073 int res;
74
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010075 mbedtls_pk_init(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020076 USE_PSA_INIT();
Paul Bakker1a7550a2013-09-15 13:01:22 +020077
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010078 res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
Paul Bakker1a7550a2013-09-15 13:01:22 +020079
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010080 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020081
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010082 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020083 mbedtls_ecp_keypair *eckey;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010084 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
85 eckey = mbedtls_pk_ec(ctx);
86 TEST_ASSERT(mbedtls_ecp_check_pubkey(&eckey->grp, &eckey->Q) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020087 }
88
Paul Bakkerbd51b262014-07-10 15:26:12 +020089exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010090 mbedtls_pk_free(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +020091 USE_PSA_DONE();
Paul Bakker1a7550a2013-09-15 13:01:22 +020092}
93/* END_CASE */
94
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020095/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010096void pk_parse_keyfile_ec(char *key_file, char *password, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020097{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020098 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020099 int res;
100
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100101 mbedtls_pk_init(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +0200102 USE_PSA_INIT();
Paul Bakker1a7550a2013-09-15 13:01:22 +0200103
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100104 res = mbedtls_pk_parse_keyfile(&ctx, key_file, password);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200105
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100106 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200107
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100108 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200109 mbedtls_ecp_keypair *eckey;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100110 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
111 eckey = mbedtls_pk_ec(ctx);
112 TEST_ASSERT(mbedtls_ecp_check_privkey(&eckey->grp, &eckey->d) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200113 }
114
Paul Bakkerbd51b262014-07-10 15:26:12 +0200115exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100116 mbedtls_pk_free(&ctx);
Valerio Settid64e2492023-04-24 13:53:21 +0200117 USE_PSA_DONE();
Paul Bakker1a7550a2013-09-15 13:01:22 +0200118}
119/* END_CASE */
120
Manuel Pégourié-Gonnardb65370f2020-02-10 10:50:16 +0100121/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100122void pk_parse_key(data_t *buf, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +0200123{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200124 mbedtls_pk_context pk;
Paul Bakker1a7550a2013-09-15 13:01:22 +0200125
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100126 mbedtls_pk_init(&pk);
Valerio Settid64e2492023-04-24 13:53:21 +0200127 USE_PSA_INIT();
Paul Bakker1a7550a2013-09-15 13:01:22 +0200128
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100129 TEST_ASSERT(mbedtls_pk_parse_key(&pk, buf->x, buf->len, NULL, 0) == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200130
Paul Bakkerbd51b262014-07-10 15:26:12 +0200131exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100132 mbedtls_pk_free(&pk);
Valerio Settid64e2492023-04-24 13:53:21 +0200133 USE_PSA_DONE();
Paul Bakker1a7550a2013-09-15 13:01:22 +0200134}
135/* END_CASE */