Home | History | Annotate | Line # | Download | only in test
      1      1.1  christos /*
      2  1.1.1.2  christos  * Copyright 2020-2024 The OpenSSL Project Authors. All Rights Reserved.
      3      1.1  christos  *
      4      1.1  christos  * Licensed under the Apache License 2.0 (the "License");
      5      1.1  christos  * you may not use this file except in compliance with the License.
      6      1.1  christos  * You may obtain a copy of the License at
      7      1.1  christos  * https://www.openssl.org/source/license.html
      8      1.1  christos  * or in the file LICENSE in the source distribution.
      9      1.1  christos  */
     10      1.1  christos 
     11      1.1  christos /*
     12      1.1  christos  * This program tests the use of OSSL_PARAM, currently in raw form.
     13      1.1  christos  */
     14      1.1  christos 
     15      1.1  christos #include "internal/nelem.h"
     16      1.1  christos #include "internal/cryptlib.h"
     17      1.1  christos #include "testutil.h"
     18      1.1  christos 
     19      1.1  christos struct testdata
     20      1.1  christos {
     21      1.1  christos     const char *in;
     22      1.1  christos     const unsigned char *expected;
     23      1.1  christos     size_t expected_len;
     24      1.1  christos     const char sep;
     25      1.1  christos };
     26      1.1  christos 
     27      1.1  christos static const unsigned char test_1[] = { 0xAB, 0xCD, 0xEF, 0xF1 };
     28      1.1  christos static const unsigned char test_2[] = { 0xAB, 0xCD, 0xEF, 0x76, 0x00 };
     29      1.1  christos 
     30      1.1  christos static struct testdata tbl_testdata[] = {
     31      1.1  christos     {
     32      1.1  christos         "AB:CD:EF:F1",
     33      1.1  christos         test_1, sizeof(test_1),
     34      1.1  christos         ':',
     35      1.1  christos     },
     36      1.1  christos     {
     37      1.1  christos         "AB:CD:EF:76:00",
     38      1.1  christos         test_2, sizeof(test_2),
     39      1.1  christos         ':',
     40      1.1  christos     },
     41      1.1  christos     {
     42      1.1  christos         "AB_CD_EF_F1",
     43      1.1  christos         test_1, sizeof(test_1),
     44      1.1  christos         '_',
     45      1.1  christos     },
     46      1.1  christos     {
     47      1.1  christos         "AB_CD_EF_76_00",
     48      1.1  christos         test_2, sizeof(test_2),
     49      1.1  christos         '_',
     50      1.1  christos     },
     51      1.1  christos     {
     52      1.1  christos         "ABCDEFF1",
     53      1.1  christos         test_1, sizeof(test_1),
     54      1.1  christos         '\0',
     55      1.1  christos     },
     56      1.1  christos     {
     57      1.1  christos         "ABCDEF7600",
     58      1.1  christos         test_2, sizeof(test_2),
     59      1.1  christos         '\0',
     60      1.1  christos     },
     61      1.1  christos };
     62      1.1  christos 
     63      1.1  christos static int test_hexstr_sep_to_from(int test_index)
     64      1.1  christos {
     65      1.1  christos     int ret = 0;
     66      1.1  christos     long len = 0;
     67      1.1  christos     unsigned char *buf = NULL;
     68      1.1  christos     char *out = NULL;
     69      1.1  christos     struct testdata *test = &tbl_testdata[test_index];
     70      1.1  christos 
     71      1.1  christos     if (!TEST_ptr(buf = ossl_hexstr2buf_sep(test->in, &len, test->sep))
     72      1.1  christos         || !TEST_mem_eq(buf, len, test->expected, test->expected_len)
     73      1.1  christos         || !TEST_ptr(out = ossl_buf2hexstr_sep(buf, len, test->sep))
     74      1.1  christos         || !TEST_str_eq(out, test->in))
     75      1.1  christos        goto err;
     76      1.1  christos 
     77      1.1  christos     ret = 1;
     78      1.1  christos err:
     79      1.1  christos     OPENSSL_free(buf);
     80      1.1  christos     OPENSSL_free(out);
     81      1.1  christos     return ret;
     82      1.1  christos }
     83      1.1  christos 
     84      1.1  christos static int test_hexstr_to_from(int test_index)
     85      1.1  christos {
     86      1.1  christos     int ret = 0;
     87      1.1  christos     long len = 0;
     88      1.1  christos     unsigned char *buf = NULL;
     89      1.1  christos     char *out = NULL;
     90      1.1  christos     struct testdata *test = &tbl_testdata[test_index];
     91      1.1  christos 
     92      1.1  christos     if (test->sep != '_') {
     93      1.1  christos         if (!TEST_ptr(buf = OPENSSL_hexstr2buf(test->in, &len))
     94      1.1  christos             || !TEST_mem_eq(buf, len, test->expected, test->expected_len)
     95      1.1  christos             || !TEST_ptr(out = OPENSSL_buf2hexstr(buf, len)))
     96      1.1  christos            goto err;
     97      1.1  christos         if (test->sep == ':') {
     98      1.1  christos             if (!TEST_str_eq(out, test->in))
     99      1.1  christos                 goto err;
    100      1.1  christos         } else if (!TEST_str_ne(out, test->in)) {
    101      1.1  christos             goto err;
    102      1.1  christos         }
    103      1.1  christos     } else {
    104      1.1  christos         if (!TEST_ptr_null(buf = OPENSSL_hexstr2buf(test->in, &len)))
    105      1.1  christos             goto err;
    106      1.1  christos     }
    107      1.1  christos     ret = 1;
    108      1.1  christos err:
    109      1.1  christos     OPENSSL_free(buf);
    110      1.1  christos     OPENSSL_free(out);
    111      1.1  christos     return ret;
    112      1.1  christos }
    113      1.1  christos 
    114      1.1  christos static int test_hexstr_ex_to_from(int test_index)
    115      1.1  christos {
    116      1.1  christos     size_t len = 0;
    117      1.1  christos     char out[64];
    118      1.1  christos     unsigned char buf[64];
    119      1.1  christos     struct testdata *test = &tbl_testdata[test_index];
    120      1.1  christos 
    121      1.1  christos     return TEST_true(OPENSSL_hexstr2buf_ex(buf, sizeof(buf), &len, test->in, ':'))
    122      1.1  christos            && TEST_mem_eq(buf, len, test->expected, test->expected_len)
    123  1.1.1.2  christos            && TEST_false(OPENSSL_buf2hexstr_ex(out, 3 * len - 1, NULL, buf, len,
    124  1.1.1.2  christos                                                ':'))
    125      1.1  christos            && TEST_true(OPENSSL_buf2hexstr_ex(out, sizeof(out), NULL, buf, len,
    126  1.1.1.2  christos                                               ':'))
    127  1.1.1.2  christos            && TEST_str_eq(out, test->in)
    128  1.1.1.2  christos            && TEST_true(OPENSSL_buf2hexstr_ex(out, sizeof(out), NULL, buf, 0,
    129  1.1.1.2  christos                                               ':'))
    130  1.1.1.2  christos            && TEST_size_t_eq(strlen(out), 0);
    131      1.1  christos }
    132      1.1  christos 
    133      1.1  christos int setup_tests(void)
    134      1.1  christos {
    135      1.1  christos     ADD_ALL_TESTS(test_hexstr_sep_to_from, OSSL_NELEM(tbl_testdata));
    136      1.1  christos     ADD_ALL_TESTS(test_hexstr_to_from, OSSL_NELEM(tbl_testdata));
    137      1.1  christos     ADD_ALL_TESTS(test_hexstr_ex_to_from, 2);
    138      1.1  christos     return 1;
    139      1.1  christos }
    140