Home | History | Annotate | Line # | Download | only in test
      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 const char *newkey_f;
     15 static const char *server_cert_f;
     16 static const char *pkcs10_f;
     17 
     18 typedef struct test_fixture {
     19     const char *test_case_name;
     20     OSSL_CMP_CTX *cmp_ctx;
     21     /* for msg create tests */
     22     int bodytype;
     23     int err_code;
     24     /* for certConf */
     25     int fail_info;
     26     /* for protection tests */
     27     OSSL_CMP_MSG *msg;
     28     int expected;
     29     /* for error and response messages */
     30     OSSL_CMP_PKISI *si;
     31 } CMP_MSG_TEST_FIXTURE;
     32 
     33 static OSSL_LIB_CTX *libctx = NULL;
     34 static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
     35 
     36 static unsigned char ref[CMP_TEST_REFVALUE_LENGTH];
     37 
     38 static void tear_down(CMP_MSG_TEST_FIXTURE *fixture)
     39 {
     40     OSSL_CMP_CTX_free(fixture->cmp_ctx);
     41     OSSL_CMP_MSG_free(fixture->msg);
     42     OSSL_CMP_PKISI_free(fixture->si);
     43     OPENSSL_free(fixture);
     44 }
     45 
     46 #define SET_OPT_UNPROTECTED_SEND(ctx, val) \
     47     OSSL_CMP_CTX_set_option((ctx), OSSL_CMP_OPT_UNPROTECTED_SEND, (val))
     48 static CMP_MSG_TEST_FIXTURE *set_up(const char *const test_case_name)
     49 {
     50     CMP_MSG_TEST_FIXTURE *fixture;
     51 
     52     if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
     53         return NULL;
     54     fixture->test_case_name = test_case_name;
     55 
     56     if (!TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new(libctx, NULL))
     57         || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 1))
     58         || !TEST_true(OSSL_CMP_CTX_set1_referenceValue(fixture->cmp_ctx,
     59             ref, sizeof(ref)))) {
     60         tear_down(fixture);
     61         return NULL;
     62     }
     63     return fixture;
     64 }
     65 
     66 static EVP_PKEY *newkey = NULL;
     67 static X509 *cert = NULL;
     68 
     69 #define EXECUTE_MSG_CREATION_TEST(expr)                                                                                                  \
     70     do {                                                                                                                                 \
     71         OSSL_CMP_MSG *msg = NULL;                                                                                                        \
     72         int good = fixture->expected != 0 ? TEST_ptr(msg = (expr)) && TEST_true(valid_asn1_encoding(msg)) : TEST_ptr_null(msg = (expr)); \
     73                                                                                                                                          \
     74         OSSL_CMP_MSG_free(msg);                                                                                                          \
     75         ERR_print_errors_fp(stderr);                                                                                                     \
     76         return good;                                                                                                                     \
     77     } while (0)
     78 
     79 /*-
     80  * The following tests call a cmp message creation function.
     81  * if fixture->expected != 0:
     82  *         returns 1 if the message is created and syntactically correct.
     83  * if fixture->expected == 0
     84  *         returns 1 if message creation returns NULL
     85  */
     86 static int execute_certreq_create_test(CMP_MSG_TEST_FIXTURE *fixture)
     87 {
     88     EXECUTE_MSG_CREATION_TEST(ossl_cmp_certreq_new(fixture->cmp_ctx,
     89         fixture->bodytype,
     90         NULL));
     91 }
     92 
     93 static int execute_errormsg_create_test(CMP_MSG_TEST_FIXTURE *fixture)
     94 {
     95     EXECUTE_MSG_CREATION_TEST(ossl_cmp_error_new(fixture->cmp_ctx, fixture->si,
     96         fixture->err_code,
     97         "details", 0));
     98 }
     99 
    100 static int execute_rr_create_test(CMP_MSG_TEST_FIXTURE *fixture)
    101 {
    102     EXECUTE_MSG_CREATION_TEST(ossl_cmp_rr_new(fixture->cmp_ctx));
    103 }
    104 
    105 static int execute_certconf_create_test(CMP_MSG_TEST_FIXTURE *fixture)
    106 {
    107     EXECUTE_MSG_CREATION_TEST(ossl_cmp_certConf_new(fixture->cmp_ctx, OSSL_CMP_CERTREQID,
    108         fixture->fail_info, NULL));
    109 }
    110 
    111 static int execute_genm_create_test(CMP_MSG_TEST_FIXTURE *fixture)
    112 {
    113     EXECUTE_MSG_CREATION_TEST(ossl_cmp_genm_new(fixture->cmp_ctx));
    114 }
    115 
    116 static int execute_pollreq_create_test(CMP_MSG_TEST_FIXTURE *fixture)
    117 {
    118     EXECUTE_MSG_CREATION_TEST(ossl_cmp_pollReq_new(fixture->cmp_ctx, 4711));
    119 }
    120 
    121 static int execute_pkimessage_create_test(CMP_MSG_TEST_FIXTURE *fixture)
    122 {
    123     EXECUTE_MSG_CREATION_TEST(ossl_cmp_msg_create(fixture->cmp_ctx, fixture->bodytype));
    124 }
    125 
    126 static int set1_newPkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey)
    127 {
    128     if (!EVP_PKEY_up_ref(pkey))
    129         return 0;
    130 
    131     if (!OSSL_CMP_CTX_set0_newPkey(ctx, 1, pkey)) {
    132         EVP_PKEY_free(pkey);
    133         return 0;
    134     }
    135     return 1;
    136 }
    137 
    138 static int test_cmp_create_ir_protection_set(void)
    139 {
    140     OSSL_CMP_CTX *ctx;
    141     unsigned char secret[16];
    142 
    143     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    144 
    145     ctx = fixture->cmp_ctx;
    146     fixture->bodytype = OSSL_CMP_PKIBODY_IR;
    147     fixture->err_code = -1;
    148     fixture->expected = 1;
    149     if (!TEST_int_eq(1, RAND_bytes_ex(libctx, secret, sizeof(secret), 0))
    150         || !TEST_true(SET_OPT_UNPROTECTED_SEND(ctx, 0))
    151         || !TEST_true(set1_newPkey(ctx, newkey))
    152         || !TEST_true(OSSL_CMP_CTX_set1_secretValue(ctx, secret,
    153             sizeof(secret)))) {
    154         tear_down(fixture);
    155         fixture = NULL;
    156     }
    157     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    158     return result;
    159 }
    160 
    161 static int test_cmp_create_ir_protection_fails(void)
    162 {
    163     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    164     fixture->bodytype = OSSL_CMP_PKIBODY_IR;
    165     fixture->err_code = -1;
    166     fixture->expected = 0;
    167     if (!TEST_true(OSSL_CMP_CTX_set1_pkey(fixture->cmp_ctx, newkey))
    168         || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0))
    169         /* newkey used by default for signing does not match cert: */
    170         || !TEST_true(OSSL_CMP_CTX_set1_cert(fixture->cmp_ctx, cert))) {
    171         tear_down(fixture);
    172         fixture = NULL;
    173     }
    174     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    175     return result;
    176 }
    177 
    178 static int test_cmp_create_cr_without_key(void)
    179 {
    180     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    181     fixture->bodytype = OSSL_CMP_PKIBODY_CR;
    182     fixture->err_code = -1;
    183     fixture->expected = 0;
    184     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    185     return result;
    186 }
    187 
    188 static int test_cmp_create_cr(void)
    189 {
    190     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    191     fixture->bodytype = OSSL_CMP_PKIBODY_CR;
    192     fixture->err_code = -1;
    193     fixture->expected = 1;
    194     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
    195         tear_down(fixture);
    196         fixture = NULL;
    197     }
    198     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    199     return result;
    200 }
    201 
    202 static int test_cmp_create_certreq_with_invalid_bodytype(void)
    203 {
    204     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    205     fixture->bodytype = OSSL_CMP_PKIBODY_RR;
    206     fixture->err_code = -1;
    207     fixture->expected = 0;
    208     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
    209         tear_down(fixture);
    210         fixture = NULL;
    211     }
    212     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    213     return result;
    214 }
    215 
    216 static int test_cmp_create_p10cr(void)
    217 {
    218     OSSL_CMP_CTX *ctx;
    219     X509_REQ *p10cr = NULL;
    220 
    221     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    222     ctx = fixture->cmp_ctx;
    223     fixture->bodytype = OSSL_CMP_PKIBODY_P10CR;
    224     fixture->err_code = CMP_R_ERROR_CREATING_CERTREQ;
    225     fixture->expected = 1;
    226     if (!TEST_ptr(p10cr = load_csr_der(pkcs10_f, libctx))
    227         || !TEST_true(set1_newPkey(ctx, newkey))
    228         || !TEST_true(OSSL_CMP_CTX_set1_p10CSR(ctx, p10cr))) {
    229         tear_down(fixture);
    230         fixture = NULL;
    231     }
    232     X509_REQ_free(p10cr);
    233     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    234     return result;
    235 }
    236 
    237 static int test_cmp_create_p10cr_null(void)
    238 {
    239     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    240     fixture->bodytype = OSSL_CMP_PKIBODY_P10CR;
    241     fixture->err_code = CMP_R_ERROR_CREATING_CERTREQ;
    242     fixture->expected = 0;
    243     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
    244         tear_down(fixture);
    245         fixture = NULL;
    246     }
    247     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    248     return result;
    249 }
    250 
    251 static int test_cmp_create_kur(void)
    252 {
    253     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    254     fixture->bodytype = OSSL_CMP_PKIBODY_KUR;
    255     fixture->err_code = -1;
    256     fixture->expected = 1;
    257     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))
    258         || !TEST_true(OSSL_CMP_CTX_set1_oldCert(fixture->cmp_ctx, cert))) {
    259         tear_down(fixture);
    260         fixture = NULL;
    261     }
    262     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    263     return result;
    264 }
    265 
    266 static int test_cmp_create_kur_without_oldcert(void)
    267 {
    268     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    269     fixture->bodytype = OSSL_CMP_PKIBODY_KUR;
    270     fixture->err_code = -1;
    271     fixture->expected = 0;
    272     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
    273         tear_down(fixture);
    274         fixture = NULL;
    275     }
    276     EXECUTE_TEST(execute_certreq_create_test, tear_down);
    277     return result;
    278 }
    279 
    280 static int test_cmp_create_certconf(void)
    281 {
    282     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    283     fixture->fail_info = 0;
    284     fixture->expected = 1;
    285     if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
    286             X509_dup(cert)))) {
    287         tear_down(fixture);
    288         fixture = NULL;
    289     }
    290     EXECUTE_TEST(execute_certconf_create_test, tear_down);
    291     return result;
    292 }
    293 
    294 static int test_cmp_create_certconf_badAlg(void)
    295 {
    296     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    297     fixture->fail_info = 1 << OSSL_CMP_PKIFAILUREINFO_badAlg;
    298     fixture->expected = 1;
    299     if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
    300             X509_dup(cert)))) {
    301         tear_down(fixture);
    302         fixture = NULL;
    303     }
    304     EXECUTE_TEST(execute_certconf_create_test, tear_down);
    305     return result;
    306 }
    307 
    308 static int test_cmp_create_certconf_fail_info_max(void)
    309 {
    310     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    311     fixture->fail_info = 1 << OSSL_CMP_PKIFAILUREINFO_MAX;
    312     fixture->expected = 1;
    313     if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
    314             X509_dup(cert)))) {
    315         tear_down(fixture);
    316         fixture = NULL;
    317     }
    318     EXECUTE_TEST(execute_certconf_create_test, tear_down);
    319     return result;
    320 }
    321 
    322 static int test_cmp_create_error_msg(void)
    323 {
    324     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    325     fixture->si = OSSL_CMP_STATUSINFO_new(OSSL_CMP_PKISTATUS_rejection,
    326         OSSL_CMP_PKIFAILUREINFO_systemFailure,
    327         NULL);
    328     fixture->err_code = -1;
    329     fixture->expected = 1; /* expected: message creation is successful */
    330     if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
    331         tear_down(fixture);
    332         fixture = NULL;
    333     }
    334     EXECUTE_TEST(execute_errormsg_create_test, tear_down);
    335     return result;
    336 }
    337 
    338 static int test_cmp_create_pollreq(void)
    339 {
    340     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    341     fixture->expected = 1;
    342     EXECUTE_TEST(execute_pollreq_create_test, tear_down);
    343     return result;
    344 }
    345 
    346 static int test_cmp_create_rr(void)
    347 {
    348     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    349     fixture->expected = 1;
    350     if (!TEST_true(OSSL_CMP_CTX_set1_oldCert(fixture->cmp_ctx, cert))) {
    351         tear_down(fixture);
    352         fixture = NULL;
    353     }
    354     EXECUTE_TEST(execute_rr_create_test, tear_down);
    355     return result;
    356 }
    357 
    358 static int test_cmp_create_genm(void)
    359 {
    360     OSSL_CMP_ITAV *iv = NULL;
    361 
    362     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    363     fixture->expected = 1;
    364     iv = OSSL_CMP_ITAV_create(OBJ_nid2obj(NID_id_it_implicitConfirm), NULL);
    365     if (!TEST_ptr(iv)
    366         || !TEST_true(OSSL_CMP_CTX_push0_genm_ITAV(fixture->cmp_ctx, iv))) {
    367         OSSL_CMP_ITAV_free(iv);
    368         tear_down(fixture);
    369         fixture = NULL;
    370     }
    371 
    372     EXECUTE_TEST(execute_genm_create_test, tear_down);
    373     return result;
    374 }
    375 
    376 static int execute_certrep_create(CMP_MSG_TEST_FIXTURE *fixture)
    377 {
    378     OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
    379     OSSL_CMP_CERTREPMESSAGE *crepmsg = OSSL_CMP_CERTREPMESSAGE_new();
    380     OSSL_CMP_CERTRESPONSE *read_cresp, *cresp = OSSL_CMP_CERTRESPONSE_new();
    381     X509 *certfromresp = NULL;
    382     int res = 0;
    383 
    384     if (crepmsg == NULL || cresp == NULL)
    385         goto err;
    386     if (!ASN1_INTEGER_set(cresp->certReqId, 99))
    387         goto err;
    388     if ((cresp->certifiedKeyPair = OSSL_CMP_CERTIFIEDKEYPAIR_new()) == NULL)
    389         goto err;
    390     cresp->certifiedKeyPair->certOrEncCert->type = OSSL_CMP_CERTORENCCERT_CERTIFICATE;
    391     if ((cresp->certifiedKeyPair->certOrEncCert->value.certificate = X509_dup(cert)) == NULL
    392         || !sk_OSSL_CMP_CERTRESPONSE_push(crepmsg->response, cresp))
    393         goto err;
    394     cresp = NULL;
    395     read_cresp = ossl_cmp_certrepmessage_get0_certresponse(crepmsg, 99);
    396     if (!TEST_ptr(read_cresp))
    397         goto err;
    398     if (!TEST_ptr_null(ossl_cmp_certrepmessage_get0_certresponse(crepmsg, 88)))
    399         goto err;
    400     certfromresp = ossl_cmp_certresponse_get1_cert(ctx, read_cresp);
    401     if (certfromresp == NULL || !TEST_int_eq(X509_cmp(cert, certfromresp), 0))
    402         goto err;
    403 
    404     res = 1;
    405 err:
    406     X509_free(certfromresp);
    407     OSSL_CMP_CERTRESPONSE_free(cresp);
    408     OSSL_CMP_CERTREPMESSAGE_free(crepmsg);
    409     return res;
    410 }
    411 
    412 static int test_cmp_create_certrep(void)
    413 {
    414     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    415     EXECUTE_TEST(execute_certrep_create, tear_down);
    416     return result;
    417 }
    418 
    419 static int execute_rp_create(CMP_MSG_TEST_FIXTURE *fixture)
    420 {
    421     OSSL_CMP_PKISI *si = OSSL_CMP_STATUSINFO_new(33, 44, "a text");
    422     X509_NAME *issuer = X509_NAME_new();
    423     ASN1_INTEGER *serial = ASN1_INTEGER_new();
    424     OSSL_CRMF_CERTID *cid = NULL;
    425     OSSL_CMP_MSG *rpmsg = NULL;
    426     int res = 0;
    427 
    428     if (si == NULL || issuer == NULL || serial == NULL)
    429         goto err;
    430 
    431     if (!X509_NAME_add_entry_by_txt(issuer, "CN", MBSTRING_ASC,
    432             (unsigned char *)"The Issuer", -1, -1, 0)
    433         || !ASN1_INTEGER_set(serial, 99)
    434         || (cid = OSSL_CRMF_CERTID_gen(issuer, serial)) == NULL
    435         || (rpmsg = ossl_cmp_rp_new(fixture->cmp_ctx, si, cid, 1)) == NULL)
    436         goto err;
    437 
    438     if (!TEST_ptr(ossl_cmp_revrepcontent_get_CertId(rpmsg->body->value.rp, 0)))
    439         goto err;
    440 
    441     if (!TEST_ptr(ossl_cmp_revrepcontent_get_pkisi(rpmsg->body->value.rp, 0)))
    442         goto err;
    443 
    444     res = 1;
    445 err:
    446     ASN1_INTEGER_free(serial);
    447     X509_NAME_free(issuer);
    448     OSSL_CRMF_CERTID_free(cid);
    449     OSSL_CMP_PKISI_free(si);
    450     OSSL_CMP_MSG_free(rpmsg);
    451     return res;
    452 }
    453 
    454 static int test_cmp_create_rp(void)
    455 {
    456     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    457     EXECUTE_TEST(execute_rp_create, tear_down);
    458     return result;
    459 }
    460 
    461 static int execute_pollrep_create(CMP_MSG_TEST_FIXTURE *fixture)
    462 {
    463     OSSL_CMP_MSG *pollrep;
    464     int res = 0;
    465 
    466     pollrep = ossl_cmp_pollRep_new(fixture->cmp_ctx, 77, 2000);
    467     if (!TEST_ptr(pollrep))
    468         return 0;
    469     if (!TEST_ptr(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body->value.pollRep, 77)))
    470         goto err;
    471     if (!TEST_ptr_null(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body->value.pollRep, 88)))
    472         goto err;
    473 
    474     res = 1;
    475 err:
    476     OSSL_CMP_MSG_free(pollrep);
    477     return res;
    478 }
    479 
    480 static int test_cmp_create_pollrep(void)
    481 {
    482     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    483     EXECUTE_TEST(execute_pollrep_create, tear_down);
    484     return result;
    485 }
    486 
    487 static int test_cmp_pkimessage_create(int bodytype)
    488 {
    489     X509_REQ *p10cr = NULL;
    490 
    491     SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
    492 
    493     switch (fixture->bodytype = bodytype) {
    494     case OSSL_CMP_PKIBODY_P10CR:
    495         fixture->expected = 1;
    496         p10cr = load_csr_der(pkcs10_f, libctx);
    497         if (!TEST_true(OSSL_CMP_CTX_set1_p10CSR(fixture->cmp_ctx, p10cr))) {
    498             tear_down(fixture);
    499             fixture = NULL;
    500         }
    501         X509_REQ_free(p10cr);
    502         break;
    503     case OSSL_CMP_PKIBODY_IR:
    504     case OSSL_CMP_PKIBODY_IP:
    505     case OSSL_CMP_PKIBODY_CR:
    506     case OSSL_CMP_PKIBODY_CP:
    507     case OSSL_CMP_PKIBODY_KUR:
    508     case OSSL_CMP_PKIBODY_KUP:
    509     case OSSL_CMP_PKIBODY_RR:
    510     case OSSL_CMP_PKIBODY_RP:
    511     case OSSL_CMP_PKIBODY_PKICONF:
    512     case OSSL_CMP_PKIBODY_GENM:
    513     case OSSL_CMP_PKIBODY_GENP:
    514     case OSSL_CMP_PKIBODY_ERROR:
    515     case OSSL_CMP_PKIBODY_CERTCONF:
    516     case OSSL_CMP_PKIBODY_POLLREQ:
    517     case OSSL_CMP_PKIBODY_POLLREP:
    518         fixture->expected = 1;
    519         break;
    520     default:
    521         fixture->expected = 0;
    522         break;
    523     }
    524 
    525     EXECUTE_TEST(execute_pkimessage_create_test, tear_down);
    526     return result;
    527 }
    528 
    529 void cleanup_tests(void)
    530 {
    531     EVP_PKEY_free(newkey);
    532     X509_free(cert);
    533     OSSL_PROVIDER_unload(default_null_provider);
    534     OSSL_PROVIDER_unload(provider);
    535     OSSL_LIB_CTX_free(libctx);
    536 }
    537 
    538 #define USAGE "new.key server.crt pkcs10.der module_name [module_conf_file]\n"
    539 OPT_TEST_DECLARE_USAGE(USAGE)
    540 
    541 int setup_tests(void)
    542 {
    543     if (!test_skip_common_options()) {
    544         TEST_error("Error parsing test options\n");
    545         return 0;
    546     }
    547 
    548     if (!TEST_ptr(newkey_f = test_get_argument(0))
    549         || !TEST_ptr(server_cert_f = test_get_argument(1))
    550         || !TEST_ptr(pkcs10_f = test_get_argument(2))) {
    551         TEST_error("usage: cmp_msg_test %s", USAGE);
    552         return 0;
    553     }
    554 
    555     if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 3, USAGE))
    556         return 0;
    557 
    558     if (!TEST_ptr(newkey = load_pkey_pem(newkey_f, libctx))
    559         || !TEST_ptr(cert = load_cert_pem(server_cert_f, libctx))
    560         || !TEST_int_eq(1, RAND_bytes_ex(libctx, ref, sizeof(ref), 0))) {
    561         cleanup_tests();
    562         return 0;
    563     }
    564 
    565     /* Message creation tests */
    566     ADD_TEST(test_cmp_create_certreq_with_invalid_bodytype);
    567     ADD_TEST(test_cmp_create_ir_protection_fails);
    568     ADD_TEST(test_cmp_create_ir_protection_set);
    569     ADD_TEST(test_cmp_create_error_msg);
    570     ADD_TEST(test_cmp_create_certconf);
    571     ADD_TEST(test_cmp_create_certconf_badAlg);
    572     ADD_TEST(test_cmp_create_certconf_fail_info_max);
    573     ADD_TEST(test_cmp_create_kur);
    574     ADD_TEST(test_cmp_create_kur_without_oldcert);
    575     ADD_TEST(test_cmp_create_cr);
    576     ADD_TEST(test_cmp_create_cr_without_key);
    577     ADD_TEST(test_cmp_create_p10cr);
    578     ADD_TEST(test_cmp_create_p10cr_null);
    579     ADD_TEST(test_cmp_create_pollreq);
    580     ADD_TEST(test_cmp_create_rr);
    581     ADD_TEST(test_cmp_create_rp);
    582     ADD_TEST(test_cmp_create_genm);
    583     ADD_TEST(test_cmp_create_certrep);
    584     ADD_TEST(test_cmp_create_pollrep);
    585     ADD_ALL_TESTS_NOSUBTEST(test_cmp_pkimessage_create,
    586         OSSL_CMP_PKIBODY_POLLREP + 1);
    587     return 1;
    588 }
    589