mirror of https://github.com/openssl/openssl.git
CORE: Add an algorithm_description field to OSSL_ALGORITHM
This corresponds to the |info| field in EVP_PKEY_ASN1_METHOD, as well as the generic use of OBJ_nid2ln() as a one line description. We also add the base functionality to make use of this field. Fixes #14514 Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/14656)
This commit is contained in:
parent
650c668737
commit
309a78aa30
|
|
@ -159,8 +159,8 @@ static int put_decoder_in_store(OSSL_LIB_CTX *libctx, void *store,
|
|||
}
|
||||
|
||||
/* Create and populate a decoder method */
|
||||
void *ossl_decoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
OSSL_DECODER *decoder = NULL;
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
|
|
@ -169,6 +169,7 @@ void *ossl_decoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
|||
return NULL;
|
||||
decoder->base.id = id;
|
||||
decoder->base.propdef = algodef->property_definition;
|
||||
decoder->base.description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -241,7 +242,7 @@ void *ossl_decoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
|||
/*
|
||||
* The core fetching functionality passes the names of the implementation.
|
||||
* This function is responsible to getting an identity number for them,
|
||||
* then call ossl_decoder_from_dispatch() with that identity number.
|
||||
* then call ossl_decoder_from_algorithm() with that identity number.
|
||||
*/
|
||||
static void *construct_decoder(const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov, void *data)
|
||||
|
|
@ -260,7 +261,7 @@ static void *construct_decoder(const OSSL_ALGORITHM *algodef,
|
|||
void *method = NULL;
|
||||
|
||||
if (id != 0)
|
||||
method = ossl_decoder_from_dispatch(id, algodef, prov);
|
||||
method = ossl_decoder_from_algorithm(id, algodef, prov);
|
||||
|
||||
/*
|
||||
* Flag to indicate that there was actual construction errors. This
|
||||
|
|
@ -452,7 +453,7 @@ static void decoder_do_one(OSSL_PROVIDER *provider,
|
|||
void *method = NULL;
|
||||
|
||||
if (id != 0)
|
||||
method = ossl_decoder_from_dispatch(id, algodef, provider);
|
||||
method = ossl_decoder_from_algorithm(id, algodef, provider);
|
||||
|
||||
if (method != NULL) {
|
||||
data->user_fn(method, data->user_arg);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ struct ossl_endecode_base_st {
|
|||
OSSL_PROVIDER *prov;
|
||||
int id;
|
||||
const char *propdef;
|
||||
const char *description;
|
||||
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
|
|||
|
|
@ -159,8 +159,8 @@ static int put_encoder_in_store(OSSL_LIB_CTX *libctx, void *store,
|
|||
}
|
||||
|
||||
/* Create and populate a encoder method */
|
||||
static void *encoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *encoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
OSSL_ENCODER *encoder = NULL;
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
|
|
@ -169,6 +169,7 @@ static void *encoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
|||
return NULL;
|
||||
encoder->base.id = id;
|
||||
encoder->base.propdef = algodef->property_definition;
|
||||
encoder->base.description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -253,7 +254,7 @@ static void *encoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
|||
/*
|
||||
* The core fetching functionality passes the names of the implementation.
|
||||
* This function is responsible to getting an identity number for them,
|
||||
* then call encoder_from_dispatch() with that identity number.
|
||||
* then call encoder_from_algorithm() with that identity number.
|
||||
*/
|
||||
static void *construct_encoder(const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov, void *data)
|
||||
|
|
@ -272,7 +273,7 @@ static void *construct_encoder(const OSSL_ALGORITHM *algodef,
|
|||
void *method = NULL;
|
||||
|
||||
if (id != 0)
|
||||
method = encoder_from_dispatch(id, algodef, prov);
|
||||
method = encoder_from_algorithm(id, algodef, prov);
|
||||
|
||||
/*
|
||||
* Flag to indicate that there was actual construction errors. This
|
||||
|
|
@ -465,7 +466,7 @@ static void encoder_do_one(OSSL_PROVIDER *provider,
|
|||
|
||||
if (id != 0)
|
||||
method =
|
||||
encoder_from_dispatch(id, algodef, provider);
|
||||
encoder_from_algorithm(id, algodef, provider);
|
||||
|
||||
if (method != NULL) {
|
||||
data->user_fn(method, data->user_arg);
|
||||
|
|
|
|||
|
|
@ -274,10 +274,11 @@ static EVP_ASYM_CIPHER *evp_asym_cipher_new(OSSL_PROVIDER *prov)
|
|||
return cipher;
|
||||
}
|
||||
|
||||
static void *evp_asym_cipher_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_asym_cipher_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_ASYM_CIPHER *cipher = NULL;
|
||||
int ctxfncnt = 0, encfncnt = 0, decfncnt = 0;
|
||||
int gparamfncnt = 0, sparamfncnt = 0;
|
||||
|
|
@ -288,6 +289,7 @@ static void *evp_asym_cipher_from_dispatch(int name_id,
|
|||
}
|
||||
|
||||
cipher->name_id = name_id;
|
||||
cipher->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -418,7 +420,7 @@ EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(ctx, OSSL_OP_ASYM_CIPHER, algorithm, properties,
|
||||
evp_asym_cipher_from_dispatch,
|
||||
evp_asym_cipher_from_algorithm,
|
||||
(int (*)(void *))EVP_ASYM_CIPHER_up_ref,
|
||||
(void (*)(void *))EVP_ASYM_CIPHER_free);
|
||||
}
|
||||
|
|
@ -440,7 +442,7 @@ void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_ASYM_CIPHER,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_asym_cipher_from_dispatch,
|
||||
evp_asym_cipher_from_algorithm,
|
||||
(void (*)(void *))EVP_ASYM_CIPHER_free);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -883,10 +883,11 @@ static int evp_md_cache_constants(EVP_MD *md)
|
|||
return ok;
|
||||
}
|
||||
|
||||
static void *evp_md_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_md_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_MD *md = NULL;
|
||||
int fncnt = 0;
|
||||
|
||||
|
|
@ -907,6 +908,7 @@ static void *evp_md_from_dispatch(int name_id,
|
|||
#endif
|
||||
|
||||
md->name_id = name_id;
|
||||
md->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -1017,7 +1019,7 @@ EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
{
|
||||
EVP_MD *md =
|
||||
evp_generic_fetch(ctx, OSSL_OP_DIGEST, algorithm, properties,
|
||||
evp_md_from_dispatch, evp_md_up_ref, evp_md_free);
|
||||
evp_md_from_algorithm, evp_md_up_ref, evp_md_free);
|
||||
|
||||
return md;
|
||||
}
|
||||
|
|
@ -1051,5 +1053,5 @@ void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_DIGEST,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_md_from_dispatch, evp_md_free);
|
||||
evp_md_from_algorithm, evp_md_free);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1440,10 +1440,11 @@ static void set_legacy_nid(const char *name, void *vlegacy_nid)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void *evp_cipher_from_dispatch(const int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_cipher_from_algorithm(const int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_CIPHER *cipher = NULL;
|
||||
int fnciphcnt = 0, fnctxcnt = 0;
|
||||
|
||||
|
|
@ -1463,6 +1464,7 @@ static void *evp_cipher_from_dispatch(const int name_id,
|
|||
#endif
|
||||
|
||||
cipher->name_id = name_id;
|
||||
cipher->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -1587,7 +1589,7 @@ EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
{
|
||||
EVP_CIPHER *cipher =
|
||||
evp_generic_fetch(ctx, OSSL_OP_CIPHER, algorithm, properties,
|
||||
evp_cipher_from_dispatch, evp_cipher_up_ref,
|
||||
evp_cipher_from_algorithm, evp_cipher_up_ref,
|
||||
evp_cipher_free);
|
||||
|
||||
return cipher;
|
||||
|
|
@ -1622,5 +1624,5 @@ void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_CIPHER,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_cipher_from_dispatch, evp_cipher_free);
|
||||
evp_cipher_from_algorithm, evp_cipher_free);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ struct evp_method_data_st {
|
|||
|
||||
unsigned int flag_construct_error_occurred : 1;
|
||||
|
||||
void *(*method_from_dispatch)(int name_id, const OSSL_DISPATCH *,
|
||||
OSSL_PROVIDER *);
|
||||
void *(*method_from_algorithm)(int name_id, const OSSL_ALGORITHM *,
|
||||
OSSL_PROVIDER *);
|
||||
int (*refcnt_up_method)(void *method);
|
||||
void (*destruct_method)(void *method);
|
||||
};
|
||||
|
|
@ -194,8 +194,7 @@ static void *construct_evp_method(const OSSL_ALGORITHM *algodef,
|
|||
if (name_id == 0)
|
||||
return NULL;
|
||||
|
||||
method = methdata->method_from_dispatch(name_id, algodef->implementation,
|
||||
prov);
|
||||
method = methdata->method_from_algorithm(name_id, algodef, prov);
|
||||
|
||||
/*
|
||||
* Flag to indicate that there was actual construction errors. This
|
||||
|
|
@ -220,7 +219,7 @@ inner_evp_generic_fetch(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
int name_id, const char *name,
|
||||
const char *properties,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
int (*up_ref_method)(void *),
|
||||
void (*free_method)(void *))
|
||||
|
|
@ -296,7 +295,7 @@ inner_evp_generic_fetch(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
mcmdata.name_id = name_id;
|
||||
mcmdata.names = name;
|
||||
mcmdata.propquery = properties;
|
||||
mcmdata.method_from_dispatch = new_method;
|
||||
mcmdata.method_from_algorithm = new_method;
|
||||
mcmdata.refcnt_up_method = up_ref_method;
|
||||
mcmdata.destruct_method = free_method;
|
||||
mcmdata.flag_construct_error_occurred = 0;
|
||||
|
|
@ -341,7 +340,7 @@ inner_evp_generic_fetch(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
void *evp_generic_fetch(OSSL_LIB_CTX *libctx, int operation_id,
|
||||
const char *name, const char *properties,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
int (*up_ref_method)(void *),
|
||||
void (*free_method)(void *))
|
||||
|
|
@ -361,7 +360,7 @@ void *evp_generic_fetch(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
void *evp_generic_fetch_by_number(OSSL_LIB_CTX *libctx, int operation_id,
|
||||
int name_id, const char *properties,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
int (*up_ref_method)(void *),
|
||||
void (*free_method)(void *))
|
||||
|
|
@ -461,7 +460,7 @@ int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable)
|
|||
struct do_all_data_st {
|
||||
void (*user_fn)(void *method, void *arg);
|
||||
void *user_arg;
|
||||
void *(*new_method)(const int name_id, const OSSL_DISPATCH *fns,
|
||||
void *(*new_method)(const int name_id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov);
|
||||
void (*free_method)(void *);
|
||||
};
|
||||
|
|
@ -477,7 +476,7 @@ static void do_one(OSSL_PROVIDER *provider, const OSSL_ALGORITHM *algo,
|
|||
void *method = NULL;
|
||||
|
||||
if (name_id != 0)
|
||||
method = data->new_method(name_id, algo->implementation, provider);
|
||||
method = data->new_method(name_id, algo, provider);
|
||||
|
||||
if (method != NULL) {
|
||||
data->user_fn(method, data->user_arg);
|
||||
|
|
@ -489,7 +488,7 @@ void evp_generic_do_all(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
void (*user_fn)(void *method, void *arg),
|
||||
void *user_arg,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
void (*free_method)(void *))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ struct evp_keymgmt_st {
|
|||
int id; /* libcrypto internal */
|
||||
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -116,6 +117,7 @@ struct evp_keymgmt_st {
|
|||
|
||||
struct evp_keyexch_st {
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -134,6 +136,7 @@ struct evp_keyexch_st {
|
|||
|
||||
struct evp_signature_st {
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -167,6 +170,7 @@ struct evp_signature_st {
|
|||
|
||||
struct evp_asym_cipher_st {
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -186,6 +190,7 @@ struct evp_asym_cipher_st {
|
|||
|
||||
struct evp_kem_st {
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -235,14 +240,14 @@ int ossl_is_partially_overlapping(const void *ptr1, const void *ptr2, int len);
|
|||
void *evp_generic_fetch(OSSL_LIB_CTX *ctx, int operation_id,
|
||||
const char *name, const char *properties,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
int (*up_ref_method)(void *),
|
||||
void (*free_method)(void *));
|
||||
void *evp_generic_fetch_by_number(OSSL_LIB_CTX *ctx, int operation_id,
|
||||
int name_id, const char *properties,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
int (*up_ref_method)(void *),
|
||||
void (*free_method)(void *));
|
||||
|
|
@ -250,7 +255,7 @@ void evp_generic_do_all(OSSL_LIB_CTX *libctx, int operation_id,
|
|||
void (*user_fn)(void *method, void *arg),
|
||||
void *user_arg,
|
||||
void *(*new_method)(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov),
|
||||
void (*free_method)(void *));
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
struct evp_rand_st {
|
||||
OSSL_PROVIDER *prov;
|
||||
int name_id;
|
||||
const char *description;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *refcnt_lock;
|
||||
|
||||
|
|
@ -112,10 +113,11 @@ static void evp_rand_unlock(EVP_RAND_CTX *rand)
|
|||
rand->meth->unlock(rand->data);
|
||||
}
|
||||
|
||||
static void *evp_rand_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_rand_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_RAND *rand = NULL;
|
||||
int fnrandcnt = 0, fnctxcnt = 0, fnlockcnt = 0, fnenablelockcnt = 0;
|
||||
#ifdef FIPS_MODULE
|
||||
|
|
@ -127,6 +129,7 @@ static void *evp_rand_from_dispatch(int name_id,
|
|||
return NULL;
|
||||
}
|
||||
rand->name_id = name_id;
|
||||
rand->description = algodef->algorithm_description;
|
||||
rand->dispatch = fns;
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -268,7 +271,7 @@ EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(libctx, OSSL_OP_RAND, algorithm, properties,
|
||||
evp_rand_from_dispatch, evp_rand_up_ref,
|
||||
evp_rand_from_algorithm, evp_rand_up_ref,
|
||||
evp_rand_free);
|
||||
}
|
||||
|
||||
|
|
@ -472,7 +475,7 @@ void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_RAND,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_rand_from_dispatch, evp_rand_free);
|
||||
evp_rand_from_algorithm, evp_rand_free);
|
||||
}
|
||||
|
||||
int EVP_RAND_names_do_all(const EVP_RAND *rand,
|
||||
|
|
|
|||
|
|
@ -38,10 +38,11 @@ static EVP_KEYEXCH *evp_keyexch_new(OSSL_PROVIDER *prov)
|
|||
return exchange;
|
||||
}
|
||||
|
||||
static void *evp_keyexch_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_keyexch_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_KEYEXCH *exchange = NULL;
|
||||
int fncnt = 0, sparamfncnt = 0, gparamfncnt = 0;
|
||||
|
||||
|
|
@ -51,6 +52,7 @@ static void *evp_keyexch_from_dispatch(int name_id,
|
|||
}
|
||||
|
||||
exchange->name_id = name_id;
|
||||
exchange->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -169,7 +171,7 @@ EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(ctx, OSSL_OP_KEYEXCH, algorithm, properties,
|
||||
evp_keyexch_from_dispatch,
|
||||
evp_keyexch_from_algorithm,
|
||||
(int (*)(void *))EVP_KEYEXCH_up_ref,
|
||||
(void (*)(void *))EVP_KEYEXCH_free);
|
||||
}
|
||||
|
|
@ -474,7 +476,7 @@ void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_KEYEXCH,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_keyexch_from_dispatch,
|
||||
evp_keyexch_from_algorithm,
|
||||
(void (*)(void *))EVP_KEYEXCH_free);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,10 +52,11 @@ static void *evp_kdf_new(void)
|
|||
return kdf;
|
||||
}
|
||||
|
||||
static void *evp_kdf_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_kdf_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_KDF *kdf = NULL;
|
||||
int fnkdfcnt = 0, fnctxcnt = 0;
|
||||
|
||||
|
|
@ -64,6 +65,7 @@ static void *evp_kdf_from_dispatch(int name_id,
|
|||
return NULL;
|
||||
}
|
||||
kdf->name_id = name_id;
|
||||
kdf->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -151,7 +153,7 @@ EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(libctx, OSSL_OP_KDF, algorithm, properties,
|
||||
evp_kdf_from_dispatch, evp_kdf_up_ref,
|
||||
evp_kdf_from_algorithm, evp_kdf_up_ref,
|
||||
evp_kdf_free);
|
||||
}
|
||||
|
||||
|
|
@ -218,5 +220,5 @@ void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_KDF,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_kdf_from_dispatch, evp_kdf_free);
|
||||
evp_kdf_from_algorithm, evp_kdf_free);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,9 +183,10 @@ static EVP_KEM *evp_kem_new(OSSL_PROVIDER *prov)
|
|||
return kem;
|
||||
}
|
||||
|
||||
static void *evp_kem_from_dispatch(int name_id, const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_kem_from_algorithm(int name_id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_KEM *kem = NULL;
|
||||
int ctxfncnt = 0, encfncnt = 0, decfncnt = 0;
|
||||
int gparamfncnt = 0, sparamfncnt = 0;
|
||||
|
|
@ -196,6 +197,7 @@ static void *evp_kem_from_dispatch(int name_id, const OSSL_DISPATCH *fns,
|
|||
}
|
||||
|
||||
kem->name_id = name_id;
|
||||
kem->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -326,7 +328,7 @@ EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(ctx, OSSL_OP_KEM, algorithm, properties,
|
||||
evp_kem_from_dispatch,
|
||||
evp_kem_from_algorithm,
|
||||
(int (*)(void *))EVP_KEM_up_ref,
|
||||
(void (*)(void *))EVP_KEM_free);
|
||||
}
|
||||
|
|
@ -346,7 +348,7 @@ void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
void *arg)
|
||||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_KEM, (void (*)(void *, void *))fn, arg,
|
||||
evp_kem_from_dispatch,
|
||||
evp_kem_from_algorithm,
|
||||
(void (*)(void *))EVP_KEM_free);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,10 +32,11 @@ static void *keymgmt_new(void)
|
|||
return keymgmt;
|
||||
}
|
||||
|
||||
static void *keymgmt_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *keymgmt_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_KEYMGMT *keymgmt = NULL;
|
||||
int setparamfncnt = 0, getparamfncnt = 0;
|
||||
int setgenparamfncnt = 0;
|
||||
|
|
@ -46,6 +47,7 @@ static void *keymgmt_from_dispatch(int name_id,
|
|||
return NULL;
|
||||
}
|
||||
keymgmt->name_id = name_id;
|
||||
keymgmt->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -202,7 +204,7 @@ EVP_KEYMGMT *evp_keymgmt_fetch_by_number(OSSL_LIB_CTX *ctx, int name_id,
|
|||
{
|
||||
return evp_generic_fetch_by_number(ctx,
|
||||
OSSL_OP_KEYMGMT, name_id, properties,
|
||||
keymgmt_from_dispatch,
|
||||
keymgmt_from_algorithm,
|
||||
(int (*)(void *))EVP_KEYMGMT_up_ref,
|
||||
(void (*)(void *))EVP_KEYMGMT_free);
|
||||
}
|
||||
|
|
@ -211,7 +213,7 @@ EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(ctx, OSSL_OP_KEYMGMT, algorithm, properties,
|
||||
keymgmt_from_dispatch,
|
||||
keymgmt_from_algorithm,
|
||||
(int (*)(void *))EVP_KEYMGMT_up_ref,
|
||||
(void (*)(void *))EVP_KEYMGMT_free);
|
||||
}
|
||||
|
|
@ -265,7 +267,7 @@ void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_KEYMGMT,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
keymgmt_from_dispatch,
|
||||
keymgmt_from_algorithm,
|
||||
(void (*)(void *))EVP_KEYMGMT_free);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,10 +46,11 @@ static void *evp_mac_new(void)
|
|||
return mac;
|
||||
}
|
||||
|
||||
static void *evp_mac_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_mac_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_MAC *mac = NULL;
|
||||
int fnmaccnt = 0, fnctxcnt = 0;
|
||||
|
||||
|
|
@ -58,6 +59,7 @@ static void *evp_mac_from_dispatch(int name_id,
|
|||
return NULL;
|
||||
}
|
||||
mac->name_id = name_id;
|
||||
mac->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -153,7 +155,7 @@ EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(libctx, OSSL_OP_MAC, algorithm, properties,
|
||||
evp_mac_from_dispatch, evp_mac_up_ref,
|
||||
evp_mac_from_algorithm, evp_mac_up_ref,
|
||||
evp_mac_free);
|
||||
}
|
||||
|
||||
|
|
@ -225,5 +227,5 @@ void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_MAC,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_mac_from_dispatch, evp_mac_free);
|
||||
evp_mac_from_algorithm, evp_mac_free);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,10 +38,11 @@ static EVP_SIGNATURE *evp_signature_new(OSSL_PROVIDER *prov)
|
|||
return signature;
|
||||
}
|
||||
|
||||
static void *evp_signature_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *evp_signature_from_algorithm(int name_id,
|
||||
const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
EVP_SIGNATURE *signature = NULL;
|
||||
int ctxfncnt = 0, signfncnt = 0, verifyfncnt = 0, verifyrecfncnt = 0;
|
||||
int digsignfncnt = 0, digverifyfncnt = 0;
|
||||
|
|
@ -53,6 +54,7 @@ static void *evp_signature_from_dispatch(int name_id,
|
|||
}
|
||||
|
||||
signature->name_id = name_id;
|
||||
signature->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -302,7 +304,7 @@ EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
|
|||
const char *properties)
|
||||
{
|
||||
return evp_generic_fetch(ctx, OSSL_OP_SIGNATURE, algorithm, properties,
|
||||
evp_signature_from_dispatch,
|
||||
evp_signature_from_algorithm,
|
||||
(int (*)(void *))EVP_SIGNATURE_up_ref,
|
||||
(void (*)(void *))EVP_SIGNATURE_free);
|
||||
}
|
||||
|
|
@ -324,7 +326,7 @@ void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx,
|
|||
{
|
||||
evp_generic_do_all(libctx, OSSL_OP_SIGNATURE,
|
||||
(void (*)(void *, void *))fn, arg,
|
||||
evp_signature_from_dispatch,
|
||||
evp_signature_from_algorithm,
|
||||
(void (*)(void *))EVP_SIGNATURE_free);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ struct ossl_store_loader_st {
|
|||
OSSL_PROVIDER *prov;
|
||||
int scheme_id;
|
||||
const char *propdef;
|
||||
const char *description;
|
||||
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
|
|||
|
|
@ -162,8 +162,8 @@ static int put_loader_in_store(OSSL_LIB_CTX *libctx, void *store,
|
|||
up_ref_loader, free_loader);
|
||||
}
|
||||
|
||||
static void *loader_from_dispatch(int scheme_id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *loader_from_algorithm(int scheme_id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
OSSL_STORE_LOADER *loader = NULL;
|
||||
const OSSL_DISPATCH *fns = algodef->implementation;
|
||||
|
|
@ -172,6 +172,7 @@ static void *loader_from_dispatch(int scheme_id, const OSSL_ALGORITHM *algodef,
|
|||
return NULL;
|
||||
loader->scheme_id = scheme_id;
|
||||
loader->propdef = algodef->property_definition;
|
||||
loader->description = algodef->algorithm_description;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
|
|
@ -226,7 +227,7 @@ static void *loader_from_dispatch(int scheme_id, const OSSL_ALGORITHM *algodef,
|
|||
/*
|
||||
* The core fetching functionality passes the scheme of the implementation.
|
||||
* This function is responsible to getting an identity number for them,
|
||||
* then call loader_from_dispatch() with that identity number.
|
||||
* then call loader_from_algorithm() with that identity number.
|
||||
*/
|
||||
static void *construct_loader(const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov, void *data)
|
||||
|
|
@ -245,7 +246,7 @@ static void *construct_loader(const OSSL_ALGORITHM *algodef,
|
|||
void *method = NULL;
|
||||
|
||||
if (id != 0)
|
||||
method = loader_from_dispatch(id, algodef, prov);
|
||||
method = loader_from_algorithm(id, algodef, prov);
|
||||
|
||||
/*
|
||||
* Flag to indicate that there was actual construction errors. This
|
||||
|
|
@ -430,7 +431,7 @@ static void loader_do_one(OSSL_PROVIDER *provider,
|
|||
|
||||
if (id != 0)
|
||||
method =
|
||||
loader_from_dispatch(id, algodef, provider);
|
||||
loader_from_algorithm(id, algodef, provider);
|
||||
|
||||
if (method != NULL) {
|
||||
data->user_fn(method, data->user_arg);
|
||||
|
|
|
|||
|
|
@ -114,10 +114,10 @@ And here's the implementation of the FOO method fetcher:
|
|||
* In this example, we have a public method creator and destructor.
|
||||
* It's not absolutely necessary, but is in the spirit of OpenSSL.
|
||||
*/
|
||||
EVP_FOO *EVP_FOO_meth_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov,
|
||||
void *data)
|
||||
EVP_FOO *EVP_FOO_meth_from_algorithm(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov,
|
||||
void *data)
|
||||
{
|
||||
EVP_FOO *foo = NULL;
|
||||
|
||||
|
|
@ -162,10 +162,10 @@ And here's the implementation of the FOO method fetcher:
|
|||
}
|
||||
}
|
||||
|
||||
static void *foo_from_dispatch(const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
static void *foo_from_algorithm(const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov)
|
||||
{
|
||||
return EVP_FOO_meth_from_dispatch(fns, prov);
|
||||
return EVP_FOO_meth_from_algorithm(fns, prov);
|
||||
}
|
||||
|
||||
static int foo_up_ref(void *vfoo)
|
||||
|
|
@ -188,7 +188,7 @@ And here's the implementation of the FOO method fetcher:
|
|||
{
|
||||
EVP_FOO *foo =
|
||||
evp_generic_fetch(ctx, OSSL_OP_FOO, name, properties,
|
||||
foo_from_dispatch, foo_up_ref, foo_free);
|
||||
foo_from_algorithm, foo_up_ref, foo_free);
|
||||
|
||||
/*
|
||||
* If this method exists in legacy form, with a constant NID for the
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ OSSL_DECODER *ossl_decoder_fetch_by_number(OSSL_LIB_CTX *libctx,
|
|||
* except read a DER blob and pass it on as a provider object abstraction
|
||||
* (provider-object(7)).
|
||||
*/
|
||||
void *ossl_decoder_from_dispatch(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov);
|
||||
void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef,
|
||||
OSSL_PROVIDER *prov);
|
||||
|
||||
OSSL_DECODER_INSTANCE *
|
||||
ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx);
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void);
|
|||
struct evp_mac_st {
|
||||
OSSL_PROVIDER *prov;
|
||||
int name_id;
|
||||
const char *description;
|
||||
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -214,6 +215,7 @@ struct evp_mac_st {
|
|||
struct evp_kdf_st {
|
||||
OSSL_PROVIDER *prov;
|
||||
int name_id;
|
||||
const char *description;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
||||
|
|
@ -251,6 +253,7 @@ struct evp_md_st {
|
|||
/* New structure members */
|
||||
/* Above comment to be removed when legacy has gone */
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
@ -303,6 +306,7 @@ struct evp_cipher_st {
|
|||
/* New structure members */
|
||||
/* Above comment to be removed when legacy has gone */
|
||||
int name_id;
|
||||
const char *description;
|
||||
OSSL_PROVIDER *prov;
|
||||
CRYPTO_REF_COUNT refcnt;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ struct ossl_algorithm_st {
|
|||
const char *algorithm_names; /* key */
|
||||
const char *property_definition; /* key */
|
||||
const OSSL_DISPATCH *implementation;
|
||||
const char *algorithm_description;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -437,8 +437,8 @@ static int file_setup_decoders(struct file_ctx_st *ctx)
|
|||
* The decoder doesn't need any identification or to be attached to
|
||||
* any provider, since it's only used locally.
|
||||
*/
|
||||
to_obj = ossl_decoder_from_dispatch(0, &ossl_der_to_obj_algorithm,
|
||||
NULL);
|
||||
to_obj = ossl_decoder_from_algorithm(0, &ossl_der_to_obj_algorithm,
|
||||
NULL);
|
||||
if (to_obj == NULL)
|
||||
goto err;
|
||||
to_obj_inst = ossl_decoder_instance_new(to_obj, ctx->provctx);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
/*
|
||||
* newctx and freectx are not strictly necessary. However, the method creator,
|
||||
* ossl_decoder_from_dispatch(), demands that they exist, so we make sure to
|
||||
* ossl_decoder_from_algorithm(), demands that they exist, so we make sure to
|
||||
* oblige.
|
||||
*/
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue