1*b0d17251Schristos /*
2*b0d17251Schristos * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
3*b0d17251Schristos * Copyright Nokia 2007-2019
4*b0d17251Schristos * Copyright Siemens AG 2015-2019
5*b0d17251Schristos *
6*b0d17251Schristos * Licensed under the Apache License 2.0 (the "License"). You may not use
7*b0d17251Schristos * this file except in compliance with the License. You can obtain a copy
8*b0d17251Schristos * in the file LICENSE in the source distribution or at
9*b0d17251Schristos * https://www.openssl.org/source/license.html
10*b0d17251Schristos */
11*b0d17251Schristos
12*b0d17251Schristos #include "helpers/cmp_testlib.h"
13*b0d17251Schristos
14*b0d17251Schristos typedef struct test_fixture {
15*b0d17251Schristos const char *test_case_name;
16*b0d17251Schristos int pkistatus;
17*b0d17251Schristos const char *str; /* Not freed by tear_down */
18*b0d17251Schristos const char *text; /* Not freed by tear_down */
19*b0d17251Schristos int pkifailure;
20*b0d17251Schristos } CMP_STATUS_TEST_FIXTURE;
21*b0d17251Schristos
set_up(const char * const test_case_name)22*b0d17251Schristos static CMP_STATUS_TEST_FIXTURE *set_up(const char *const test_case_name)
23*b0d17251Schristos {
24*b0d17251Schristos CMP_STATUS_TEST_FIXTURE *fixture;
25*b0d17251Schristos
26*b0d17251Schristos if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
27*b0d17251Schristos return NULL;
28*b0d17251Schristos fixture->test_case_name = test_case_name;
29*b0d17251Schristos return fixture;
30*b0d17251Schristos }
31*b0d17251Schristos
tear_down(CMP_STATUS_TEST_FIXTURE * fixture)32*b0d17251Schristos static void tear_down(CMP_STATUS_TEST_FIXTURE *fixture)
33*b0d17251Schristos {
34*b0d17251Schristos OPENSSL_free(fixture);
35*b0d17251Schristos }
36*b0d17251Schristos
37*b0d17251Schristos
38*b0d17251Schristos /*
39*b0d17251Schristos * Tests PKIStatusInfo creation and get-functions
40*b0d17251Schristos */
execute_PKISI_test(CMP_STATUS_TEST_FIXTURE * fixture)41*b0d17251Schristos static int execute_PKISI_test(CMP_STATUS_TEST_FIXTURE *fixture)
42*b0d17251Schristos {
43*b0d17251Schristos OSSL_CMP_PKISI *si = NULL;
44*b0d17251Schristos int status;
45*b0d17251Schristos ASN1_UTF8STRING *statusString = NULL;
46*b0d17251Schristos int res = 0, i;
47*b0d17251Schristos
48*b0d17251Schristos if (!TEST_ptr(si = OSSL_CMP_STATUSINFO_new(fixture->pkistatus,
49*b0d17251Schristos fixture->pkifailure,
50*b0d17251Schristos fixture->text)))
51*b0d17251Schristos goto end;
52*b0d17251Schristos
53*b0d17251Schristos status = ossl_cmp_pkisi_get_status(si);
54*b0d17251Schristos if (!TEST_int_eq(fixture->pkistatus, status)
55*b0d17251Schristos || !TEST_str_eq(fixture->str, ossl_cmp_PKIStatus_to_string(status)))
56*b0d17251Schristos goto end;
57*b0d17251Schristos
58*b0d17251Schristos if (!TEST_ptr(statusString =
59*b0d17251Schristos sk_ASN1_UTF8STRING_value(ossl_cmp_pkisi_get0_statusString(si),
60*b0d17251Schristos 0))
61*b0d17251Schristos || !TEST_mem_eq(fixture->text, strlen(fixture->text),
62*b0d17251Schristos (char *)statusString->data, statusString->length))
63*b0d17251Schristos goto end;
64*b0d17251Schristos
65*b0d17251Schristos if (!TEST_int_eq(fixture->pkifailure,
66*b0d17251Schristos ossl_cmp_pkisi_get_pkifailureinfo(si)))
67*b0d17251Schristos goto end;
68*b0d17251Schristos for (i = 0; i <= OSSL_CMP_PKIFAILUREINFO_MAX; i++)
69*b0d17251Schristos if (!TEST_int_eq((fixture->pkifailure >> i) & 1,
70*b0d17251Schristos ossl_cmp_pkisi_check_pkifailureinfo(si, i)))
71*b0d17251Schristos goto end;
72*b0d17251Schristos
73*b0d17251Schristos res = 1;
74*b0d17251Schristos
75*b0d17251Schristos end:
76*b0d17251Schristos OSSL_CMP_PKISI_free(si);
77*b0d17251Schristos return res;
78*b0d17251Schristos }
79*b0d17251Schristos
test_PKISI(void)80*b0d17251Schristos static int test_PKISI(void)
81*b0d17251Schristos {
82*b0d17251Schristos SETUP_TEST_FIXTURE(CMP_STATUS_TEST_FIXTURE, set_up);
83*b0d17251Schristos fixture->pkistatus = OSSL_CMP_PKISTATUS_revocationNotification;
84*b0d17251Schristos fixture->str = "PKIStatus: revocation notification - a revocation of the cert has occurred";
85*b0d17251Schristos fixture->text = "this is an additional text describing the failure";
86*b0d17251Schristos fixture->pkifailure = OSSL_CMP_CTX_FAILINFO_unsupportedVersion |
87*b0d17251Schristos OSSL_CMP_CTX_FAILINFO_badDataFormat;
88*b0d17251Schristos EXECUTE_TEST(execute_PKISI_test, tear_down);
89*b0d17251Schristos return result;
90*b0d17251Schristos }
91*b0d17251Schristos
92*b0d17251Schristos
93*b0d17251Schristos
cleanup_tests(void)94*b0d17251Schristos void cleanup_tests(void)
95*b0d17251Schristos {
96*b0d17251Schristos return;
97*b0d17251Schristos }
98*b0d17251Schristos
setup_tests(void)99*b0d17251Schristos int setup_tests(void)
100*b0d17251Schristos {
101*b0d17251Schristos /*-
102*b0d17251Schristos * this tests all of:
103*b0d17251Schristos * OSSL_CMP_STATUSINFO_new()
104*b0d17251Schristos * ossl_cmp_pkisi_get_status()
105*b0d17251Schristos * ossl_cmp_PKIStatus_to_string()
106*b0d17251Schristos * ossl_cmp_pkisi_get0_statusString()
107*b0d17251Schristos * ossl_cmp_pkisi_get_pkifailureinfo()
108*b0d17251Schristos * ossl_cmp_pkisi_check_pkifailureinfo()
109*b0d17251Schristos */
110*b0d17251Schristos ADD_TEST(test_PKISI);
111*b0d17251Schristos return 1;
112*b0d17251Schristos }
113