CORE: pass the full algorithm definition to the method constructor
So far, the API level method constructors that are called by ossl_method_construct_this() were passed the algorithm name string and the dispatch table and had no access to anything else. This change gives them access to the full OSSL_ALGORITHM item, thereby giving them access to the property definition. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10394)
This commit is contained in:
parent
3d83c73536
commit
36fa4d8a0d
3 changed files with 8 additions and 7 deletions
|
@ -31,9 +31,8 @@ static void ossl_method_construct_this(OSSL_PROVIDER *provider,
|
|||
struct construct_data_st *data = cbdata;
|
||||
void *method = NULL;
|
||||
|
||||
if ((method = data->mcm->construct(algo->algorithm_names,
|
||||
algo->implementation, provider,
|
||||
data->mcm_data)) == NULL)
|
||||
if ((method = data->mcm->construct(algo, provider, data->mcm_data))
|
||||
== NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
|
|
|
@ -233,7 +233,7 @@ static int put_evp_method_in_store(OPENSSL_CTX *libctx, void *store,
|
|||
* The core fetching functionality passes the name of the implementation.
|
||||
* This function is responsible to getting an identity number for it.
|
||||
*/
|
||||
static void *construct_evp_method(const char *names, const OSSL_DISPATCH *fns,
|
||||
static void *construct_evp_method(const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov, void *data)
|
||||
{
|
||||
/*
|
||||
|
@ -246,11 +246,13 @@ static void *construct_evp_method(const char *names, const OSSL_DISPATCH *fns,
|
|||
struct evp_method_data_st *methdata = data;
|
||||
OPENSSL_CTX *libctx = ossl_provider_library_context(prov);
|
||||
OSSL_NAMEMAP *namemap = ossl_namemap_stored(libctx);
|
||||
const char *names = algodef->algorithm_names;
|
||||
int name_id = ossl_namemap_add_names(namemap, 0, names, NAME_SEPARATOR);
|
||||
|
||||
if (name_id == 0)
|
||||
return NULL;
|
||||
return methdata->method_from_dispatch(name_id, fns, prov);
|
||||
return methdata->method_from_dispatch(name_id, algodef->implementation,
|
||||
prov);
|
||||
}
|
||||
|
||||
static void destruct_evp_method(void *method, void *data)
|
||||
|
|
|
@ -38,8 +38,8 @@ typedef struct ossl_method_construct_method_st {
|
|||
const OSSL_PROVIDER *prov, int operation_id, const char *name,
|
||||
const char *propdef, void *data);
|
||||
/* Construct a new method */
|
||||
void *(*construct)(const char *name, const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov, void *data);
|
||||
void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov,
|
||||
void *data);
|
||||
/* Destruct a method */
|
||||
void (*destruct)(void *method, void *data);
|
||||
} OSSL_METHOD_CONSTRUCT_METHOD;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue