diff options
author | Richard Levitte <levitte@openssl.org> | 2019-09-23 10:33:26 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-10-17 09:16:45 +0200 |
commit | 251e610ce4479913e593f9f7a9a711115e6cf1a3 (patch) | |
tree | 3fe13d296f38dc0cd0db319ba381188649481c89 /crypto | |
parent | ee2161e8a6174a06c9f4efe6bfc0b76b2eda46fa (diff) | |
download | openssl-new-251e610ce4479913e593f9f7a9a711115e6cf1a3.tar.gz |
EVP: add missing common functionality
This adds the missing functions that should be common for all
fetchable EVP sub-APIs:
EVP_KEYMGMT_is_a(), EVP_KEYMGMT_do_all_provided(), EVP_KEYEXCH_is_a(),
EVP_KEYEXCH_do_all_provided(), EVP_KDF_is_a(), EVP_MD_is_a(),
EVP_SIGNATURE_do_all_provided(), EVP_SIGNATURE_is_a().
This also renames EVP_MD_do_all_ex(), EVP_CIPHER_do_all_ex(),
EVP_KDF_do_all_ex(), EVP_MAC_do_all_ex() to change '_ex'
to '_provided'.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/9979)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/evp/digest.c | 6 | ||||
-rw-r--r-- | crypto/evp/evp_enc.c | 6 | ||||
-rw-r--r-- | crypto/evp/evp_lib.c | 5 | ||||
-rw-r--r-- | crypto/evp/exchange.c | 19 | ||||
-rw-r--r-- | crypto/evp/kdf_lib.c | 5 | ||||
-rw-r--r-- | crypto/evp/kdf_meth.c | 6 | ||||
-rw-r--r-- | crypto/evp/keymgmt_meth.c | 14 | ||||
-rw-r--r-- | crypto/evp/mac_lib.c | 5 | ||||
-rw-r--r-- | crypto/evp/mac_meth.c | 11 | ||||
-rw-r--r-- | crypto/evp/pmeth_fn.c | 20 |
10 files changed, 80 insertions, 17 deletions
diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c index e59f082818..a8e8326237 100644 --- a/crypto/evp/digest.c +++ b/crypto/evp/digest.c @@ -902,9 +902,9 @@ void EVP_MD_free(EVP_MD *md) OPENSSL_free(md); } -void EVP_MD_do_all_ex(OPENSSL_CTX *libctx, - void (*fn)(EVP_MD *mac, void *arg), - void *arg) +void EVP_MD_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_MD *mac, void *arg), + void *arg) { evp_generic_do_all(libctx, OSSL_OP_DIGEST, (void (*)(void *, void *))fn, arg, diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index 86506d3a4c..4406b7f032 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -1521,9 +1521,9 @@ void EVP_CIPHER_free(EVP_CIPHER *cipher) OPENSSL_free(cipher); } -void EVP_CIPHER_do_all_ex(OPENSSL_CTX *libctx, - void (*fn)(EVP_CIPHER *mac, void *arg), - void *arg) +void EVP_CIPHER_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_CIPHER *mac, void *arg), + void *arg) { evp_generic_do_all(libctx, OSSL_OP_CIPHER, (void (*)(void *, void *))fn, arg, diff --git a/crypto/evp/evp_lib.c b/crypto/evp/evp_lib.c index c567b2efee..f87793d3ed 100644 --- a/crypto/evp/evp_lib.c +++ b/crypto/evp/evp_lib.c @@ -573,6 +573,11 @@ int EVP_CIPHER_mode(const EVP_CIPHER *cipher) return ok != 0 ? (int)v : 0; } +int EVP_MD_is_a(const EVP_MD *md, const char *name) +{ + return evp_is_a(md->prov, md->name_id, name); +} + const char *EVP_MD_name(const EVP_MD *md) { if (md->prov != NULL) diff --git a/crypto/evp/exchange.c b/crypto/evp/exchange.c index 4c02c8a6a0..437d6a5cd6 100644 --- a/crypto/evp/exchange.c +++ b/crypto/evp/exchange.c @@ -386,3 +386,22 @@ int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *pkeylen) M_check_autoarg(ctx, key, pkeylen, EVP_F_EVP_PKEY_DERIVE) return ctx->pmeth->derive(ctx, key, pkeylen); } + +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name) +{ + return evp_is_a(keyexch->prov, keyexch->name_id, name); +} + +void EVP_KEYEXCH_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *arg), + void *arg) +{ + struct keymgmt_data_st keymgmt_data; + + keymgmt_data.ctx = libctx; + keymgmt_data.properties = NULL; + evp_generic_do_all(libctx, OSSL_OP_KEYEXCH, + (void (*)(void *, void *))fn, arg, + evp_keyexch_from_dispatch, &keymgmt_data, + (void (*)(void *))EVP_KEYEXCH_free); +} diff --git a/crypto/evp/kdf_lib.c b/crypto/evp/kdf_lib.c index 7163de397f..b85f0e0eb8 100644 --- a/crypto/evp/kdf_lib.c +++ b/crypto/evp/kdf_lib.c @@ -88,6 +88,11 @@ const char *EVP_KDF_name(const EVP_KDF *kdf) return evp_first_name(kdf->prov, kdf->name_id); } +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name) +{ + return evp_is_a(kdf->prov, kdf->name_id, name); +} + const OSSL_PROVIDER *EVP_KDF_provider(const EVP_KDF *kdf) { return kdf->prov; diff --git a/crypto/evp/kdf_meth.c b/crypto/evp/kdf_meth.c index e6185e9255..576dde6805 100644 --- a/crypto/evp/kdf_meth.c +++ b/crypto/evp/kdf_meth.c @@ -187,9 +187,9 @@ const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf) return kdf->settable_ctx_params(); } -void EVP_KDF_do_all_ex(OPENSSL_CTX *libctx, - void (*fn)(EVP_KDF *kdf, void *arg), - void *arg) +void EVP_KDF_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg) { evp_generic_do_all(libctx, OSSL_OP_KDF, (void (*)(void *, void *))fn, arg, diff --git a/crypto/evp/keymgmt_meth.c b/crypto/evp/keymgmt_meth.c index a5df564605..990f899159 100644 --- a/crypto/evp/keymgmt_meth.c +++ b/crypto/evp/keymgmt_meth.c @@ -200,3 +200,17 @@ const OSSL_PROVIDER *EVP_KEYMGMT_provider(const EVP_KEYMGMT *keymgmt) return keymgmt->prov; } +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name) +{ + return evp_is_a(keymgmt->prov, keymgmt->name_id, name); +} + +void EVP_KEYMGMT_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg) +{ + evp_generic_do_all(libctx, OSSL_OP_KEYMGMT, + (void (*)(void *, void *))fn, arg, + keymgmt_from_dispatch, NULL, + (void (*)(void *))EVP_KEYMGMT_free); +} diff --git a/crypto/evp/mac_lib.c b/crypto/evp/mac_lib.c index 8b8c9a5067..b6df6a594b 100644 --- a/crypto/evp/mac_lib.c +++ b/crypto/evp/mac_lib.c @@ -157,3 +157,8 @@ int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]) return ctx->meth->set_ctx_params(ctx->data, params); return 1; } + +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name) +{ + return evp_is_a(mac->prov, mac->name_id, name); +} diff --git a/crypto/evp/mac_meth.c b/crypto/evp/mac_meth.c index f35c2d157e..86f5434654 100644 --- a/crypto/evp/mac_meth.c +++ b/crypto/evp/mac_meth.c @@ -168,11 +168,6 @@ void EVP_MAC_free(EVP_MAC *mac) evp_mac_free(mac); } -int EVP_MAC_is_a(const EVP_MAC *mac, const char *name) -{ - return evp_is_a(mac->prov, mac->name_id, name); -} - const char *EVP_MAC_name(const EVP_MAC *mac) { return evp_first_name(mac->prov, mac->name_id); @@ -204,9 +199,9 @@ const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac) return mac->settable_ctx_params(); } -void EVP_MAC_do_all_ex(OPENSSL_CTX *libctx, - void (*fn)(EVP_MAC *mac, void *arg), - void *arg) +void EVP_MAC_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg) { evp_generic_do_all(libctx, OSSL_OP_MAC, (void (*)(void *, void *))fn, arg, diff --git a/crypto/evp/pmeth_fn.c b/crypto/evp/pmeth_fn.c index c7940e8e38..2b4bca5727 100644 --- a/crypto/evp/pmeth_fn.c +++ b/crypto/evp/pmeth_fn.c @@ -312,6 +312,26 @@ EVP_SIGNATURE *EVP_SIGNATURE_fetch(OPENSSL_CTX *ctx, const char *algorithm, (void (*)(void *))EVP_SIGNATURE_free); } +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name) +{ + return evp_is_a(signature->prov, signature->name_id, name); +} + +void EVP_SIGNATURE_do_all_provided(OPENSSL_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *arg), + void *arg) +{ + struct keymgmt_data_st keymgmt_data; + + keymgmt_data.ctx = libctx; + keymgmt_data.properties = NULL; + evp_generic_do_all(libctx, OSSL_OP_SIGNATURE, + (void (*)(void *, void *))fn, arg, + evp_signature_from_dispatch, &keymgmt_data, + (void (*)(void *))EVP_SIGNATURE_free); +} + static int evp_pkey_signature_init(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *signature, int operation) { |