blob: a49846bcdf99e84a6e5917134626c5969cc12bb8 [file] [log] [blame]
Paul Bakkerc7bb02b2013-09-15 14:54:56 +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 Bakkerc7bb02b2013-09-15 14:54:56 +02005/* END_HEADER */
6
7/* BEGIN_DEPENDENCIES
Hanno Becker19d858e2018-10-16 13:46:25 +01008 * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_PK_WRITE_C:MBEDTLS_BIGNUM_C:MBEDTLS_FS_IO
Paul Bakkerc7bb02b2013-09-15 14:54:56 +02009 * END_DEPENDENCIES
10 */
11
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020012/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010013void pk_write_pubkey_check(char *key_file)
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020014{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020015 mbedtls_pk_context key;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020016 unsigned char buf[5000];
17 unsigned char check_buf[5000];
18 int ret;
19 FILE *f;
Paul Elliott557b8d62020-11-19 09:46:56 +000020 size_t ilen, pem_len, buf_index;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020021
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010022 memset(buf, 0, sizeof(buf));
23 memset(check_buf, 0, sizeof(check_buf));
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020024
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010025 mbedtls_pk_init(&key);
26 TEST_ASSERT(mbedtls_pk_parse_public_keyfile(&key, key_file) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020027
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010028 ret = mbedtls_pk_write_pubkey_pem(&key, buf, sizeof(buf));
29 TEST_ASSERT(ret == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020030
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010031 pem_len = strlen((char *) buf);
Paul Elliott557b8d62020-11-19 09:46:56 +000032
33 // check that the rest of the buffer remains clear
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010034 for (buf_index = pem_len; buf_index < sizeof(buf); ++buf_index) {
35 TEST_ASSERT(buf[buf_index] == 0);
Paul Elliott557b8d62020-11-19 09:46:56 +000036 }
37
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010038 f = fopen(key_file, "r");
39 TEST_ASSERT(f != NULL);
40 ilen = fread(check_buf, 1, sizeof(check_buf), f);
41 fclose(f);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020042
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010043 TEST_ASSERT(ilen == pem_len);
44 TEST_ASSERT(memcmp((char *) buf, (char *) check_buf, ilen) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020045
Paul Bakkerbd51b262014-07-10 15:26:12 +020046exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010047 mbedtls_pk_free(&key);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020048}
49/* END_CASE */
50
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010052void pk_write_key_check(char *key_file)
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020053{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020054 mbedtls_pk_context key;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020055 unsigned char buf[5000];
56 unsigned char check_buf[5000];
57 int ret;
58 FILE *f;
Paul Elliott557b8d62020-11-19 09:46:56 +000059 size_t ilen, pem_len, buf_index;
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020060
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010061 memset(buf, 0, sizeof(buf));
62 memset(check_buf, 0, sizeof(check_buf));
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020063
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010064 mbedtls_pk_init(&key);
65 TEST_ASSERT(mbedtls_pk_parse_keyfile(&key, key_file, NULL) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020066
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010067 ret = mbedtls_pk_write_key_pem(&key, buf, sizeof(buf));
68 TEST_ASSERT(ret == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020069
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010070 pem_len = strlen((char *) buf);
Paul Elliott557b8d62020-11-19 09:46:56 +000071
72 // check that the rest of the buffer remains clear
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010073 for (buf_index = pem_len; buf_index < sizeof(buf); ++buf_index) {
74 TEST_ASSERT(buf[buf_index] == 0);
Paul Elliott557b8d62020-11-19 09:46:56 +000075 }
76
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010077 f = fopen(key_file, "r");
78 TEST_ASSERT(f != NULL);
79 ilen = fread(check_buf, 1, sizeof(check_buf), f);
80 fclose(f);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020081
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010082 TEST_ASSERT(ilen == strlen((char *) buf));
83 TEST_ASSERT(memcmp((char *) buf, (char *) check_buf, ilen) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020084
Paul Bakkerbd51b262014-07-10 15:26:12 +020085exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010086 mbedtls_pk_free(&key);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020087}
88/* END_CASE */