diff options
author | Richard Levitte <levitte@openssl.org> | 2019-09-14 16:35:08 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-09-19 14:58:17 +0200 |
commit | 7cfa1717b812a126ce6f8e4cc32139164c89d789 (patch) | |
tree | 6baeb081c8d404bb4e82cabe0d42b5c78a356e19 /crypto/evp/evp_fetch.c | |
parent | f7c16d48a945e80f22f6f02550ee3fe14edb52fa (diff) |
Modify providers that keep track of underlying algorithms
With some provider implementations, there are underlying ciphers,
digests and macs. For some of them, the name was retrieved from the
method, but since the methods do not store those any more, we add
different mechanics.
For code that needs to pass on the name of a cipher or diges via
parameters, we simply locally store the name that was used when
fetching said cipher or digest. This will ensure that any underlying
code that needs to fetch that same cipher or digest does so with the
exact same name instead of any random name from the set of names
associated with the algorithm.
For code that needs to check what kind of algorithm was passed, we
provide EVP_{type}_is_a(), that returns true if the given method has
the given name as one of its names.
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9897)
Diffstat (limited to 'crypto/evp/evp_fetch.c')
-rw-r--r-- | crypto/evp/evp_fetch.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/crypto/evp/evp_fetch.c b/crypto/evp/evp_fetch.c index 79520c0b7f..6e31af79f2 100644 --- a/crypto/evp/evp_fetch.c +++ b/crypto/evp/evp_fetch.c @@ -385,3 +385,11 @@ const char *evp_first_name(OSSL_PROVIDER *prov, int name_id) return ossl_namemap_num2name(namemap, name_id, 0); } + +int evp_is_a(OSSL_PROVIDER *prov, int number, const char *name) +{ + OPENSSL_CTX *libctx = ossl_provider_library_context(prov); + OSSL_NAMEMAP *namemap = ossl_namemap_stored(libctx); + + return ossl_namemap_name2num(namemap, name) == number; +} |