1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */ 2*62c56f98SSadaf Ebrahimi#include "mbedtls/base64.h" 3*62c56f98SSadaf Ebrahimi#include "mbedtls/pem.h" 4*62c56f98SSadaf Ebrahimi#include "mbedtls/des.h" 5*62c56f98SSadaf Ebrahimi#include "mbedtls/aes.h" 6*62c56f98SSadaf Ebrahimi/* END_HEADER */ 7*62c56f98SSadaf Ebrahimi 8*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */ 9*62c56f98SSadaf Ebrahimivoid mbedtls_pem_write_buffer(char *start, char *end, data_t *buf, 10*62c56f98SSadaf Ebrahimi char *result_str) 11*62c56f98SSadaf Ebrahimi{ 12*62c56f98SSadaf Ebrahimi unsigned char *check_buf = NULL; 13*62c56f98SSadaf Ebrahimi int ret; 14*62c56f98SSadaf Ebrahimi size_t olen = 0, olen2 = 0; 15*62c56f98SSadaf Ebrahimi 16*62c56f98SSadaf Ebrahimi 17*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_write_buffer(start, end, buf->x, buf->len, NULL, 0, &olen); 18*62c56f98SSadaf Ebrahimi TEST_ASSERT(ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL); 19*62c56f98SSadaf Ebrahimi 20*62c56f98SSadaf Ebrahimi check_buf = (unsigned char *) mbedtls_calloc(1, olen); 21*62c56f98SSadaf Ebrahimi TEST_ASSERT(check_buf != NULL); 22*62c56f98SSadaf Ebrahimi 23*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_write_buffer(start, end, buf->x, buf->len, check_buf, olen, &olen2); 24*62c56f98SSadaf Ebrahimi 25*62c56f98SSadaf Ebrahimi TEST_ASSERT(olen2 <= olen); 26*62c56f98SSadaf Ebrahimi TEST_ASSERT(olen > strlen((char *) result_str)); 27*62c56f98SSadaf Ebrahimi TEST_ASSERT(ret == 0); 28*62c56f98SSadaf Ebrahimi TEST_ASSERT(strncmp((char *) check_buf, (char *) result_str, olen) == 0); 29*62c56f98SSadaf Ebrahimi 30*62c56f98SSadaf Ebrahimiexit: 31*62c56f98SSadaf Ebrahimi mbedtls_free(check_buf); 32*62c56f98SSadaf Ebrahimi} 33*62c56f98SSadaf Ebrahimi/* END_CASE */ 34*62c56f98SSadaf Ebrahimi 35*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */ 36*62c56f98SSadaf Ebrahimivoid mbedtls_pem_write_buffer_lengths() 37*62c56f98SSadaf Ebrahimi{ 38*62c56f98SSadaf Ebrahimi unsigned char data[256] = { 0 }; 39*62c56f98SSadaf Ebrahimi unsigned char buf[1024]; 40*62c56f98SSadaf Ebrahimi size_t olen_needed, olen; 41*62c56f98SSadaf Ebrahimi int ret; 42*62c56f98SSadaf Ebrahimi for (size_t l = 0; l <= sizeof(data); l++) { 43*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_write_buffer("\n", "\n", data, l, NULL, 0, &olen_needed); 44*62c56f98SSadaf Ebrahimi TEST_EQUAL(ret, MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL); 45*62c56f98SSadaf Ebrahimi 46*62c56f98SSadaf Ebrahimi /* Test that a bigger buffer still only requires `olen_needed` */ 47*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_write_buffer("\n", "\n", data, l, buf, sizeof(buf), &olen); 48*62c56f98SSadaf Ebrahimi TEST_EQUAL(ret, 0); 49*62c56f98SSadaf Ebrahimi TEST_EQUAL(olen_needed, olen); 50*62c56f98SSadaf Ebrahimi 51*62c56f98SSadaf Ebrahimi /* Test that a buffer of exactly `olen_needed` works */ 52*62c56f98SSadaf Ebrahimi memset(buf, 1, sizeof(buf)); 53*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_write_buffer("\n", "\n", data, l, buf, olen_needed, &olen); 54*62c56f98SSadaf Ebrahimi TEST_EQUAL(ret, 0); 55*62c56f98SSadaf Ebrahimi TEST_EQUAL(olen_needed, olen); 56*62c56f98SSadaf Ebrahimi /* Test the function didn't overflow the given buffer */ 57*62c56f98SSadaf Ebrahimi for (size_t i = olen_needed; i < sizeof(buf); i++) { 58*62c56f98SSadaf Ebrahimi TEST_EQUAL(buf[i], 1); 59*62c56f98SSadaf Ebrahimi } 60*62c56f98SSadaf Ebrahimi } 61*62c56f98SSadaf Ebrahimi} 62*62c56f98SSadaf Ebrahimi/* END_CASE */ 63*62c56f98SSadaf Ebrahimi 64*62c56f98SSadaf Ebrahimi/* BEGIN_CASE depends_on:MBEDTLS_PEM_PARSE_C */ 65*62c56f98SSadaf Ebrahimivoid mbedtls_pem_read_buffer(char *header, char *footer, char *data, 66*62c56f98SSadaf Ebrahimi char *pwd, int res, data_t *out) 67*62c56f98SSadaf Ebrahimi{ 68*62c56f98SSadaf Ebrahimi mbedtls_pem_context ctx; 69*62c56f98SSadaf Ebrahimi int ret; 70*62c56f98SSadaf Ebrahimi size_t use_len = 0; 71*62c56f98SSadaf Ebrahimi size_t pwd_len = strlen(pwd); 72*62c56f98SSadaf Ebrahimi const unsigned char *buf; 73*62c56f98SSadaf Ebrahimi 74*62c56f98SSadaf Ebrahimi MD_PSA_INIT(); 75*62c56f98SSadaf Ebrahimi 76*62c56f98SSadaf Ebrahimi mbedtls_pem_init(&ctx); 77*62c56f98SSadaf Ebrahimi 78*62c56f98SSadaf Ebrahimi ret = mbedtls_pem_read_buffer(&ctx, header, footer, (unsigned char *) data, 79*62c56f98SSadaf Ebrahimi (unsigned char *) pwd, pwd_len, &use_len); 80*62c56f98SSadaf Ebrahimi TEST_ASSERT(ret == res); 81*62c56f98SSadaf Ebrahimi if (ret != 0) { 82*62c56f98SSadaf Ebrahimi goto exit; 83*62c56f98SSadaf Ebrahimi } 84*62c56f98SSadaf Ebrahimi 85*62c56f98SSadaf Ebrahimi use_len = 0; 86*62c56f98SSadaf Ebrahimi buf = mbedtls_pem_get_buffer(&ctx, &use_len); 87*62c56f98SSadaf Ebrahimi TEST_EQUAL(use_len, out->len); 88*62c56f98SSadaf Ebrahimi TEST_ASSERT(memcmp(out->x, buf, out->len) == 0); 89*62c56f98SSadaf Ebrahimi 90*62c56f98SSadaf Ebrahimiexit: 91*62c56f98SSadaf Ebrahimi mbedtls_pem_free(&ctx); 92*62c56f98SSadaf Ebrahimi MD_PSA_DONE(); 93*62c56f98SSadaf Ebrahimi} 94*62c56f98SSadaf Ebrahimi/* END_CASE */ 95