xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_pem.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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