blob: 7e8a32d345c53555583ade82f33bab1e0b80a217 [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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +010022 memset(buf, 0, sizeof(buf));
23 memset(check_buf, 0, sizeof(check_buf));
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020024
Gilles Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +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 Peskine449bd832023-01-11 14:50:10 +010061 memset(buf, 0, sizeof(buf));
62 memset(check_buf, 0, sizeof(check_buf));
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020063
Gilles Peskine449bd832023-01-11 14:50:10 +010064 mbedtls_pk_init(&key);
65 TEST_ASSERT(mbedtls_pk_parse_keyfile(&key, key_file, NULL,
66 mbedtls_test_rnd_std_rand, NULL) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020067
Gilles Peskine449bd832023-01-11 14:50:10 +010068 ret = mbedtls_pk_write_key_pem(&key, buf, sizeof(buf));
69 TEST_ASSERT(ret == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020070
Gilles Peskine449bd832023-01-11 14:50:10 +010071 pem_len = strlen((char *) buf);
Paul Elliott557b8d62020-11-19 09:46:56 +000072
73 // check that the rest of the buffer remains clear
Gilles Peskine449bd832023-01-11 14:50:10 +010074 for (buf_index = pem_len; buf_index < sizeof(buf); ++buf_index) {
75 TEST_ASSERT(buf[buf_index] == 0);
Paul Elliott557b8d62020-11-19 09:46:56 +000076 }
77
Gilles Peskine449bd832023-01-11 14:50:10 +010078 f = fopen(key_file, "r");
79 TEST_ASSERT(f != NULL);
80 ilen = fread(check_buf, 1, sizeof(check_buf), f);
81 fclose(f);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020082
Gilles Peskine449bd832023-01-11 14:50:10 +010083 TEST_ASSERT(ilen == strlen((char *) buf));
84 TEST_ASSERT(memcmp((char *) buf, (char *) check_buf, ilen) == 0);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020085
Paul Bakkerbd51b262014-07-10 15:26:12 +020086exit:
Gilles Peskine449bd832023-01-11 14:50:10 +010087 mbedtls_pk_free(&key);
Paul Bakkerc7bb02b2013-09-15 14:54:56 +020088}
89/* END_CASE */