X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=test%2Fp_test.c;h=dfd62ebd83911bbbb50ef84b80e639f849011506;hb=89cccbea51fa52a1e4784a9ece35d96e4dcbfd30;hp=bf13a0a070c70827a42d4b6ec15f8bb6bb8d8a40;hpb=6d872a838df78518508b5661d98da62a097317b1;p=openssl.git diff --git a/test/p_test.c b/test/p_test.c index bf13a0a070..dfd62ebd83 100644 --- a/test/p_test.c +++ b/test/p_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2020 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 @@ -27,49 +27,57 @@ #endif #include -#include +#include -static OSSL_core_get_param_types_fn *c_get_param_types = NULL; -static OSSL_core_get_params_fn *c_get_params = NULL; +static OSSL_FUNC_core_gettable_params_fn *c_gettable_params = NULL; +static OSSL_FUNC_core_get_params_fn *c_get_params = NULL; /* Tell the core what params we provide and what type they are */ -static const OSSL_ITEM p_param_types[] = { - { OSSL_PARAM_UTF8_STRING, "greeting" }, - { 0, NULL } +static const OSSL_PARAM p_param_types[] = { + { "greeting", OSSL_PARAM_UTF8_STRING, NULL, 0, 0 }, + { NULL, 0, NULL, 0, 0 } }; -static const OSSL_ITEM *p_get_param_types(const OSSL_PROVIDER *_) +/* This is a trick to ensure we define the provider functions correctly */ +static OSSL_FUNC_provider_gettable_params_fn p_gettable_params; +static OSSL_FUNC_provider_get_params_fn p_get_params; +static OSSL_FUNC_provider_get_reason_strings_fn p_get_reason_strings; + +static const OSSL_PARAM *p_gettable_params(void *_) { return p_param_types; } -static int p_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]) +static int p_get_params(void *vhand, OSSL_PARAM params[]) { - const OSSL_PARAM *p = params; + const OSSL_CORE_HANDLE *hand = vhand; + OSSL_PARAM *p = params; int ok = 1; for (; ok && p->key != NULL; p++) { if (strcmp(p->key, "greeting") == 0) { - static char *opensslv = NULL; - static char *provname = NULL; - static char *greeting = NULL; + static char *opensslv; + static char *provname; + static char *greeting; static OSSL_PARAM counter_request[] = { /* Known libcrypto provided parameters */ { "openssl-version", OSSL_PARAM_UTF8_PTR, - &opensslv, sizeof(&opensslv), NULL }, + &opensslv, sizeof(&opensslv), 0 }, { "provider-name", OSSL_PARAM_UTF8_PTR, - &provname, sizeof(&provname), NULL}, + &provname, sizeof(&provname), 0}, /* This might be present, if there's such a configuration */ { "greeting", OSSL_PARAM_UTF8_PTR, - &greeting, sizeof(&greeting), NULL }, + &greeting, sizeof(&greeting), 0 }, - { NULL, 0, NULL, 0, NULL } + { NULL, 0, NULL, 0, 0 } }; char buf[256]; size_t buf_l; - if (c_get_params(prov, counter_request)) { + opensslv = provname = greeting = NULL; + + if (c_get_params(hand, counter_request)) { if (greeting) { strcpy(buf, greeting); } else { @@ -83,9 +91,9 @@ static int p_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]) sprintf(buf, "Howdy stranger..."); } - *p->return_size = buf_l = strlen(buf) + 1; + p->return_size = buf_l = strlen(buf) + 1; if (p->data_size >= buf_l) - strncpy(p->data, buf, buf_l); + strcpy(p->data, buf); else ok = 0; } @@ -93,23 +101,36 @@ static int p_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]) return ok; } +static const OSSL_ITEM *p_get_reason_strings(void *_) +{ + static const OSSL_ITEM reason_strings[] = { + {1, "dummy reason string"}, + {0, NULL} + }; + + return reason_strings; +} + static const OSSL_DISPATCH p_test_table[] = { - { OSSL_FUNC_PROVIDER_GET_PARAM_TYPES, (void (*)(void))p_get_param_types }, + { OSSL_FUNC_PROVIDER_GETTABLE_PARAMS, (void (*)(void))p_gettable_params }, { OSSL_FUNC_PROVIDER_GET_PARAMS, (void (*)(void))p_get_params }, + { OSSL_FUNC_PROVIDER_GET_REASON_STRINGS, + (void (*)(void))p_get_reason_strings}, { 0, NULL } }; -int OSSL_provider_init(const OSSL_PROVIDER *provider, +int OSSL_provider_init(const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in, - const OSSL_DISPATCH **out) + const OSSL_DISPATCH **out, + void **provctx) { for (; in->function_id != 0; in++) { switch (in->function_id) { - case OSSL_FUNC_CORE_GET_PARAM_TYPES: - c_get_param_types = OSSL_get_core_get_param_types(in); + case OSSL_FUNC_CORE_GETTABLE_PARAMS: + c_gettable_params = OSSL_FUNC_core_gettable_params(in); break; case OSSL_FUNC_CORE_GET_PARAMS: - c_get_params = OSSL_get_core_get_params(in); + c_get_params = OSSL_FUNC_core_get_params(in); break; default: /* Just ignore anything we don't understand */ @@ -117,6 +138,9 @@ int OSSL_provider_init(const OSSL_PROVIDER *provider, } } + /* Because we use this in get_params, we need to pass it back */ + *provctx = (void *)handle; + *out = p_test_table; return 1; }