1 /* 2 * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. 3 * Copyright Nokia 2007-2019 4 * Copyright Siemens AG 2015-2019 5 * 6 * Licensed under the Apache License 2.0 (the "License"). You may not use 7 * this file except in compliance with the License. You can obtain a copy 8 * in the file LICENSE in the source distribution or at 9 * https://www.openssl.org/source/license.html 10 */ 11 12 #include "helpers/cmp_testlib.h" 13 14 static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH]; 15 16 typedef struct test_fixture { 17 const char *test_case_name; 18 int expected; 19 ASN1_OCTET_STRING *src_string; 20 ASN1_OCTET_STRING *tgt_string; 21 22 } CMP_ASN_TEST_FIXTURE; 23 24 static CMP_ASN_TEST_FIXTURE *set_up(const char *const test_case_name) 25 { 26 CMP_ASN_TEST_FIXTURE *fixture; 27 28 if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture)))) 29 return NULL; 30 fixture->test_case_name = test_case_name; 31 return fixture; 32 } 33 34 static void tear_down(CMP_ASN_TEST_FIXTURE *fixture) 35 { 36 ASN1_OCTET_STRING_free(fixture->src_string); 37 if (fixture->tgt_string != fixture->src_string) 38 ASN1_OCTET_STRING_free(fixture->tgt_string); 39 40 OPENSSL_free(fixture); 41 } 42 43 static int execute_cmp_asn1_get_int_test(CMP_ASN_TEST_FIXTURE *fixture) 44 { 45 int res = 0; 46 ASN1_INTEGER *asn1integer = ASN1_INTEGER_new(); 47 const int good_int = 77; 48 const int64_t max_int = INT_MAX; 49 50 if (!TEST_ptr(asn1integer)) 51 return res; 52 53 if (!TEST_true(ASN1_INTEGER_set(asn1integer, good_int))) { 54 ASN1_INTEGER_free(asn1integer); 55 return 0; 56 } 57 res = TEST_int_eq(good_int, ossl_cmp_asn1_get_int(asn1integer)); 58 if (res == 0) 59 goto err; 60 61 res = 0; 62 if (!TEST_true(ASN1_INTEGER_set_int64(asn1integer, max_int + 1))) 63 goto err; 64 res = TEST_int_eq(-2, ossl_cmp_asn1_get_int(asn1integer)); 65 66 err: 67 ASN1_INTEGER_free(asn1integer); 68 return res; 69 } 70 71 static int test_cmp_asn1_get_int(void) 72 { 73 SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up); 74 fixture->expected = 1; 75 EXECUTE_TEST(execute_cmp_asn1_get_int_test, tear_down); 76 return result; 77 } 78 79 static int execute_CMP_ASN1_OCTET_STRING_set1_test(CMP_ASN_TEST_FIXTURE * 80 fixture) 81 { 82 if (!TEST_int_eq(fixture->expected, 83 ossl_cmp_asn1_octet_string_set1(&fixture->tgt_string, 84 fixture->src_string))) 85 return 0; 86 if (fixture->expected != 0) 87 return TEST_int_eq(0, ASN1_OCTET_STRING_cmp(fixture->tgt_string, 88 fixture->src_string)); 89 return 1; 90 } 91 92 static int test_ASN1_OCTET_STRING_set(void) 93 { 94 SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up); 95 fixture->expected = 1; 96 if (!TEST_ptr(fixture->tgt_string = ASN1_OCTET_STRING_new()) 97 || !TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new()) 98 || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data, 99 sizeof(rand_data)))) { 100 tear_down(fixture); 101 fixture = NULL; 102 } 103 EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down); 104 return result; 105 } 106 107 static int test_ASN1_OCTET_STRING_set_tgt_is_src(void) 108 { 109 SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up); 110 fixture->expected = 1; 111 if (!TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new()) 112 || !(fixture->tgt_string = fixture->src_string) 113 || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data, 114 sizeof(rand_data)))) { 115 tear_down(fixture); 116 fixture = NULL; 117 } 118 EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down); 119 return result; 120 } 121 122 123 void cleanup_tests(void) 124 { 125 return; 126 } 127 128 int setup_tests(void) 129 { 130 RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH); 131 /* ASN.1 related tests */ 132 ADD_TEST(test_cmp_asn1_get_int); 133 ADD_TEST(test_ASN1_OCTET_STRING_set); 134 ADD_TEST(test_ASN1_OCTET_STRING_set_tgt_is_src); 135 return 1; 136 } 137