X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=test%2Fcmp_ctx_test.c;h=3ea3013abeeb583d7d52ecc8408d48b495748163;hb=HEAD;hp=d7a3edb14028668f9de59f34023dd914468ad5be;hpb=4dde554c6ae2375ce53b24cc535124355c339462;p=openssl.git diff --git a/test/cmp_ctx_test.c b/test/cmp_ctx_test.c index d7a3edb140..f38493b334 100644 --- a/test/cmp_ctx_test.c +++ b/test/cmp_ctx_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -9,7 +9,7 @@ * https://www.openssl.org/source/license.html */ -#include "cmp_testlib.h" +#include "helpers/cmp_testlib.h" #include @@ -31,7 +31,7 @@ static OSSL_CMP_CTX_TEST_FIXTURE *set_up(const char *const test_case_name) if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture)))) return NULL; - if (!TEST_ptr(fixture->ctx = OSSL_CMP_CTX_new())) { + if (!TEST_ptr(fixture->ctx = OSSL_CMP_CTX_new(NULL, NULL))) { tear_down(fixture); return NULL; } @@ -39,7 +39,8 @@ static OSSL_CMP_CTX_TEST_FIXTURE *set_up(const char *const test_case_name) return fixture; } -static STACK_OF(X509) *sk_X509_new_1(void) { +static STACK_OF(X509) *sk_X509_new_1(void) +{ STACK_OF(X509) *sk = sk_X509_new_null(); X509 *x = X509_new(); @@ -51,8 +52,9 @@ static STACK_OF(X509) *sk_X509_new_1(void) { return sk; } -static void sk_X509_pop_X509_free(STACK_OF(X509) *sk) { - sk_X509_pop_free(sk, X509_free); +static void sk_X509_pop_X509_free(STACK_OF(X509) *sk) +{ + OSSL_STACK_OF_X509_free(sk); } static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) @@ -60,6 +62,7 @@ static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) OSSL_CMP_CTX *ctx = fixture->ctx; ASN1_OCTET_STRING *bytes = NULL; STACK_OF(X509) *certs = NULL; + X509 *cert = X509_new(); int res = 0; /* set non-default values in all relevant fields */ @@ -68,14 +71,14 @@ static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) if (!ossl_cmp_ctx_set0_statusString(ctx, sk_ASN1_UTF8STRING_new_null()) || !ossl_cmp_ctx_set0_newCert(ctx, X509_new()) || !TEST_ptr(certs = sk_X509_new_1()) + || !ossl_cmp_ctx_set1_newChain(ctx, certs) || !ossl_cmp_ctx_set1_caPubs(ctx, certs) || !ossl_cmp_ctx_set1_extraCertsIn(ctx, certs) - || !ossl_cmp_ctx_set0_validatedSrvCert(ctx, X509_new()) + || !ossl_cmp_ctx_set1_validatedSrvCert(ctx, cert) || !TEST_ptr(bytes = ASN1_OCTET_STRING_new()) || !OSSL_CMP_CTX_set1_transactionID(ctx, bytes) || !OSSL_CMP_CTX_set1_senderNonce(ctx, bytes) || !ossl_cmp_ctx_set1_recipNonce(ctx, bytes)) - goto err; if (!TEST_true(OSSL_CMP_CTX_reinit(ctx))) @@ -86,6 +89,7 @@ static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) && ctx->failInfoCode == -1 && ctx->statusString == NULL && ctx->newCert == NULL + && ctx->newChain == NULL && ctx->caPubs == NULL && ctx->extraCertsIn == NULL && ctx->validatedSrvCert == NULL @@ -98,11 +102,27 @@ static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) res = 1; err: + X509_free(cert); sk_X509_pop_X509_free(certs); ASN1_OCTET_STRING_free(bytes); return res; } +static int test_CTX_libctx_propq(void) +{ + OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new(); + const char *propq = "?provider=legacy"; + OSSL_CMP_CTX *cmpctx = OSSL_CMP_CTX_new(libctx, propq); + int res = TEST_ptr(libctx) + && TEST_ptr(cmpctx) + && TEST_ptr_eq(libctx, OSSL_CMP_CTX_get0_libctx(cmpctx)) + && TEST_str_eq(propq, OSSL_CMP_CTX_get0_propq(cmpctx)); + + OSSL_CMP_CTX_free(cmpctx); + OSSL_LIB_CTX_free(libctx); + return res; +} + static int test_CTX_reinit(void) { SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up); @@ -117,6 +137,7 @@ static int msg_total_size_log_cb(const char *func, const char *file, int line, OSSL_CMP_severity level, const char *msg) { msg_total_size += strlen(msg); + TEST_note("total=%d len=%zu msg='%s'\n", msg_total_size, strlen(msg), msg); return 1; } @@ -139,7 +160,7 @@ static int execute_CTX_print_errors_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) res = 0; # ifndef OPENSSL_NO_STDIO - CMPerr(0, CMP_R_MULTIPLE_SAN_SOURCES); + ERR_raise(ERR_LIB_CMP, CMP_R_MULTIPLE_SAN_SOURCES); OSSL_CMP_CTX_print_errors(ctx); /* should print above error to STDERR */ # endif @@ -149,13 +170,13 @@ static int execute_CTX_print_errors_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) if (!TEST_true(ctx->log_cb == msg_total_size_log_cb)) { res = 0; } else { - CMPerr(0, CMP_R_INVALID_ARGS); + ERR_raise(ERR_LIB_CMP, CMP_R_INVALID_ARGS); base_err_msg_size = strlen("INVALID_ARGS"); - CMPerr(0, CMP_R_NULL_ARGUMENT); + ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT); base_err_msg_size += strlen("NULL_ARGUMENT"); expected_size = base_err_msg_size; - ossl_cmp_add_error_data("data1"); /* should prepend separator " : " */ - expected_size += strlen(" : " "data1"); + ossl_cmp_add_error_data("data1"); /* should prepend separator ":" */ + expected_size += strlen(":" "data1"); ossl_cmp_add_error_data("data2"); /* should prepend separator " : " */ expected_size += strlen(" : " "data2"); ossl_cmp_add_error_line("new line"); /* should prepend separator "\n" */ @@ -164,11 +185,11 @@ static int execute_CTX_print_errors_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) if (!TEST_int_eq(msg_total_size, expected_size)) res = 0; - CMPerr(0, CMP_R_INVALID_ARGS); - base_err_msg_size = strlen("INVALID_ARGS") + strlen(" : "); + ERR_raise(ERR_LIB_CMP, CMP_R_INVALID_ARGS); + base_err_msg_size = strlen("INVALID_ARGS") + strlen(":"); expected_size = base_err_msg_size; while (expected_size < 4096) { /* force split */ - ossl_cmp_add_error_txt(STR_SEP, max_str_literal); + ERR_add_error_txt(STR_SEP, max_str_literal); expected_size += strlen(STR_SEP) + strlen(max_str_literal); } expected_size += base_err_msg_size - 2 * strlen(STR_SEP); @@ -189,12 +210,12 @@ static int test_CTX_print_errors(void) } #endif -static int execute_CTX_reqExtensions_have_SAN_test( - OSSL_CMP_CTX_TEST_FIXTURE *fixture) +static +int execute_CTX_reqExtensions_have_SAN_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) { OSSL_CMP_CTX *ctx = fixture->ctx; const int len = 16; - unsigned char str[16 /* = len */ ]; + unsigned char str[16 /* = len */]; ASN1_OCTET_STRING *data = NULL; X509_EXTENSION *ext = NULL; X509_EXTENSIONS *exts = NULL; @@ -233,29 +254,27 @@ static int test_CTX_reqExtensions_have_SAN(void) return result; } -#ifndef OPENSSL_NO_TRACE static int test_log_line; static int test_log_cb_res = 0; static int test_log_cb(const char *func, const char *file, int line, OSSL_CMP_severity level, const char *msg) { test_log_cb_res = -# ifndef PEDANTIC - (strcmp(func, "execute_cmp_ctx_log_cb_test") == 0 - || strcmp(func, "(unknown function)") == 0) && -# endif - (strcmp(file, OPENSSL_FILE) == 0 || strcmp(file, "(no file)") == 0) - && (line == test_log_line || line == 0) - && (level == OSSL_CMP_LOG_INFO || level == -1) - && strcmp(msg, "ok\n") == 0; +#ifndef PEDANTIC + (TEST_str_eq(func, "execute_cmp_ctx_log_cb_test") + || TEST_str_eq(func, "(unknown function)")) && +#endif + (TEST_str_eq(file, OPENSSL_FILE) + || TEST_str_eq(file, "(no file)")) + && (TEST_int_eq(line, test_log_line) || TEST_int_eq(line, 0)) + && (TEST_int_eq(level, OSSL_CMP_LOG_INFO) || TEST_int_eq(level, -1)) + && TEST_str_eq(msg, "ok"); return 1; } -#endif static int execute_cmp_ctx_log_cb_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) { int res = 1; -#if !defined OPENSSL_NO_TRACE && !defined OPENSSL_NO_STDIO OSSL_CMP_CTX *ctx = fixture->ctx; OSSL_TRACE(ALL, "this general trace message is not shown by default\n"); @@ -266,30 +285,29 @@ static int execute_cmp_ctx_log_cb_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, NULL))) { res = 0; } else { - OSSL_CMP_err("this should be printed as CMP error message"); - OSSL_CMP_warn("this should be printed as CMP warning message"); - OSSL_CMP_debug("this should not be printed"); + ossl_cmp_err(ctx, "this should be printed as CMP error message"); + ossl_cmp_warn(ctx, "this should be printed as CMP warning message"); + ossl_cmp_debug(ctx, "this should not be printed"); TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_DEBUG)); - OSSL_CMP_debug("this should be printed as CMP debug message"); + ossl_cmp_debug(ctx, "this should be printed as CMP debug message"); TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_INFO)); } if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, test_log_cb))) { res = 0; } else { test_log_line = OPENSSL_LINE + 1; - OSSL_CMP_log2(INFO, "%s%c", "o", 'k'); + ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k'); if (!TEST_int_eq(test_log_cb_res, 1)) res = 0; OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_ERR); test_log_cb_res = -1; /* callback should not be called at all */ test_log_line = OPENSSL_LINE + 1; - OSSL_CMP_log2(INFO, "%s%c", "o", 'k'); + ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k'); if (!TEST_int_eq(test_log_cb_res, -1)) res = 0; } OSSL_CMP_log_close(); OSSL_CMP_log_close(); /* multiple calls should be harmless */ -#endif return res; } @@ -300,15 +318,17 @@ static int test_cmp_ctx_log_cb(void) return result; } -static BIO *test_http_cb(OSSL_CMP_CTX *ctx, BIO *hbio, unsigned long detail) +#ifndef OPENSSL_NO_HTTP +static BIO *test_http_cb(BIO *bio, void *arg, int use_ssl, int detail) { return NULL; } +#endif -static int test_transfer_cb(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *req, - OSSL_CMP_MSG **res) +static OSSL_CMP_MSG *test_transfer_cb(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req) { - return 0; + return NULL; } static int test_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, @@ -329,13 +349,13 @@ typedef OSSL_CMP_CTX CMP_CTX; /* prevents rewriting type name by below macro */ #define DEFINE_SET_GET_BASE_TEST(PREFIX, SETN, GETN, DUP, FIELD, TYPE, ERR, \ DEFAULT, NEW, FREE) \ -static int execute_CTX_##SETN##_##GETN##_##FIELD( \ - OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ +static int \ +execute_CTX_##SETN##_##GETN##_##FIELD(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ { \ CMP_CTX *ctx = fixture->ctx; \ int (*set_fn)(CMP_CTX *ctx, TYPE) = \ (int (*)(CMP_CTX *ctx, TYPE))PREFIX##_##SETN##_##FIELD; \ - /* need type cast in above assignment because TYPE arg sometimes is const */ \ + /* need type cast in above assignment as TYPE arg sometimes is const */ \ TYPE (*get_fn)(const CMP_CTX *ctx) = OSSL_CMP_CTX_##GETN##_##FIELD; \ TYPE val1_to_free = NEW; \ TYPE val1 = val1_to_free; \ @@ -385,6 +405,7 @@ static int execute_CTX_##SETN##_##GETN##_##FIELD( \ } else { \ if (DUP && val1_read == val1) { \ TEST_error("first set did not dup the value"); \ + val1_read = 0; \ res = 0; \ } \ if (DEFAULT(val1_read)) { \ @@ -413,6 +434,7 @@ static int execute_CTX_##SETN##_##GETN##_##FIELD( \ } else { \ if (DUP && val2_read == val2) { \ TEST_error("second set did not dup the value"); \ + val2_read = 0; \ res = 0; \ } \ if (val2 == val1) { \ @@ -439,9 +461,10 @@ static int execute_CTX_##SETN##_##GETN##_##FIELD( \ TEST_error("third get gave different value"); \ res = 0; \ } \ - } else { \ + } else { \ if (DUP && val3_read == val2_read) { \ TEST_error("third get did not create a new dup"); \ + val3_read = 0; \ res = 0; \ } \ } \ @@ -467,17 +490,20 @@ static int test_CTX_##SETN##_##GETN##_##FIELD(void) \ return result; \ } -static char *char_new(void) { +static char *char_new(void) +{ return OPENSSL_strdup("test"); } -static void char_free(char *val) { +static void char_free(char *val) +{ OPENSSL_free(val); } #define EMPTY_SK_X509(x) ((x) == NULL || sk_X509_num(x) == 0) -static X509_STORE *X509_STORE_new_1(void) { +static X509_STORE *X509_STORE_new_1(void) +{ X509_STORE *store = X509_STORE_new(); if (store != NULL) @@ -485,40 +511,45 @@ static X509_STORE *X509_STORE_new_1(void) { return store; } -#define DEFAULT_STORE(x) ((x) == NULL \ - || X509_VERIFY_PARAM_get_flags(X509_STORE_get0_param(x)) == 0) +#define DEFAULT_STORE(x) \ + ((x) == NULL || X509_VERIFY_PARAM_get_flags(X509_STORE_get0_param(x)) == 0) #define IS_NEG(x) ((x) < 0) #define IS_0(x) ((x) == 0) /* for any type */ -#define IS_DEFAULT_PORT(x) ((x) == OSSL_CMP_DEFAULT_PORT) #define DROP(x) (void)(x) /* dummy free() for non-pointer and function types */ -#define ERR(x) (CMPerr(0, CMP_R_NULL_ARGUMENT), x) +#define RET_IF_NULL_ARG(ctx, ret) \ + if (ctx == NULL) { \ + ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT); \ + return ret; \ + } +/* cannot use PREFIX instead of OSSL_CMP and CTX due to #define OSSL_CMP_CTX */ #define DEFINE_SET_GET_TEST(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \ - TYPE*, NULL, IS_0, TYPE##_new(), TYPE##_free) + TYPE *, NULL, IS_0, TYPE##_new(), TYPE##_free) #define DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FIELD, ELEM_TYPE, \ DEFAULT, NEW, FREE) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, 1, FIELD, \ - STACK_OF(ELEM_TYPE)*, NULL, DEFAULT, NEW, FREE) + STACK_OF(ELEM_TYPE)*, NULL, DEFAULT, NEW, FREE) #define DEFINE_SET_GET_SK_TEST(OSSL_CMP, CTX, N, M, FIELD, T) \ DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FIELD, T, \ - IS_0, sk_##T##_new_null(), sk_##T##_free) + IS_0, sk_##T##_new_null(), sk_##T##_free) #define DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, N, M, FNAME) \ DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FNAME, X509, \ - EMPTY_SK_X509, \ - sk_X509_new_1(), sk_X509_pop_X509_free) + EMPTY_SK_X509, \ + sk_X509_new_1(), sk_X509_pop_X509_free) #define DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE, \ DEFAULT) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \ - TYPE*, NULL, DEFAULT, TYPE##_new(), TYPE##_free) + TYPE *, NULL, DEFAULT, TYPE##_new(), TYPE##_free) #define DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, N, DUP, FIELD, TYPE, DEFAULT) \ static TYPE *OSSL_CMP_CTX_get0_##FIELD(const CMP_CTX *ctx) \ { \ - return ctx == NULL ? ERR(NULL) : ctx->FIELD; \ + RET_IF_NULL_ARG(ctx, NULL); \ + return (TYPE *)ctx->FIELD; \ } \ DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, N, 0, DUP, FIELD, TYPE, DEFAULT) #define DEFINE_SET_TEST(OSSL_CMP, CTX, N, DUP, FIELD, TYPE) \ @@ -527,38 +558,41 @@ static X509_STORE *X509_STORE_new_1(void) { #define DEFINE_SET_SK_TEST(OSSL_CMP, CTX, N, FIELD, TYPE) \ static STACK_OF(TYPE) *OSSL_CMP_CTX_get0_##FIELD(const CMP_CTX *ctx) \ { \ - return ctx == NULL ? ERR(NULL) : ctx->FIELD; \ + RET_IF_NULL_ARG(ctx, NULL); \ + return ctx->FIELD; \ } \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get0, 1, FIELD, \ - STACK_OF(TYPE)*, NULL, IS_0, \ - sk_##TYPE##_new_null(), sk_##TYPE##_free) + STACK_OF(TYPE)*, NULL, IS_0, \ + sk_##TYPE##_new_null(), sk_##TYPE##_free) +#ifndef OPENSSL_NO_HTTP +typedef OSSL_HTTP_bio_cb_t OSSL_CMP_http_cb_t; +#endif #define DEFINE_SET_CB_TEST(FIELD) \ - static OSSL_cmp_##FIELD##_t \ - OSSL_CMP_CTX_get_##FIELD(const CMP_CTX *ctx) \ + static OSSL_CMP_##FIELD##_t OSSL_CMP_CTX_get_##FIELD(const CMP_CTX *ctx) \ { \ - if (ctx == NULL) \ - CMPerr(0, CMP_R_NULL_ARGUMENT); \ - return ctx == NULL ? NULL /* cannot use ERR(NULL) here */ : ctx->FIELD;\ + RET_IF_NULL_ARG(ctx, NULL); \ + return ctx->FIELD; \ } \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, \ - OSSL_cmp_##FIELD##_t, NULL, IS_0, \ - test_##FIELD, DROP) + OSSL_CMP_##FIELD##_t, NULL, IS_0, \ + test_##FIELD, DROP) #define DEFINE_SET_GET_P_VOID_TEST(FIELD) \ - DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, void*, \ - NULL, IS_0, ((void *)1), DROP) + DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, void *, \ + NULL, IS_0, ((void *)1), DROP) #define DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, DEFAULT) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set, get, 0, FIELD, int, -1, \ - DEFAULT, 1, DROP) + DEFAULT, 1, DROP) #define DEFINE_SET_GET_INT_TEST(OSSL_CMP, CTX, FIELD) \ DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, IS_NEG) -#define DEFINE_SET_PORT_TEST(FIELD) \ +#define DEFINE_SET_INT_TEST(FIELD) \ static int OSSL_CMP_CTX_get_##FIELD(const CMP_CTX *ctx) \ { \ - return ctx == NULL ? ERR(-1) : ctx->FIELD; \ + RET_IF_NULL_ARG(ctx, -1); \ + return ctx->FIELD; \ } \ - DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, IS_DEFAULT_PORT) + DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, IS_0) #define DEFINE_SET_GET_ARG_FN(SETN, GETN, FIELD, ARG, T) \ static int OSSL_CMP_CTX_##SETN##_##FIELD##_##ARG(CMP_CTX *ctx, T val) \ @@ -575,13 +609,15 @@ static X509_STORE *X509_STORE_new_1(void) { static int OSSL_CMP_CTX_##SETN##_##FIELD##_str(CMP_CTX *ctx, char *val)\ { \ return OSSL_CMP_CTX_##SETN##_##FIELD(ctx, (unsigned char *)val, \ - strlen(val)); \ + strlen(val)); \ } \ \ static char *OSSL_CMP_CTX_get1_##FIELD##_str(const CMP_CTX *ctx) \ { \ - const ASN1_OCTET_STRING *bytes = ctx == NULL ? ERR(NULL) : ctx->FIELD; \ + const ASN1_OCTET_STRING *bytes = NULL; \ \ + RET_IF_NULL_ARG(ctx, NULL); \ + bytes = ctx->FIELD; \ return bytes == NULL ? NULL : \ OPENSSL_strndup((char *)bytes->data, bytes->length); \ } @@ -590,8 +626,9 @@ static X509_STORE *X509_STORE_new_1(void) { #define push0 0 #define push1 1 #define DEFINE_PUSH_BASE_TEST(PUSHN, DUP, FIELD, ELEM, TYPE, T, \ - DEFAULT, NEW, FREE) \ -static TYPE sk_top_##FIELD(const CMP_CTX *ctx) { \ + DEFAULT, NEW, FREE) \ +static TYPE sk_top_##FIELD(const CMP_CTX *ctx) \ +{ \ return sk_##T##_value(ctx->FIELD, sk_##T##_num(ctx->FIELD) - 1); \ } \ \ @@ -600,7 +637,9 @@ static int execute_CTX_##PUSHN##_##ELEM(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ CMP_CTX *ctx = fixture->ctx; \ int (*push_fn)(CMP_CTX *ctx, TYPE) = \ (int (*)(CMP_CTX *ctx, TYPE))OSSL_CMP_CTX_##PUSHN##_##ELEM; \ - /* need type cast in above assignment because TYPE arg sometimes is const */ \ + /* \ + * need type cast in above assignment because TYPE arg sometimes is const \ + */ \ int n_elem = sk_##T##_num(ctx->FIELD); \ STACK_OF(TYPE) field_read; \ TYPE val1_to_free = NEW; \ @@ -651,7 +690,7 @@ static int execute_CTX_##PUSHN##_##ELEM(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ } \ \ if (!(*push_fn)(ctx, val2)) { \ - TEST_error("pushting second value failed"); \ + TEST_error("pushing second value failed"); \ res = 0; \ } \ if (PUSHN == 0) \ @@ -677,7 +716,7 @@ static int execute_CTX_##PUSHN##_##ELEM(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ res = 0; \ } \ } \ - /* this does not check that all remaining fields and elems are untouched */\ + /* this does not check if all remaining fields and elems are untouched */ \ \ if (!TEST_int_eq(ERR_peek_error(), 0)) \ res = 0; \ @@ -695,57 +734,55 @@ static int test_CTX_##PUSHN##_##ELEM(void) \ } \ #define DEFINE_PUSH_TEST(N, DUP, FIELD, ELEM, TYPE) \ - DEFINE_PUSH_BASE_TEST(push##N, DUP, FIELD, ELEM, TYPE*, TYPE, \ - IS_0, TYPE##_new(), TYPE##_free) + DEFINE_PUSH_BASE_TEST(push##N, DUP, FIELD, ELEM, TYPE *, TYPE, \ + IS_0, TYPE##_new(), TYPE##_free) void cleanup_tests(void) { return; } -DEFINE_SET_GET_ARG_FN(set, get, option, 16, int) - /* option == OSSL_CMP_OPT_IGNORE_KEYUSAGE */ -DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, option_16, int, -1, IS_0, \ - 1 /* true */, DROP) +DEFINE_SET_GET_ARG_FN(set, get, option, 35, int) /* OPT_IGNORE_KEYUSAGE */ +DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, option_35, int, -1, IS_0, \ + 1 /* true */, DROP) -#ifndef OPENSSL_NO_TRACE DEFINE_SET_CB_TEST(log_cb) -#endif DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, serverPath, char, IS_0) -DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, serverName, char) -DEFINE_SET_PORT_TEST(serverPort) -DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, proxyName, char) -DEFINE_SET_PORT_TEST(proxyPort) +DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, server, char) +DEFINE_SET_INT_TEST(serverPort) +DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, proxy, char) +DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, no_proxy, char) +#ifndef OPENSSL_NO_HTTP DEFINE_SET_CB_TEST(http_cb) DEFINE_SET_GET_P_VOID_TEST(http_cb_arg) +#endif DEFINE_SET_CB_TEST(transfer_cb) DEFINE_SET_GET_P_VOID_TEST(transfer_cb_arg) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, srvCert, X509) -DEFINE_SET_TEST(ossl_cmp, ctx, 0, 0, validatedSrvCert, X509) +DEFINE_SET_GET_TEST(ossl_cmp, ctx, 1, 0, 0, validatedSrvCert, X509) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, expected_sender, X509_NAME) -DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set0, get0, 0, trustedStore, - X509_STORE*, NULL, - DEFAULT_STORE, X509_STORE_new_1(), X509_STORE_free) -DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, 1, 0, untrusted_certs) +DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set0, get0, 0, trusted, + X509_STORE *, NULL, + DEFAULT_STORE, X509_STORE_new_1(), X509_STORE_free) +DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, 1, 0, untrusted) -DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, clCert, X509) +DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, cert, X509) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, pkey, EVP_PKEY) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, recipient, X509_NAME) DEFINE_PUSH_TEST(0, 0, geninfo_ITAVs, geninfo_ITAV, OSSL_CMP_ITAV) DEFINE_SET_SK_TEST(OSSL_CMP, CTX, 1, extraCertsOut, X509) -DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 1, EVP_PKEY*) /* priv == 1 */ +DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 1, EVP_PKEY *) /* priv == 1 */ DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_1, EVP_PKEY) -DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 0, EVP_PKEY*) /* priv == 0 */ +DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 0, EVP_PKEY *) /* priv == 0 */ DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_0, EVP_PKEY) DEFINE_SET_GET1_STR_FN(set1, referenceValue) -DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, referenceValue_str, - char, IS_0) +DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, referenceValue_str, char, + IS_0) DEFINE_SET_GET1_STR_FN(set1, secretValue) -DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, secretValue_str, - char, IS_0) +DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, secretValue_str, char, IS_0) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, issuer, X509_NAME) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, subjectName, X509_NAME) #ifdef ISSUE_9504_RESOLVED @@ -765,73 +802,81 @@ DEFINE_SET_GET_INT_TEST(ossl_cmp, ctx, status) DEFINE_SET_GET_SK_TEST(ossl_cmp, ctx, 0, 0, statusString, ASN1_UTF8STRING) DEFINE_SET_GET_INT_TEST(ossl_cmp, ctx, failInfoCode) DEFINE_SET_GET_TEST(ossl_cmp, ctx, 0, 0, 0, newCert, X509) +DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, newChain) DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, caPubs) DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, extraCertsIn) -DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, transactionID, - ASN1_OCTET_STRING, IS_0) +DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, transactionID, ASN1_OCTET_STRING, + IS_0) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, senderNonce, ASN1_OCTET_STRING) DEFINE_SET_TEST(ossl_cmp, ctx, 1, 1, recipNonce, ASN1_OCTET_STRING) int setup_tests(void) { - /* OSSL_CMP_CTX_new() is tested by set_up() */ - /* OSSL_CMP_CTX_free() is tested by tear_down() */ + if (!test_skip_common_options()) { + TEST_error("Error parsing test options\n"); + return 0; + } + + /* also tests OSSL_CMP_CTX_new() and OSSL_CMP_CTX_free(): */ + ADD_TEST(test_CTX_libctx_propq); ADD_TEST(test_CTX_reinit); -/* various CMP options: */ - ADD_TEST(test_CTX_set_get_option_16); -/* CMP-specific callback for logging and outputting the error queue: */ -#ifndef OPENSSL_NO_TRACE + /* various CMP options: */ + ADD_TEST(test_CTX_set_get_option_35); + /* CMP-specific callback for logging and outputting the error queue: */ ADD_TEST(test_CTX_set_get_log_cb); -#endif /* * also tests OSSL_CMP_log_open(), OSSL_CMP_CTX_set_log_verbosity(), - * OSSL_CMP_err(), OSSL_CMP_warn(), * OSSL_CMP_debug(), - * OSSL_CMP_log2(), ossl_cmp_log_parse_metadata(), and OSSL_CMP_log_close() + * ossl_cmp_err(), ossl_cmp_warn(), * ossl_cmp_debug(), + * ossl_cmp_log2(), ossl_cmp_log_parse_metadata(), and OSSL_CMP_log_close() * with OSSL_CMP_severity OSSL_CMP_LOG_ERR/WARNING/DEBUG/INFO: */ ADD_TEST(test_cmp_ctx_log_cb); #if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT) - /* also tests OSSL_CMP_CTX_set_log_cb(), OSSL_CMP_print_errors_cb(), - ossl_cmp_add_error_txt(), and the macros - ossl_cmp_add_error_data and ossl_cmp_add_error_line: - */ + /* + * also tests OSSL_CMP_CTX_set_log_cb(), OSSL_CMP_print_errors_cb(), + * and the macros ossl_cmp_add_error_data and ossl_cmp_add_error_line: + */ ADD_TEST(test_CTX_print_errors); #endif -/* message transfer: */ + /* message transfer: */ ADD_TEST(test_CTX_set1_get0_serverPath); - ADD_TEST(test_CTX_set1_get0_serverName); + ADD_TEST(test_CTX_set1_get0_server); ADD_TEST(test_CTX_set_get_serverPort); - ADD_TEST(test_CTX_set1_get0_proxyName); - ADD_TEST(test_CTX_set_get_proxyPort); + ADD_TEST(test_CTX_set1_get0_proxy); + ADD_TEST(test_CTX_set1_get0_no_proxy); +#ifndef OPENSSL_NO_HTTP ADD_TEST(test_CTX_set_get_http_cb); ADD_TEST(test_CTX_set_get_http_cb_arg); +#endif ADD_TEST(test_CTX_set_get_transfer_cb); ADD_TEST(test_CTX_set_get_transfer_cb_arg); -/* server authentication: */ + /* server authentication: */ ADD_TEST(test_CTX_set1_get0_srvCert); - ADD_TEST(test_CTX_set0_get0_validatedSrvCert); + ADD_TEST(test_CTX_set1_get0_validatedSrvCert); ADD_TEST(test_CTX_set1_get0_expected_sender); - ADD_TEST(test_CTX_set0_get0_trustedStore); - ADD_TEST(test_CTX_set1_get0_untrusted_certs); -/* client authentication: */ - ADD_TEST(test_CTX_set1_get0_clCert); + ADD_TEST(test_CTX_set0_get0_trusted); + ADD_TEST(test_CTX_set1_get0_untrusted); + /* client authentication: */ + ADD_TEST(test_CTX_set1_get0_cert); ADD_TEST(test_CTX_set1_get0_pkey); /* the following two also test ossl_cmp_asn1_octet_string_set1_bytes(): */ ADD_TEST(test_CTX_set1_get1_referenceValue_str); ADD_TEST(test_CTX_set1_get1_secretValue_str); -/* CMP message header and extra certificates: */ + /* CMP message header and extra certificates: */ ADD_TEST(test_CTX_set1_get0_recipient); ADD_TEST(test_CTX_push0_geninfo_ITAV); ADD_TEST(test_CTX_set1_get0_extraCertsOut); -/* certificate template: */ + /* certificate template: */ ADD_TEST(test_CTX_set0_get0_newPkey_1); ADD_TEST(test_CTX_set0_get0_newPkey_0); ADD_TEST(test_CTX_set1_get0_issuer); ADD_TEST(test_CTX_set1_get0_subjectName); #ifdef ISSUE_9504_RESOLVED -/* test currently fails, see https://github.com/openssl/openssl/issues/9504 */ + /* + * test currently fails, see https://github.com/openssl/openssl/issues/9504 + */ ADD_TEST(test_CTX_push1_subjectAltName); #endif ADD_TEST(test_CTX_set0_get0_reqExtensions); @@ -839,28 +884,28 @@ int setup_tests(void) ADD_TEST(test_CTX_push0_policy); ADD_TEST(test_CTX_set1_get0_oldCert); #ifdef ISSUE_9504_RESOLVED -/* test currently fails, see https://github.com/openssl/openssl/issues/9504 */ + /* + * test currently fails, see https://github.com/openssl/openssl/issues/9504 + */ ADD_TEST(test_CTX_set1_get0_p10CSR); #endif -/* misc body contents: */ + /* misc body contents: */ ADD_TEST(test_CTX_push0_genm_ITAV); -/* certificate confirmation: */ + /* certificate confirmation: */ ADD_TEST(test_CTX_set_get_certConf_cb); ADD_TEST(test_CTX_set_get_certConf_cb_arg); -/* result fetching: */ + /* result fetching: */ ADD_TEST(test_CTX_set_get_status); ADD_TEST(test_CTX_set0_get0_statusString); ADD_TEST(test_CTX_set_get_failInfoCode); ADD_TEST(test_CTX_set0_get0_newCert); + ADD_TEST(test_CTX_set1_get1_newChain); ADD_TEST(test_CTX_set1_get1_caPubs); ADD_TEST(test_CTX_set1_get1_extraCertsIn); -/* exported for testing and debugging purposes: */ + /* exported for testing and debugging purposes: */ /* the following three also test ossl_cmp_asn1_octet_string_set1(): */ ADD_TEST(test_CTX_set1_get0_transactionID); ADD_TEST(test_CTX_set1_get0_senderNonce); ADD_TEST(test_CTX_set1_get0_recipNonce); - - /* TODO ossl_cmp_build_cert_chain() will be tested with cmp_protect.c*/ - return 1; }