Deprecate the low level HMAC functions

Use of the low level HMAC functions has been informally discouraged for a
long time.  We now formally deprecate them.

Applications should instead use EVP_MAC_CTX_new(3), EVP_MAC_CTX_free(3),
EVP_MAC_init(3), EVP_MAC_update(3) and EVP_MAC_final(3).

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10836)
This commit is contained in:
Pauli 2020-01-14 12:11:50 +10:00
parent fd4d283e75
commit dbde472688
15 changed files with 164 additions and 39 deletions

14
CHANGES
View File

@ -21,6 +21,20 @@
as well as words of caution.
[Richard Levitte]
*) The SSL_CTX_set_tlsext_ticket_key_cb(3) function has been deprecated.
Instead used the new SSL_CTX_set_tlsext_ticket_key_evp_cb(3) function.
[Paul Dale]
*) All of the low level HMAC functions have been deprecated including:
HMAC, HMAC_size, HMAC_CTX_new, HMAC_CTX_reset, HMAC_CTX_free,
HMAC_Init_ex, HMAC_Update, HMAC_Final, HMAC_CTX_copy, HMAC_CTX_set_flags
and HMAC_CTX_get_md.
Use of these low level functions has been informally discouraged for a long
time. Instead applications should use L<EVP_MAC_CTX_new(3)>,
L<EVP_MAC_CTX_free(3)>, L<EVP_MAC_init(3)>, L<EVP_MAC_update(3)>
and L<EVP_MAC_final(3)>.
[Paul Dale]
*) All of the low level CMAC functions have been deprecated including:
CMAC_CTX_new, CMAC_CTX_cleanup, CMAC_CTX_free, CMAC_CTX_get0_cipher_ctx,
CMAC_CTX_copy, CMAC_Init, CMAC_Update, CMAC_Final and CMAC_resume.

View File

