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