quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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 */