@ -12,6 +12,8 @@
#include <stdlib.h>
#include <string.h> /* for memcpy() and strcmp() */
#include "apps.h"
#include <openssl/core_names.h>
#include <openssl/params.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/x509.h>
@ -729,10 +731,14 @@ void tlsext_cb(SSL *s, int client_server, int type,
int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
unsigned int *cookie_len)
{
unsigned char *buffer;
unsigned char *buffer = NULL;
size_t length = 0;
unsigned short port;
BIO_ADDR *lpeer = NULL, *peer = NULL;
int res = 0;
EVP_MAC *hmac = NULL;
EVP_MAC_CTX *ctx = NULL;
OSSL_PARAM params[3], *p = params;
/* Initialize a random secret */
if (!cookie_initialized) {
@ -770,13 +776,42 @@ int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
BIO_ADDR_rawaddress(peer, buffer + sizeof(port), NULL);
/* Calculate HMAC of buffer using the secret */
HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH,
buffer, length, cookie, cookie_len);
hmac = EVP_MAC_fetch(NULL, "HMAC", NULL);
if (hmac == NULL) {
BIO_printf(bio_err, "HMAC not found\n");
goto end;
}
ctx = EVP_MAC_CTX_new(hmac);
if (ctx == NULL) {
BIO_printf(bio_err, "HMAC context allocation failed\n");
goto end;
}
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, "SHA1", 0);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, cookie_secret,
COOKIE_SECRET_LENGTH);
*p = OSSL_PARAM_construct_end();
if (!EVP_MAC_CTX_set_params(ctx, params)) {
BIO_printf(bio_err, "HMAC context parameter setting failed\n");
goto end;
}
if (!EVP_MAC_init(ctx)) {
BIO_printf(bio_err, "HMAC context initialisation failed\n");
goto end;
}
if (!EVP_MAC_update(ctx, buffer, length)) {
BIO_printf(bio_err, "HMAC context update failed\n");
goto end;
}
if (!EVP_MAC_final(ctx, cookie, NULL, (size_t)cookie_len)) {
BIO_printf(bio_err, "HMAC context final failed\n");
goto end;
}
res = 1;
end:
OPENSSL_free(buffer);
BIO_ADDR_free(lpeer);
return 1;
return res;
}
int verify_cookie_callback(SSL *ssl, const unsigned char *cookie,

View File

@ -279,7 +279,9 @@ const OPTIONS speed_options[] = {
OPT_SECTION("Selection"),
{"evp", OPT_EVP, 's', "Use EVP-named cipher or digest"},
#ifndef OPENSSL_NO_DEPRECATED_3_0
{"hmac", OPT_HMAC, 's', "HMAC using EVP-named digest"},
#endif
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
{"cmac", OPT_CMAC, 's', "CMAC using EVP-named cipher"},
#endif
@ -340,7 +342,9 @@ static const OPT_PAIR doit_choices[] = {
#endif
#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_DEPRECATED_3_0)
{"md5", D_MD5},
# ifndef OPENSSL_NO_DEPRECATED_3_0
{"hmac", D_HMAC},
# endif
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
{"sha1", D_SHA1},
@ -558,7 +562,9 @@ typedef struct loopargs_st {
size_t outlen[EC_NUM];
#endif
EVP_CIPHER_CTX *ctx;
#ifndef OPENSSL_NO_DEPRECATED_3_0
HMAC_CTX *hctx;
#endif
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
CMAC_CTX *cmac_ctx;
#endif
@ -635,6 +641,7 @@ static int MD5_loop(void *args)
return count;
}
# ifndef OPENSSL_NO_DEPRECATED_3_0
static int HMAC_loop(void *args)
{
loopargs_t *tempargs = *(loopargs_t **) args;
@ -650,6 +657,7 @@ static int HMAC_loop(void *args)
}
return count;
}
# endif
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
@ -970,6 +978,7 @@ static int EVP_Digest_loop(void *args)
return count;
}
#ifndef OPENSSL_NO_DEPRECATED_3_0
static const EVP_MD *evp_hmac_md = NULL;
static char *evp_hmac_name = NULL;
static int EVP_HMAC_loop(void *args)
@ -986,6 +995,7 @@ static int EVP_HMAC_loop(void *args)
}
return count;
}
#endif
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
static const EVP_CIPHER *evp_cmac_cipher = NULL;
@ -1617,6 +1627,7 @@ int speed_main(int argc, char **argv)
doit[D_EVP] = 1;
break;
case OPT_HMAC:
#ifndef OPENSSL_NO_DEPRECATED_3_0
evp_hmac_md = EVP_get_digestbyname(opt_arg());
if (evp_hmac_md == NULL) {
BIO_printf(bio_err, "%s: %s is an unknown digest\n",
@ -1625,6 +1636,7 @@ int speed_main(int argc, char **argv)
}
doit[D_EVP_HMAC] = 1;
break;
#endif
case OPT_CMAC:
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
evp_cmac_cipher = EVP_get_cipherbyname(opt_arg());
@ -2301,6 +2313,7 @@ int speed_main(int argc, char **argv)
}
}
# ifndef OPENSSL_NO_DEPRECATED_3_0
if (doit[D_HMAC]) {
static const char hmac_key[] = "This is a key...";
int len = strlen(hmac_key);
@ -2325,6 +2338,7 @@ int speed_main(int argc, char **argv)
for (i = 0; i < loopargs_len; i++)
HMAC_CTX_free(loopargs[i].hctx);
}
# endif
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
if (doit[D_SHA1]) {
@ -2790,6 +2804,7 @@ int speed_main(int argc, char **argv)
}
}
#ifndef OPENSSL_NO_DEPRECATED_3_0
if (doit[D_EVP_HMAC] && evp_hmac_md != NULL) {
const char *md_name = OBJ_nid2ln(EVP_MD_type(evp_hmac_md));
@ -2807,6 +2822,7 @@ int speed_main(int argc, char **argv)
print_result(D_EVP_HMAC, testnum, count, d);
}
}
#endif
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
if (doit[D_EVP_CMAC] && evp_cmac_cipher != NULL) {
@ -3709,7 +3725,9 @@ int speed_main(int argc, char **argv)
OPENSSL_free(loopargs[i].secret_b);
#endif
}
#ifndef OPENSSL_NO_DEPRECATED_3_0
OPENSSL_free(evp_hmac_name);
#endif
#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
OPENSSL_free(evp_cmac_name);
#endif

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdio.h>
#include "internal/cryptlib.h"
#include <openssl/evp.h>

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdio.h>
#include "internal/cryptlib.h"
#include <openssl/crypto.h>

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdlib.h>
#include <string.h>
#include <openssl/crypto.h>

View File

