|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
|
* Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
|
|
|
* this file except in compliance with the License. You can obtain a copy
|
|
|
|
@ -103,6 +103,43 @@ static int self_test_on_load(const OSSL_PARAM params[], void *arg)
|
|
|
|
|
return self_test_events(params, arg, "On Loading", 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int get_provider_params(const OSSL_PROVIDER *prov)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
|
OSSL_PARAM params[5];
|
|
|
|
|
char *name, *version, *buildinfo;
|
|
|
|
|
int status;
|
|
|
|
|
const OSSL_PARAM *gettable, *p;
|
|
|
|
|
|
|
|
|
|
if (!TEST_ptr(gettable = OSSL_PROVIDER_gettable_params(prov))
|
|
|
|
|
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_NAME))
|
|
|
|
|
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_VERSION))
|
|
|
|
|
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_STATUS))
|
|
|
|
|
|| !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_BUILDINFO)))
|
|
|
|
|
goto end;
|
|
|
|
|
|
|
|
|
|
params[0] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_NAME, &name, 0);
|
|
|
|
|
params[1] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_VERSION,
|
|
|
|
|
&version, 0);
|
|
|
|
|
params[2] = OSSL_PARAM_construct_int(OSSL_PROV_PARAM_STATUS, &status);
|
|
|
|
|
params[3] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_BUILDINFO,
|
|
|
|
|
&buildinfo, 0);
|
|
|
|
|
params[4] = OSSL_PARAM_construct_end();
|
|
|
|
|
OSSL_PARAM_set_all_unmodified(params);
|
|
|
|
|
if (!TEST_true(OSSL_PROVIDER_get_params(prov, params)))
|
|
|
|
|
goto end;
|
|
|
|
|
if (!TEST_true(OSSL_PARAM_modified(params + 0))
|
|
|
|
|
|| !TEST_true(OSSL_PARAM_modified(params + 1))
|
|
|
|
|
|| !TEST_true(OSSL_PARAM_modified(params + 2))
|
|
|
|
|
|| !TEST_true(OSSL_PARAM_modified(params + 3))
|
|
|
|
|
|| !TEST_true(status == 1))
|
|
|
|
|
goto end;
|
|
|
|
|
|
|
|
|
|
ret = 1;
|
|
|
|
|
end:
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int test_provider_status(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
@ -113,6 +150,8 @@ static int test_provider_status(void)
|
|
|
|
|
|
|
|
|
|
if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
|
|
|
|
|
goto err;
|
|
|
|
|
if (!get_provider_params(prov))
|
|
|
|
|
goto err;
|
|
|
|
|
|
|
|
|
|
/* Test that the provider status is ok */
|
|
|
|
|
params[0] = OSSL_PARAM_construct_uint(OSSL_PROV_PARAM_STATUS, &status);
|
|
|
|
@ -149,6 +188,18 @@ err:
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int test_provider_gettable_params(void)
|
|
|
|
|
{
|
|
|
|
|
OSSL_PROVIDER *prov;
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
|
|
|
|
|
return 0;
|
|
|
|
|
ret = get_provider_params(prov);
|
|
|
|
|
OSSL_PROVIDER_unload(prov);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int setup_tests(void)
|
|
|
|
|
{
|
|
|
|
|
OPTION_CHOICE o;
|
|
|
|
@ -173,13 +224,22 @@ int setup_tests(void)
|
|
|
|
|
libctx = OSSL_LIB_CTX_new();
|
|
|
|
|
if (libctx == NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
self_test_args.count = 0;
|
|
|
|
|
OSSL_SELF_TEST_set_callback(libctx, self_test_on_load, &self_test_args);
|
|
|
|
|
|
|
|
|
|
if (!OSSL_LIB_CTX_load_config(libctx, config_file)) {
|
|
|
|
|
opt_printf_stderr("Failed to load config\n");
|
|
|
|
|
return 0;
|
|
|
|
|
if (strcmp(provider_name, "fips") == 0) {
|
|
|
|
|
self_test_args.count = 0;
|
|
|
|
|
OSSL_SELF_TEST_set_callback(libctx, self_test_on_load, &self_test_args);
|
|
|
|
|
if (!OSSL_LIB_CTX_load_config(libctx, config_file)) {
|
|
|
|
|
opt_printf_stderr("Failed to load config\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
ADD_TEST(test_provider_status);
|
|
|
|
|
} else {
|
|
|
|
|
ADD_TEST(test_provider_gettable_params);
|
|
|
|
|
}
|
|
|
|
|
ADD_TEST(test_provider_status);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cleanup_tests(void)
|
|
|
|
|
{
|
|
|
|
|
OSSL_LIB_CTX_free(libctx);
|
|
|
|
|
}
|
|
|
|
|