2 * Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved.
3 * Copyright Nokia 2007-2019
4 * Copyright Siemens AG 2015-2019
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
12 #include "cmp_testlib.h"
14 static unsigned char rand_data
[OSSL_CMP_TRANSACTIONID_LENGTH
];
16 typedef struct test_fixture
{
17 const char *test_case_name
;
19 OSSL_CMP_CTX
*cmp_ctx
;
20 OSSL_CMP_PKIHEADER
*hdr
;
22 } CMP_HDR_TEST_FIXTURE
;
24 static void tear_down(CMP_HDR_TEST_FIXTURE
*fixture
)
26 OSSL_CMP_PKIHEADER_free(fixture
->hdr
);
27 OSSL_CMP_CTX_free(fixture
->cmp_ctx
);
28 OPENSSL_free(fixture
);
31 static CMP_HDR_TEST_FIXTURE
*set_up(const char *const test_case_name
)
33 CMP_HDR_TEST_FIXTURE
*fixture
;
35 if (!TEST_ptr(fixture
= OPENSSL_zalloc(sizeof(*fixture
))))
37 fixture
->test_case_name
= test_case_name
;
38 if (!TEST_ptr(fixture
->cmp_ctx
= OSSL_CMP_CTX_new()))
40 if (!TEST_ptr(fixture
->hdr
= OSSL_CMP_PKIHEADER_new()))
49 static int execute_HDR_set_get_pvno_test(CMP_HDR_TEST_FIXTURE
*fixture
)
53 if (!TEST_int_eq(ossl_cmp_hdr_set_pvno(fixture
->hdr
, pvno
), 1))
55 if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture
->hdr
), pvno
))
60 static int test_HDR_set_get_pvno(void)
62 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
63 fixture
->expected
= 1;
64 EXECUTE_TEST(execute_HDR_set_get_pvno_test
, tear_down
);
68 #define X509_NAME_ADD(n, rd, s) \
69 X509_NAME_add_entry_by_txt((n), (rd), MBSTRING_ASC, (unsigned char *)(s), \
72 static int execute_HDR_get0_senderNonce_test(CMP_HDR_TEST_FIXTURE
*fixture
)
74 X509_NAME
*sender
= X509_NAME_new();
75 ASN1_OCTET_STRING
*sn
;
77 if (!TEST_ptr(sender
))
80 X509_NAME_ADD(sender
, "CN", "A common sender name");
81 if (!TEST_int_eq(OSSL_CMP_CTX_set1_subjectName(fixture
->cmp_ctx
, sender
),
84 if (!TEST_int_eq(ossl_cmp_hdr_init(fixture
->cmp_ctx
, fixture
->hdr
),
87 sn
= ossl_cmp_hdr_get0_senderNonce(fixture
->hdr
);
88 if (!TEST_int_eq(ASN1_OCTET_STRING_cmp(fixture
->cmp_ctx
->senderNonce
, sn
),
91 X509_NAME_free(sender
);
95 static int test_HDR_get0_senderNonce(void)
97 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
98 fixture
->expected
= 1;
99 EXECUTE_TEST(execute_HDR_get0_senderNonce_test
, tear_down
);
103 static int execute_HDR_set1_sender_test(CMP_HDR_TEST_FIXTURE
*fixture
)
105 X509_NAME
*x509name
= X509_NAME_new();
107 if (!TEST_ptr(x509name
))
110 X509_NAME_ADD(x509name
, "CN", "A common sender name");
111 if (!TEST_int_eq(ossl_cmp_hdr_set1_sender(fixture
->hdr
, x509name
), 1))
113 if (!TEST_int_eq(fixture
->hdr
->sender
->type
, GEN_DIRNAME
))
116 if (!TEST_int_eq(X509_NAME_cmp(fixture
->hdr
->sender
->d
.directoryName
,
120 X509_NAME_free(x509name
);
124 static int test_HDR_set1_sender(void)
126 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
127 fixture
->expected
= 1;
128 EXECUTE_TEST(execute_HDR_set1_sender_test
, tear_down
);
132 static int execute_HDR_set1_recipient_test(CMP_HDR_TEST_FIXTURE
*fixture
)
134 X509_NAME
*x509name
= X509_NAME_new();
136 if (!TEST_ptr(x509name
))
139 X509_NAME_ADD(x509name
, "CN", "A common recipient name");
140 if (!TEST_int_eq(ossl_cmp_hdr_set1_recipient(fixture
->hdr
, x509name
), 1))
143 if (!TEST_int_eq(fixture
->hdr
->recipient
->type
, GEN_DIRNAME
))
146 if (!TEST_int_eq(X509_NAME_cmp(fixture
->hdr
->recipient
->d
.directoryName
,
150 X509_NAME_free(x509name
);
154 static int test_HDR_set1_recipient(void)
156 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
157 fixture
->expected
= 1;
158 EXECUTE_TEST(execute_HDR_set1_recipient_test
, tear_down
);
162 static int execute_HDR_update_messageTime_test(CMP_HDR_TEST_FIXTURE
*fixture
)
165 time_t hdrtime
, before
, after
, now
;
168 before
= mktime(gmtime(&now
));
169 if (!TEST_true(ossl_cmp_hdr_update_messageTime(fixture
->hdr
)))
171 if (!TEST_true(ASN1_TIME_to_tm(fixture
->hdr
->messageTime
, &hdrtm
)))
174 hdrtime
= mktime(&hdrtm
);
175 if (!TEST_true(before
<= hdrtime
))
178 after
= mktime(gmtime(&now
));
179 return TEST_true(hdrtime
<= after
);
182 static int test_HDR_update_messageTime(void)
184 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
185 fixture
->expected
= 1;
186 EXECUTE_TEST(execute_HDR_update_messageTime_test
, tear_down
);
190 static int execute_HDR_set1_senderKID_test(CMP_HDR_TEST_FIXTURE
*fixture
)
192 ASN1_OCTET_STRING
*senderKID
= ASN1_OCTET_STRING_new();
194 if (!TEST_ptr(senderKID
))
197 if (!TEST_int_eq(ASN1_OCTET_STRING_set(senderKID
, rand_data
,
198 sizeof(rand_data
)), 1))
200 if (!TEST_int_eq(ossl_cmp_hdr_set1_senderKID(fixture
->hdr
, senderKID
), 1))
202 if (!TEST_int_eq(ASN1_OCTET_STRING_cmp(fixture
->hdr
->senderKID
,
206 ASN1_OCTET_STRING_free(senderKID
);
210 static int test_HDR_set1_senderKID(void)
212 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
213 fixture
->expected
= 1;
214 EXECUTE_TEST(execute_HDR_set1_senderKID_test
, tear_down
);
218 static int execute_HDR_push0_freeText_test(CMP_HDR_TEST_FIXTURE
*fixture
)
220 ASN1_UTF8STRING
*text
= ASN1_UTF8STRING_new();
225 if (!ASN1_STRING_set(text
, "A free text", -1))
228 if (!TEST_int_eq(ossl_cmp_hdr_push0_freeText(fixture
->hdr
, text
), 1))
231 if (!TEST_true(text
== sk_ASN1_UTF8STRING_value(fixture
->hdr
->freeText
, 0)))
237 static int test_HDR_push0_freeText(void)
239 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
240 fixture
->expected
= 1;
241 EXECUTE_TEST(execute_HDR_push0_freeText_test
, tear_down
);
245 static int execute_HDR_push1_freeText_test(CMP_HDR_TEST_FIXTURE
*fixture
)
247 ASN1_UTF8STRING
*text
= ASN1_UTF8STRING_new();
248 ASN1_UTF8STRING
*pushed_text
;
253 if (!ASN1_STRING_set(text
, "A free text", -1))
256 if (!TEST_int_eq(ossl_cmp_hdr_push1_freeText(fixture
->hdr
, text
), 1))
259 pushed_text
= sk_ASN1_UTF8STRING_value(fixture
->hdr
->freeText
, 0);
260 if (!TEST_int_eq(ASN1_STRING_cmp(text
, pushed_text
), 0))
263 ASN1_UTF8STRING_free(text
);
267 static int test_HDR_push1_freeText(void)
269 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
270 fixture
->expected
= 1;
271 EXECUTE_TEST(execute_HDR_push1_freeText_test
, tear_down
);
276 execute_HDR_generalInfo_push0_item_test(CMP_HDR_TEST_FIXTURE
*fixture
)
278 OSSL_CMP_ITAV
*itav
= OSSL_CMP_ITAV_new();
283 if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push0_item(fixture
->hdr
, itav
),
287 if (!TEST_true(itav
== sk_OSSL_CMP_ITAV_value(fixture
->hdr
->generalInfo
,
294 static int test_HDR_generalInfo_push0_item(void)
296 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
297 fixture
->expected
= 1;
298 EXECUTE_TEST(execute_HDR_generalInfo_push0_item_test
, tear_down
);
303 execute_HDR_generalInfo_push1_items_test(CMP_HDR_TEST_FIXTURE
*fixture
)
305 const char oid
[] = "1.2.3.4";
307 OSSL_CMP_ITAV
*itav
, *pushed_itav
;
308 STACK_OF(OSSL_CMP_ITAV
) *itavs
= NULL
, *ginfo
;
309 ASN1_INTEGER
*asn1int
= ASN1_INTEGER_new();
310 ASN1_TYPE
*val
= ASN1_TYPE_new();
311 ASN1_TYPE
*pushed_val
;
313 if (!TEST_ptr(asn1int
))
319 ASN1_INTEGER_set(asn1int
, 88);
320 ASN1_TYPE_set(val
, V_ASN1_INTEGER
, asn1int
);
321 itav
= OSSL_CMP_ITAV_create(OBJ_txt2obj(oid
, 1), val
);
322 OSSL_CMP_ITAV_push0_stack_item(&itavs
, itav
);
324 if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push1_items(fixture
->hdr
, itavs
),
327 ginfo
= fixture
->hdr
->generalInfo
;
328 pushed_itav
= sk_OSSL_CMP_ITAV_value(ginfo
, 0);
329 OBJ_obj2txt(buf
, sizeof(buf
), OSSL_CMP_ITAV_get0_type(pushed_itav
), 0);
330 if (!TEST_int_eq(memcmp(oid
, buf
, sizeof(oid
)), 0))
333 pushed_val
= OSSL_CMP_ITAV_get0_value(sk_OSSL_CMP_ITAV_value(ginfo
, 0));
334 if (!TEST_int_eq(ASN1_TYPE_cmp(itav
->infoValue
.other
, pushed_val
), 0))
337 sk_OSSL_CMP_ITAV_pop_free(itavs
, OSSL_CMP_ITAV_free
);
341 static int test_HDR_generalInfo_push1_items(void)
343 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
344 fixture
->expected
= 1;
345 EXECUTE_TEST(execute_HDR_generalInfo_push1_items_test
, tear_down
);
350 execute_HDR_set_and_check_implicitConfirm_test(CMP_HDR_TEST_FIXTURE
353 return TEST_false(ossl_cmp_hdr_check_implicitConfirm(fixture
->hdr
))
354 && TEST_true(ossl_cmp_hdr_set_implicitConfirm(fixture
->hdr
))
355 && TEST_true(ossl_cmp_hdr_check_implicitConfirm(fixture
->hdr
));
358 static int test_HDR_set_and_check_implicit_confirm(void)
360 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
361 EXECUTE_TEST(execute_HDR_set_and_check_implicitConfirm_test
, tear_down
);
366 static int execute_HDR_init_test(CMP_HDR_TEST_FIXTURE
*fixture
)
368 ASN1_OCTET_STRING
*header_nonce
, *header_transactionID
;
369 ASN1_OCTET_STRING
*ctx_nonce
;
371 if (!TEST_int_eq(fixture
->expected
,
372 ossl_cmp_hdr_init(fixture
->cmp_ctx
, fixture
->hdr
)))
374 if (fixture
->expected
== 0)
377 if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture
->hdr
), OSSL_CMP_PVNO
))
380 header_nonce
= ossl_cmp_hdr_get0_senderNonce(fixture
->hdr
);
381 if (!TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce
,
382 fixture
->cmp_ctx
->senderNonce
)))
384 header_transactionID
= OSSL_CMP_HDR_get0_transactionID(fixture
->hdr
);
385 if (!TEST_true(0 == ASN1_OCTET_STRING_cmp(header_transactionID
,
386 fixture
->cmp_ctx
->transactionID
)))
389 header_nonce
= OSSL_CMP_HDR_get0_recipNonce(fixture
->hdr
);
390 ctx_nonce
= fixture
->cmp_ctx
->recipNonce
;
391 if (ctx_nonce
!= NULL
392 && (!TEST_ptr(header_nonce
)
393 || !TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce
,
400 static int test_HDR_init(void)
402 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
403 unsigned char ref
[CMP_TEST_REFVALUE_LENGTH
];
405 fixture
->expected
= 1;
406 if (!TEST_int_eq(1, RAND_bytes(ref
, sizeof(ref
)))
407 || !TEST_true(OSSL_CMP_CTX_set1_referenceValue(fixture
->cmp_ctx
,
408 ref
, sizeof(ref
)))) {
412 EXECUTE_TEST(execute_HDR_init_test
, tear_down
);
416 static int test_HDR_init_with_subject(void)
418 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
419 X509_NAME
*subject
= NULL
;
421 fixture
->expected
= 1;
422 if (!TEST_ptr(subject
= X509_NAME_new())
423 || !TEST_true(X509_NAME_ADD(subject
, "CN", "Common Name"))
424 || !TEST_true(OSSL_CMP_CTX_set1_subjectName(fixture
->cmp_ctx
,
429 X509_NAME_free(subject
);
430 EXECUTE_TEST(execute_HDR_init_test
, tear_down
);
434 static int test_HDR_init_no_ref_no_subject(void)
436 SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE
, set_up
);
437 fixture
->expected
= 0;
438 EXECUTE_TEST(execute_HDR_init_test
, tear_down
);
443 void cleanup_tests(void)
448 int setup_tests(void)
450 RAND_bytes(rand_data
, OSSL_CMP_TRANSACTIONID_LENGTH
);
451 /* Message header tests */
452 ADD_TEST(test_HDR_set_get_pvno
);
453 ADD_TEST(test_HDR_get0_senderNonce
);
454 ADD_TEST(test_HDR_set1_sender
);
455 ADD_TEST(test_HDR_set1_recipient
);
456 ADD_TEST(test_HDR_update_messageTime
);
457 ADD_TEST(test_HDR_set1_senderKID
);
458 ADD_TEST(test_HDR_push0_freeText
);
459 /* indirectly tests ossl_cmp_pkifreetext_push_str(): */
460 ADD_TEST(test_HDR_push1_freeText
);
461 ADD_TEST(test_HDR_generalInfo_push0_item
);
462 ADD_TEST(test_HDR_generalInfo_push1_items
);
463 ADD_TEST(test_HDR_set_and_check_implicit_confirm
);
464 /* also tests public function OSSL_CMP_HDR_get0_transactionID(): */
465 /* also tests public function OSSL_CMP_HDR_get0_recipNonce(): */
466 /* also tests internal function ossl_cmp_hdr_get_pvno(): */
467 ADD_TEST(test_HDR_init
);
468 ADD_TEST(test_HDR_init_with_subject
);
469 ADD_TEST(test_HDR_init_no_ref_no_subject
);
471 * TODO make sure that total number of tests (here currently 24) is shown,
472 * also for other cmp_*text.c. Currently the test drivers always show 1.