@ -20,6 +20,10 @@ HMAC_size
#include <openssl/hmac.h>
Deprecated since OpenSSL 3.0, can be hidden entirely by defining
B<OPENSSL_API_COMPAT> with a suitable version value, see
L<openssl_user_macros(7)>:
unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
int key_len, const unsigned char *d, int n,
unsigned char *md, unsigned int *md_len);
@ -49,6 +53,10 @@ L<openssl_user_macros(7)>:
=head1 DESCRIPTION
All of the functions described on this page are deprecated. Applications should
instead use L<EVP_MAC_CTX_new(3)>, L<EVP_MAC_CTX_free(3)>, L<EVP_MAC_init(3)>,
L<EVP_MAC_update(3)> and L<EVP_MAC_final(3)>.
HMAC is a MAC (message authentication code), i.e. a keyed hash
function used for message authentication, which is based on a hash
function.
@ -138,6 +146,8 @@ L<SHA1(3)>, L<evp(7)>
=head1 HISTORY
All of these functions were deprecated in OpenSSL 3.0.
HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL 1.1.0.
HMAC_CTX_cleanup() existed in OpenSSL before version 1.1.0.

View File

@ -28,27 +28,28 @@
extern "C" {
# endif
size_t HMAC_size(const HMAC_CTX *e);
HMAC_CTX *HMAC_CTX_new(void);
int HMAC_CTX_reset(HMAC_CTX *ctx);
void HMAC_CTX_free(HMAC_CTX *ctx);
DEPRECATEDIN_3_0(size_t HMAC_size(const HMAC_CTX *e))
DEPRECATEDIN_3_0(HMAC_CTX *HMAC_CTX_new(void))
DEPRECATEDIN_3_0(int HMAC_CTX_reset(HMAC_CTX *ctx))
DEPRECATEDIN_3_0(void HMAC_CTX_free(HMAC_CTX *ctx))
DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
const EVP_MD *md))
const EVP_MD *md))
/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
const EVP_MD *md, ENGINE *impl);
/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data,
size_t len);
/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md,
unsigned int *len);
unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
const unsigned char *d, size_t n, unsigned char *md,
unsigned int *md_len);
__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx);
DEPRECATEDIN_3_0(int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
const EVP_MD *md, ENGINE *impl))
DEPRECATEDIN_3_0(int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data,
size_t len))
DEPRECATEDIN_3_0(int HMAC_Final(HMAC_CTX *ctx, unsigned char *md,
unsigned int *len))
DEPRECATEDIN_3_0(unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
int key_len, const unsigned char *d,
size_t n, unsigned char *md,
unsigned int *md_len))
DEPRECATEDIN_3_0(__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx))
void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags);
const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx);
DEPRECATEDIN_3_0(void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags))
DEPRECATEDIN_3_0(const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx))
# ifdef __cplusplus
}

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <openssl/core_numbers.h>
#include <openssl/core_names.h>
#include <openssl/params.h>

View File

@ -33,7 +33,6 @@ IF[{- !$disabled{tests} -}]
aborttest test_test \
sanitytest rsa_complex exdatatest bntest \
ectest ecstresstest ecdsatest gmdifftest pbelutest \
hmactest \
destest mdc2test \
dhtest enginetest \
ssltest_old dsatest dsa_no_digest_size_test exptest rsa_test \
@ -110,10 +109,6 @@ IF[{- !$disabled{tests} -}]
INCLUDE[pbelutest]=../include ../apps/include
DEPEND[pbelutest]=../libcrypto libtestutil.a
SOURCE[hmactest]=hmactest.c
INCLUDE[hmactest]=../include ../apps/include
DEPEND[hmactest]=../libcrypto libtestutil.a
SOURCE[mdc2test]=mdc2test.c
INCLUDE[mdc2test]=../include ../apps/include
DEPEND[mdc2test]=../libcrypto libtestutil.a
@ -499,7 +494,7 @@ IF[{- !$disabled{tests} -}]
tls13encryptiontest wpackettest ctype_internal_test \
rdrand_sanitytest property_test ideatest \
rsa_sp800_56b_test bn_internal_test \
rc2test rc4test rc5test \
rc2test rc4test rc5test hmactest \
asn1_dsa_internal_test
IF[{- !$disabled{poly1305} -}]
@ -565,6 +560,10 @@ IF[{- !$disabled{tests} -}]
INCLUDE[sparse_array_test]=../crypto/include ../include ../apps/include
DEPEND[sparse_array_test]=../libcrypto.a libtestutil.a
SOURCE[hmactest]=hmactest.c
INCLUDE[hmactest]=../include ../apps/include
DEPEND[hmactest]=../libcrypto.a libtestutil.a
SOURCE[siphash_internal_test]=siphash_internal_test.c
INCLUDE[siphash_internal_test]=.. ../include ../apps/include ../crypto/include
DEPEND[siphash_internal_test]=../libcrypto.a libtestutil.a

