blob: ef1ad391f3e254ca261dfb17608124f952f07c06 [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 */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020013void 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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020019 mbedtls_pk_init(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020020
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020021 if (strcmp(pwd, "NULL") == 0)
Paul Bakker1a7550a2013-09-15 13:01:22 +020022 pwd = NULL;
23
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020024 res = mbedtls_pk_parse_keyfile(&ctx, key_file, pwd,
25 mbedtls_test_rnd_std_rand, NULL);
Paul Bakker1a7550a2013-09-15 13:01:22 +020026
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020027 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020028
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020029 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020030 mbedtls_rsa_context *rsa;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020031 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
32 rsa = mbedtls_pk_rsa(ctx);
33 TEST_ASSERT(mbedtls_rsa_check_privkey(rsa) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020034 }
35
Paul Bakkerbd51b262014-07-10 15:26:12 +020036exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020037 mbedtls_pk_free(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020038}
39/* END_CASE */
40
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020041/* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020042void pk_parse_public_keyfile_rsa(char *key_file, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020043{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020045 int res;
46
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020047 mbedtls_pk_init(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020048
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020049 res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
Paul Bakker1a7550a2013-09-15 13:01:22 +020050
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020051 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020052
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020053 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020054 mbedtls_rsa_context *rsa;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020055 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
56 rsa = mbedtls_pk_rsa(ctx);
57 TEST_ASSERT(mbedtls_rsa_check_pubkey(rsa) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020058 }
59
Paul Bakkerbd51b262014-07-10 15:26:12 +020060exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020061 mbedtls_pk_free(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020062}
63/* END_CASE */
64
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020065/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020066void pk_parse_public_keyfile_ec(char *key_file, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020067{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020068 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020069 int res;
70
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020071 mbedtls_pk_init(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020072
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020073 res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
Paul Bakker1a7550a2013-09-15 13:01:22 +020074
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020075 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +020076
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020077 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020078 mbedtls_ecp_keypair *eckey;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020079 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
80 eckey = mbedtls_pk_ec(ctx);
81 TEST_ASSERT(mbedtls_ecp_check_pubkey(&eckey->grp, &eckey->Q) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +020082 }
83
Paul Bakkerbd51b262014-07-10 15:26:12 +020084exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020085 mbedtls_pk_free(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020086}
87/* END_CASE */
88
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020089/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020090void pk_parse_keyfile_ec(char *key_file, char *password, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +020091{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020092 mbedtls_pk_context ctx;
Paul Bakker1a7550a2013-09-15 13:01:22 +020093 int res;
94
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020095 mbedtls_pk_init(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +020096
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020097 res = mbedtls_pk_parse_keyfile(&ctx, key_file, password,
98 mbedtls_test_rnd_std_rand, NULL);
Paul Bakker1a7550a2013-09-15 13:01:22 +020099
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200100 TEST_ASSERT(res == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200101
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200102 if (res == 0) {
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200103 mbedtls_ecp_keypair *eckey;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200104 TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
105 eckey = mbedtls_pk_ec(ctx);
106 TEST_ASSERT(mbedtls_ecp_check_privkey(&eckey->grp, &eckey->d) == 0);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200107 }
108
Paul Bakkerbd51b262014-07-10 15:26:12 +0200109exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200110 mbedtls_pk_free(&ctx);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200111}
112/* END_CASE */
113
Manuel Pégourié-Gonnardb65370f2020-02-10 10:50:16 +0100114/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200115void pk_parse_key(data_t *buf, int result)
Paul Bakker1a7550a2013-09-15 13:01:22 +0200116{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117 mbedtls_pk_context pk;
Paul Bakker1a7550a2013-09-15 13:01:22 +0200118
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200119 mbedtls_pk_init(&pk);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200120
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200121 TEST_ASSERT(mbedtls_pk_parse_key(&pk, buf->x, buf->len, NULL, 0,
122 mbedtls_test_rnd_std_rand,
123 NULL) == result);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200124
Paul Bakkerbd51b262014-07-10 15:26:12 +0200125exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200126 mbedtls_pk_free(&pk);
Paul Bakker1a7550a2013-09-15 13:01:22 +0200127}
128/* END_CASE */