Re-implement EVP_MD_name() and EVP_CIPHER_name() as functions
They will do the same as usual for non-provider algorithms implementations, but can handle provider implementations as well. Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/9356)
This commit is contained in:
parent
6b9e37246d
commit
c750bc0851
6 changed files with 48 additions and 5 deletions
|
@ -415,6 +415,17 @@ int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx)
|
||||||
return ctx->cipher->nid;
|
return ctx->cipher->nid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *EVP_CIPHER_name(const EVP_CIPHER *cipher)
|
||||||
|
{
|
||||||
|
if (cipher->prov != NULL)
|
||||||
|
return cipher->name;
|
||||||
|
#ifndef FIPS_MODE
|
||||||
|
return OBJ_nid2sn(EVP_CIPHER_nid(cipher));
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int EVP_CIPHER_mode(const EVP_CIPHER *cipher)
|
int EVP_CIPHER_mode(const EVP_CIPHER *cipher)
|
||||||
{
|
{
|
||||||
int ok, v = EVP_CIPHER_flags(cipher) & EVP_CIPH_MODE;
|
int ok, v = EVP_CIPHER_flags(cipher) & EVP_CIPH_MODE;
|
||||||
|
@ -426,6 +437,17 @@ int EVP_CIPHER_mode(const EVP_CIPHER *cipher)
|
||||||
return ok != 0 ? v : 0;
|
return ok != 0 ? v : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *EVP_MD_name(const EVP_MD *md)
|
||||||
|
{
|
||||||
|
if (md->prov != NULL)
|
||||||
|
return md->name;
|
||||||
|
#ifndef FIPS_MODE
|
||||||
|
return OBJ_nid2sn(EVP_MD_nid(md));
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int EVP_MD_block_size(const EVP_MD *md)
|
int EVP_MD_block_size(const EVP_MD *md)
|
||||||
{
|
{
|
||||||
if (md == NULL) {
|
if (md == NULL) {
|
||||||
|
|
|
@ -8,7 +8,9 @@ EVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, EVP_MD_CTX_set_params, EVP_MD_CTX_get_param
|
||||||
EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags,
|
EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags,
|
||||||
EVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate,
|
EVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate,
|
||||||
EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal,
|
EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal,
|
||||||
|
EVP_MD_name,
|
||||||
EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags,
|
EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags,
|
||||||
|
EVP_MD_CTX_name,
|
||||||
EVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size,
|
EVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size,
|
||||||
EVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn,
|
EVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn,
|
||||||
EVP_md_null,
|
EVP_md_null,
|
||||||
|
@ -45,6 +47,7 @@ EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx - EVP digest routines
|
||||||
|
|
||||||
int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in);
|
int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in);
|
||||||
|
|
||||||
|
const char *EVP_MD_name(const EVP_MD *md);
|
||||||
int EVP_MD_type(const EVP_MD *md);
|
int EVP_MD_type(const EVP_MD *md);
|
||||||
int EVP_MD_pkey_type(const EVP_MD *md);
|
int EVP_MD_pkey_type(const EVP_MD *md);
|
||||||
int EVP_MD_size(const EVP_MD *md);
|
int EVP_MD_size(const EVP_MD *md);
|
||||||
|
@ -52,6 +55,7 @@ EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx - EVP digest routines
|
||||||
unsigned long EVP_MD_flags(const EVP_MD *md);
|
unsigned long EVP_MD_flags(const EVP_MD *md);
|
||||||
|
|
||||||
const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
|
const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
|
||||||
|
const char *EVP_MD_CTX_name(const EVP_MD_CTX *ctx);
|
||||||
int EVP_MD_CTX_size(const EVP_MD *ctx);
|
int EVP_MD_CTX_size(const EVP_MD *ctx);
|
||||||
int EVP_MD_CTX_block_size(const EVP_MD *ctx);
|
int EVP_MD_CTX_block_size(const EVP_MD *ctx);
|
||||||
int EVP_MD_CTX_type(const EVP_MD *ctx);
|
int EVP_MD_CTX_type(const EVP_MD *ctx);
|
||||||
|
@ -184,6 +188,11 @@ automatically cleaned up.
|
||||||
Similar to EVP_MD_CTX_copy_ex() except the destination B<out> does not have to
|
Similar to EVP_MD_CTX_copy_ex() except the destination B<out> does not have to
|
||||||
be initialized.
|
be initialized.
|
||||||
|
|
||||||
|
=item EVP_MD_name(),
|
||||||
|
EVP_MD_CTX_name()
|
||||||
|
|
||||||
|
Return the name of the given message digest.
|
||||||
|
|
||||||
=item EVP_MD_size(),
|
=item EVP_MD_size(),
|
||||||
EVP_MD_CTX_size()
|
EVP_MD_CTX_size()
|
||||||
|
|
||||||
|
@ -433,9 +442,9 @@ implementations of digests to be specified.
|
||||||
If digest contexts are not cleaned up after use,
|
If digest contexts are not cleaned up after use,
|
||||||
memory leaks will occur.
|
memory leaks will occur.
|
||||||
|
|
||||||
EVP_MD_CTX_size(), EVP_MD_CTX_block_size(), EVP_MD_CTX_type(),
|
EVP_MD_CTX_name(), EVP_MD_CTX_size(), EVP_MD_CTX_block_size(),
|
||||||
EVP_get_digestbynid() and EVP_get_digestbyobj() are defined as
|
EVP_MD_CTX_type(), EVP_get_digestbynid() and EVP_get_digestbyobj() are defined
|
||||||
macros.
|
as macros.
|
||||||
|
|
||||||
EVP_MD_CTX_ctrl() sends commands to message digests for additional configuration
|
EVP_MD_CTX_ctrl() sends commands to message digests for additional configuration
|
||||||
or control.
|
or control.
|
||||||
|
|
|
@ -26,6 +26,7 @@ EVP_CipherFinal,
|
||||||
EVP_get_cipherbyname,
|
EVP_get_cipherbyname,
|
||||||
EVP_get_cipherbynid,
|
EVP_get_cipherbynid,
|
||||||
EVP_get_cipherbyobj,
|
EVP_get_cipherbyobj,
|
||||||
|
EVP_CIPHER_name,
|
||||||
EVP_CIPHER_nid,
|
EVP_CIPHER_nid,
|
||||||
EVP_CIPHER_block_size,
|
EVP_CIPHER_block_size,
|
||||||
EVP_CIPHER_key_length,
|
EVP_CIPHER_key_length,
|
||||||
|
@ -34,6 +35,7 @@ EVP_CIPHER_flags,
|
||||||
EVP_CIPHER_mode,
|
EVP_CIPHER_mode,
|
||||||
EVP_CIPHER_type,
|
EVP_CIPHER_type,
|
||||||
EVP_CIPHER_CTX_cipher,
|
EVP_CIPHER_CTX_cipher,
|
||||||
|
EVP_CIPHER_CTX_name,
|
||||||
EVP_CIPHER_CTX_nid,
|
EVP_CIPHER_CTX_nid,
|
||||||
EVP_CIPHER_CTX_block_size,
|
EVP_CIPHER_CTX_block_size,
|
||||||
EVP_CIPHER_CTX_key_length,
|
EVP_CIPHER_CTX_key_length,
|
||||||
|
@ -101,6 +103,7 @@ EVP_enc_null
|
||||||
const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a);
|
const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a);
|
||||||
|
|
||||||
int EVP_CIPHER_nid(const EVP_CIPHER *e);
|
int EVP_CIPHER_nid(const EVP_CIPHER *e);
|
||||||
|
const char *EVP_CIPHER_name(const EVP_CIPHER *cipher);
|
||||||
int EVP_CIPHER_block_size(const EVP_CIPHER *e);
|
int EVP_CIPHER_block_size(const EVP_CIPHER *e);
|
||||||
int EVP_CIPHER_key_length(const EVP_CIPHER *e);
|
int EVP_CIPHER_key_length(const EVP_CIPHER *e);
|
||||||
int EVP_CIPHER_iv_length(const EVP_CIPHER *e);
|
int EVP_CIPHER_iv_length(const EVP_CIPHER *e);
|
||||||
|
@ -110,6 +113,7 @@ EVP_enc_null
|
||||||
|
|
||||||
const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
|
const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
|
||||||
int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
|
int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
|
||||||
|
const char *EVP_CIPHER_CTX_name(const EVP_CIPHER_CTX *ctx);
|
||||||
int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
|
int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
|
||||||
int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
|
int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
|
||||||
int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
|
int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
|
||||||
|
@ -255,6 +259,9 @@ IDENTIFIER as such it ignores the cipher parameters and 40 bit RC2 and
|
||||||
identifier or does not have ASN1 support this function will return
|
identifier or does not have ASN1 support this function will return
|
||||||
B<NID_undef>.
|
B<NID_undef>.
|
||||||
|
|
||||||
|
EVP_CIPHER_name() and EVP_CIPHER_CTX_name() return the name of the passed
|
||||||
|
cipher or context.
|
||||||
|
|
||||||
EVP_CIPHER_CTX_cipher() returns the B<EVP_CIPHER> structure when passed
|
EVP_CIPHER_CTX_cipher() returns the B<EVP_CIPHER> structure when passed
|
||||||
an B<EVP_CIPHER_CTX> structure.
|
an B<EVP_CIPHER_CTX> structure.
|
||||||
|
|
||||||
|
|
|
@ -449,7 +449,7 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass,
|
||||||
|
|
||||||
int EVP_MD_type(const EVP_MD *md);
|
int EVP_MD_type(const EVP_MD *md);
|
||||||
# define EVP_MD_nid(e) EVP_MD_type(e)
|
# define EVP_MD_nid(e) EVP_MD_type(e)
|
||||||
# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e))
|
const char *EVP_MD_name(const EVP_MD *md);
|
||||||
int EVP_MD_pkey_type(const EVP_MD *md);
|
int EVP_MD_pkey_type(const EVP_MD *md);
|
||||||
int EVP_MD_size(const EVP_MD *md);
|
int EVP_MD_size(const EVP_MD *md);
|
||||||
int EVP_MD_block_size(const EVP_MD *md);
|
int EVP_MD_block_size(const EVP_MD *md);
|
||||||
|
@ -461,6 +461,7 @@ int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx,
|
||||||
void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
|
void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
|
||||||
int (*update) (EVP_MD_CTX *ctx,
|
int (*update) (EVP_MD_CTX *ctx,
|
||||||
const void *data, size_t count));
|
const void *data, size_t count));
|
||||||
|
# define EVP_MD_CTX_name(e) EVP_MD_name(EVP_MD_CTX_md(e))
|
||||||
# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))
|
# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e))
|
||||||
# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e))
|
# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e))
|
||||||
# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e))
|
# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e))
|
||||||
|
@ -469,7 +470,7 @@ void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
|
||||||
void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
|
void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
|
||||||
|
|
||||||
int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
|
int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
|
||||||
# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e))
|
const char *EVP_CIPHER_name(const EVP_CIPHER *cipher);
|
||||||
int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
|
int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
|
||||||
int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher);
|
int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher);
|
||||||
int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
|
int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
|
||||||
|
@ -496,6 +497,7 @@ void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
|
||||||
void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
|
void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
|
||||||
void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
|
void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
|
||||||
void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
|
void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
|
||||||
|
# define EVP_CIPHER_CTX_name(c) EVP_CIPHER_name(EVP_CIPHER_CTX_cipher(c))
|
||||||
# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
|
# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
|
||||||
# if !OPENSSL_API_1_1_0
|
# if !OPENSSL_API_1_1_0
|
||||||
# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c))
|
# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c))
|
||||||
|
|
|
@ -4691,3 +4691,5 @@ EVP_KEYMGMT_free 4796 3_0_0 EXIST::FUNCTION:
|
||||||
EVP_KEYMGMT_provider 4797 3_0_0 EXIST::FUNCTION:
|
EVP_KEYMGMT_provider 4797 3_0_0 EXIST::FUNCTION:
|
||||||
X509_PUBKEY_dup 4798 3_0_0 EXIST::FUNCTION:
|
X509_PUBKEY_dup 4798 3_0_0 EXIST::FUNCTION:
|
||||||
ERR_put_func_error 4799 3_0_0 EXIST::FUNCTION:
|
ERR_put_func_error 4799 3_0_0 EXIST::FUNCTION:
|
||||||
|
EVP_MD_name 4800 3_0_0 EXIST::FUNCTION:
|
||||||
|
EVP_CIPHER_name 4801 3_0_0 EXIST::FUNCTION:
|
||||||
|
|
|
@ -201,6 +201,7 @@ EVP_DigestVerifyUpdate define
|
||||||
EVP_KDF_name define
|
EVP_KDF_name define
|
||||||
EVP_MAC_name define
|
EVP_MAC_name define
|
||||||
EVP_MD_CTX_block_size define
|
EVP_MD_CTX_block_size define
|
||||||
|
EVP_MD_CTX_name define
|
||||||
EVP_MD_CTX_size define
|
EVP_MD_CTX_size define
|
||||||
EVP_MD_CTX_type define
|
EVP_MD_CTX_type define
|
||||||
EVP_OpenUpdate define
|
EVP_OpenUpdate define
|
||||||
|
|
Loading…
Reference in a new issue