View File

@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
/*
* HMAC low level APIs are deprecated for public use, but still ok for internal
* use.
*/
#include "internal/deprecated.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

View File

@ -113,7 +113,7 @@ EC_POINT_mul 114 3_0_0 EXIST::FUNCTION:EC
WHIRLPOOL_Final 115 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
CMS_get1_ReceiptRequest 116 3_0_0 EXIST::FUNCTION:CMS
BIO_sock_non_fatal_error 117 3_0_0 EXIST::FUNCTION:SOCK
HMAC_Update 118 3_0_0 EXIST::FUNCTION:
HMAC_Update 118 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
i2d_PKCS12 119 3_0_0 EXIST::FUNCTION:
EVP_BytesToKey 120 3_0_0 EXIST::FUNCTION:
ENGINE_set_default_pkey_asn1_meths 121 3_0_0 EXIST::FUNCTION:ENGINE
@ -394,7 +394,7 @@ d2i_OCSP_REVOKEDINFO 401 3_0_0 EXIST::FUNCTION:OCSP
ASN1_STRING_print_ex_fp 402 3_0_0 EXIST::FUNCTION:STDIO
PKCS7_SIGNED_new 403 3_0_0 EXIST::FUNCTION:
CMS_get0_eContentType 404 3_0_0 EXIST::FUNCTION:CMS
HMAC_Final 405 3_0_0 EXIST::FUNCTION:
HMAC_Final 405 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
X509_CRL_delete_ext 406 3_0_0 EXIST::FUNCTION:
TS_TST_INFO_get_ordering 407 3_0_0 EXIST::FUNCTION:TS
X509_get_extended_key_usage 408 3_0_0 EXIST::FUNCTION:
@ -1234,7 +1234,7 @@ CMS_sign 1261 3_0_0 EXIST::FUNCTION:CMS
X509_STORE_add_cert 1262 3_0_0 EXIST::FUNCTION:
EC_GROUP_precompute_mult 1263 3_0_0 EXIST::FUNCTION:EC
d2i_DISPLAYTEXT 1265 3_0_0 EXIST::FUNCTION:
HMAC_CTX_copy 1266 3_0_0 EXIST::FUNCTION:
HMAC_CTX_copy 1266 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
CRYPTO_gcm128_init 1267 3_0_0 EXIST::FUNCTION:
i2d_X509_CINF 1268 3_0_0 EXIST::FUNCTION:
X509_REVOKED_delete_ext 1269 3_0_0 EXIST::FUNCTION:
@ -1291,7 +1291,7 @@ i2d_PKCS12_fp 1319 3_0_0 EXIST::FUNCTION:STDIO
EVP_PKEY_meth_get_init 1320 3_0_0 EXIST::FUNCTION:
X509_check_trust 1321 3_0_0 EXIST::FUNCTION:
b2i_PrivateKey 1322 3_0_0 EXIST::FUNCTION:DSA
HMAC_Init_ex 1323 3_0_0 EXIST::FUNCTION:
HMAC_Init_ex 1323 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
SMIME_read_CMS 1324 3_0_0 EXIST::FUNCTION:CMS
X509_subject_name_cmp 1325 3_0_0 EXIST::FUNCTION:
CRYPTO_ocb128_finish 1326 3_0_0 EXIST::FUNCTION:OCB
@ -1405,7 +1405,7 @@ ERR_lib_error_string 1437 3_0_0 EXIST::FUNCTION:
X509_ATTRIBUTE_set1_object 1438 3_0_0 EXIST::FUNCTION:
i2d_ECPrivateKey_bio 1439 3_0_0 EXIST::FUNCTION:EC
BN_GENCB_free 1440 3_0_0 EXIST::FUNCTION:
HMAC_size 1441 3_0_0 EXIST::FUNCTION:
HMAC_size 1441 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
EVP_PKEY_get0_DH 1442 3_0_0 EXIST::FUNCTION:DH
d2i_OCSP_CRLID 1443 3_0_0 EXIST::FUNCTION:OCSP
EVP_CIPHER_CTX_set_padding 1444 3_0_0 EXIST::FUNCTION:
@ -2029,7 +2029,7 @@ MDC2_Init 2075 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_
i2o_SCT 2076 3_0_0 EXIST::FUNCTION:CT
d2i_TS_STATUS_INFO 2077 3_0_0 EXIST::FUNCTION:TS
ERR_error_string_n 2078 3_0_0 EXIST::FUNCTION:
HMAC 2079 3_0_0 EXIST::FUNCTION:
HMAC 2079 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
BN_mul 2080 3_0_0 EXIST::FUNCTION:
BN_get0_nist_prime_384 2081 3_0_0 EXIST::FUNCTION:
X509_VERIFY_PARAM_set1_ip_asc 2082 3_0_0 EXIST::FUNCTION:
@ -2262,7 +2262,7 @@ PKCS12_SAFEBAG_get1_crl 2309 3_0_0 EXIST::FUNCTION:
ASN1_STRING_get_default_mask 2310 3_0_0 EXIST::FUNCTION:
X509_alias_set1 2311 3_0_0 EXIST::FUNCTION:
ASN1_item_unpack 2312 3_0_0 EXIST::FUNCTION:
HMAC_CTX_free 2313 3_0_0 EXIST::FUNCTION:
HMAC_CTX_free 2313 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
EC_POINT_new 2314 3_0_0 EXIST::FUNCTION:EC
PKCS7_ISSUER_AND_SERIAL_digest 2315 3_0_0 EXIST::FUNCTION:
EVP_des_ofb 2316 3_0_0 EXIST::FUNCTION:DES
@ -2914,7 +2914,7 @@ EVP_PKEY_set1_DH 2976 3_0_0 EXIST::FUNCTION:DH
DH_get_ex_data 2977 3_0_0 EXIST::FUNCTION:DH
CRYPTO_secure_malloc 2978 3_0_0 EXIST::FUNCTION:
TS_RESP_get_status_info 2979 3_0_0 EXIST::FUNCTION:TS
HMAC_CTX_new 2980 3_0_0 EXIST::FUNCTION:
HMAC_CTX_new 2980 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
ENGINE_get_default_DH 2981 3_0_0 EXIST::FUNCTION:ENGINE
ECDSA_do_verify 2982 3_0_0 EXIST::FUNCTION:EC
DSO_flags 2983 3_0_0 EXIST::FUNCTION:
@ -3394,7 +3394,7 @@ TS_TST_INFO_set_msg_imprint 3464 3_0_0 EXIST::FUNCTION:TS
CRYPTO_get_ex_data 3465 3_0_0 EXIST::FUNCTION:
X509_PURPOSE_get0_sname 3466 3_0_0 EXIST::FUNCTION:
RSA_verify_PKCS1_PSS 3467 3_0_0 EXIST::FUNCTION:RSA
HMAC_CTX_reset 3468 3_0_0 EXIST::FUNCTION:
HMAC_CTX_reset 3468 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
EVP_PKEY_meth_set_init 3469 3_0_0 EXIST::FUNCTION:
X509_REQ_extension_nid 3470 3_0_0 EXIST::FUNCTION:
ENGINE_up_ref 3471 3_0_0 EXIST::FUNCTION:ENGINE
@ -3406,7 +3406,7 @@ SCT_set_source 3476 3_0_0 EXIST::FUNCTION:CT
DES_set_odd_parity 3477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
CMAC_CTX_free 3478 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
d2i_ESS_ISSUER_SERIAL 3479 3_0_0 EXIST::FUNCTION:
HMAC_CTX_set_flags 3480 3_0_0 EXIST::FUNCTION:
HMAC_CTX_set_flags 3480 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
d2i_PKCS8_bio 3481 3_0_0 EXIST::FUNCTION:
OCSP_ONEREQ_get_ext_count 3482 3_0_0 EXIST::FUNCTION:OCSP
PEM_read_bio_PKCS8_PRIV_KEY_INFO 3483 3_0_0 EXIST::FUNCTION:
@ -4004,7 +4004,7 @@ X509_get_pathlen 4092 3_0_0 EXIST::FUNCTION:
ECDSA_SIG_set0 4093 3_0_0 EXIST::FUNCTION:EC
DSA_SIG_set0 4094 3_0_0 EXIST::FUNCTION:DSA
EVP_PKEY_get0_hmac 4095 3_0_0 EXIST::FUNCTION:
HMAC_CTX_get_md 4096 3_0_0 EXIST::FUNCTION:
HMAC_CTX_get_md 4096 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
NAME_CONSTRAINTS_check_CN 4097 3_0_0 EXIST::FUNCTION:
OCSP_resp_get0_id 4098 3_0_0 EXIST::FUNCTION:OCSP
OCSP_resp_get0_certs 4099 3_0_0 EXIST::FUNCTION:OCSP