• 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/* END_HEADER */
6
7/* BEGIN_DEPENDENCIES
8 * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_PK_WRITE_C:MBEDTLS_BIGNUM_C:MBEDTLS_FS_IO
9 * END_DEPENDENCIES
10 */
11
12/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
13void pk_write_pubkey_check(char *key_file)
14{
15    mbedtls_pk_context key;
16    unsigned char buf[5000];
17    unsigned char check_buf[5000];
18    int ret;
19    FILE *f;
20    size_t ilen, pem_len, buf_index;
21
22    memset(buf, 0, sizeof(buf));
23    memset(check_buf, 0, sizeof(check_buf));
24
25    mbedtls_pk_init(&key);
26    TEST_ASSERT(mbedtls_pk_parse_public_keyfile(&key, key_file) == 0);
27
28    ret = mbedtls_pk_write_pubkey_pem(&key, buf, sizeof(buf));
29    TEST_ASSERT(ret == 0);
30
31    pem_len = strlen((char *) buf);
32
33    // check that the rest of the buffer remains clear
34    for (buf_index = pem_len; buf_index < sizeof(buf); ++buf_index) {
35        TEST_ASSERT(buf[buf_index] == 0);
36    }
37
38    f = fopen(key_file, "r");
39    TEST_ASSERT(f != NULL);
40    ilen = fread(check_buf, 1, sizeof(check_buf), f);
41    fclose(f);
42
43    TEST_ASSERT(ilen == pem_len);
44    TEST_ASSERT(memcmp((char *) buf, (char *) check_buf, ilen) == 0);
45
46exit:
47    mbedtls_pk_free(&key);
48}
49/* END_CASE */
50
51/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
52void pk_write_key_check(char *key_file)
53{
54    mbedtls_pk_context key;
55    unsigned char buf[5000];
56    unsigned char check_buf[5000];
57    int ret;
58    FILE *f;
59    size_t ilen, pem_len, buf_index;
60
61    memset(buf, 0, sizeof(buf));
62    memset(check_buf, 0, sizeof(check_buf));
63
64    mbedtls_pk_init(&key);
65    TEST_ASSERT(mbedtls_pk_parse_keyfile(&key, key_file, NULL,
66                                         mbedtls_test_rnd_std_rand, NULL) == 0);
67
68    ret = mbedtls_pk_write_key_pem(&key, buf, sizeof(buf));
69    TEST_ASSERT(ret == 0);
70
71    pem_len = strlen((char *) buf);
72
73    // check that the rest of the buffer remains clear
74    for (buf_index = pem_len; buf_index < sizeof(buf); ++buf_index) {
75        TEST_ASSERT(buf[buf_index] == 0);
76    }
77
78    f = fopen(key_file, "r");
79    TEST_ASSERT(f != NULL);
80    ilen = fread(check_buf, 1, sizeof(check_buf), f);
81    fclose(f);
82
83    TEST_ASSERT(ilen == strlen((char *) buf));
84    TEST_ASSERT(memcmp((char *) buf, (char *) check_buf, ilen) == 0);
85
86exit:
87    mbedtls_pk_free(&key);
88}
89/* END_CASE */
90