summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-09-23 10:33:26 +0200
committerRichard Levitte <levitte@openssl.org>2019-10-17 09:16:45 +0200
commit251e610ce4479913e593f9f7a9a711115e6cf1a3 (patch)
tree3fe13d296f38dc0cd0db319ba381188649481c89 /crypto
parentee2161e8a6174a06c9f4efe6bfc0b76b2eda46fa (diff)
downloadopenssl-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.c6
-rw-r--r--crypto/evp/evp_enc.c6
-rw-r--r--crypto/evp/evp_lib.c5
-rw-r--r--crypto/evp/exchange.c19
-rw-r--r--crypto/evp/kdf_lib.c5
-rw-r--r--crypto/evp/kdf_meth.c6
-rw-r--r--crypto/evp/keymgmt_meth.c14
-rw-r--r--crypto/evp/mac_lib.c5
-rw-r--r--crypto/evp/mac_meth.c11
-rw-r--r--crypto/evp/pmeth_fn.c20
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)
{