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