Skip to content

Commit 7bc0fdd

Browse files
committed
Make the EVP_PKEY_get0* functions have a const return type
OTC have decided that the EVP_PKEY_get0* functions should have a const return type. This is a breaking change to emphasise that these values should be considered as immutable. Reviewed-by: Richard Levitte <[email protected]> Reviewed-by: Shane Lontis <[email protected]> Reviewed-by: Paul Dale <[email protected]> (Merged from #14319)
1 parent cc57dc9 commit 7bc0fdd

File tree

14 files changed

+125
-51
lines changed

14 files changed

+125
-51
lines changed

CHANGES.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,21 @@ OpenSSL 3.0
3636
then these functions now return a cached copy of the key. Changes to
3737
the internal provider key that take place after the first time the cached key
3838
is accessed will not be reflected back in the cached copy. Similarly any
39-
changed made to the cached copy by application code will not be reflected
39+
changes made to the cached copy by application code will not be reflected
4040
back in the internal provider key.
4141

42+
For the above reasons the keys returned from these functions should typically
43+
be treated as read-only. To emphasise this the value returned from
44+
EVP_PKEY_get0(), EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(),
45+
EVP_PKEY_get0_EC_KEY() and EVP_PKEY_get0_DH() has been made const. This may
46+
break some existing code. Applications broken by this change should be
47+
modified. The preferred solution is to refactor the code to avoid the use of
48+
these deprecated functions. Failing this the code should be modified to use a
49+
const pointer instead. The EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(),
50+
EVP_PKEY_get1_EC_KEY() and EVP_PKEY_get1_DH() functions continue to return a
51+
non-const pointer to enable them to be "freed". However they should also be
52+
treated as read-only.
53+
4254
*Matt Caswell*
4355

4456
* A number of functions handling low level keys or engines were deprecated

crypto/dh/dh_ameth.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,10 @@ static int dh_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
433433
{
434434
switch (op) {
435435
case ASN1_PKEY_CTRL_SET1_TLS_ENCPT:
436-
return ossl_dh_buf2key(EVP_PKEY_get0_DH(pkey), arg2, arg1);
436+
/* We should only be here if we have a legacy key */
437+
if (!ossl_assert(evp_pkey_is_legacy(pkey)))
438+
return 0;
439+
return ossl_dh_buf2key(evp_pkey_get0_DH_int(pkey), arg2, arg1);
437440
case ASN1_PKEY_CTRL_GET1_TLS_ENCPT:
438441
return ossl_dh_key2buf(EVP_PKEY_get0_DH(pkey), arg2, 0, 1);
439442
default:

crypto/ec/ec_ameth.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,10 @@ static int ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
482482
return 1;
483483

484484
case ASN1_PKEY_CTRL_SET1_TLS_ENCPT:
485-
return EC_KEY_oct2key(EVP_PKEY_get0_EC_KEY(pkey), arg2, arg1, NULL);
485+
/* We should only be here if we have a legacy key */
486+
if (!ossl_assert(evp_pkey_is_legacy(pkey)))
487+
return 0;
488+
return EC_KEY_oct2key(evp_pkey_get0_EC_KEY_int(pkey), arg2, arg1, NULL);
486489

487490
case ASN1_PKEY_CTRL_GET1_TLS_ENCPT:
488491
return EC_KEY_key2buf(EVP_PKEY_get0_EC_KEY(pkey),

crypto/evp/ctrl_params_translate.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,7 +1481,7 @@ static int get_payload_group_name(enum state state,
14811481
#ifndef OPENSSL_NO_DH
14821482
case EVP_PKEY_DH:
14831483
{
1484-
DH *dh = EVP_PKEY_get0_DH(pkey);
1484+
const DH *dh = EVP_PKEY_get0_DH(pkey);
14851485
int uid = DH_get_nid(dh);
14861486

14871487
if (uid != NID_undef) {
@@ -1531,7 +1531,7 @@ static int get_payload_private_key(enum state state,
15311531
#ifndef OPENSSL_NO_DH
15321532
case EVP_PKEY_DH:
15331533
{
1534-
DH *dh = EVP_PKEY_get0_DH(pkey);
1534+
const DH *dh = EVP_PKEY_get0_DH(pkey);
15351535

15361536
ctx->p2 = (BIGNUM *)DH_get0_priv_key(dh);
15371537
}
@@ -1540,7 +1540,7 @@ static int get_payload_private_key(enum state state,
15401540
#ifndef OPENSSL_NO_EC
15411541
case EVP_PKEY_EC:
15421542
{
1543-
EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
1543+
const EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
15441544

15451545
ctx->p2 = (BIGNUM *)EC_KEY_get0_private_key(ec);
15461546
}
@@ -1590,7 +1590,7 @@ static int get_payload_public_key(enum state state,
15901590
#ifndef OPENSSL_NO_EC
15911591
case EVP_PKEY_EC:
15921592
if (ctx->params->data_type == OSSL_PARAM_OCTET_STRING) {
1593-
EC_KEY *eckey = EVP_PKEY_get0_EC_KEY(pkey);
1593+
const EC_KEY *eckey = EVP_PKEY_get0_EC_KEY(pkey);
15941594
BN_CTX *bnctx = BN_CTX_new_ex(ossl_ec_key_get_libctx(eckey));
15951595
const EC_GROUP *ecg = EC_KEY_get0_group(eckey);
15961596
const EC_POINT *point = EC_KEY_get0_public_key(eckey);

crypto/evp/p_dec.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <openssl/evp.h>
1717
#include <openssl/objects.h>
1818
#include <openssl/x509.h>
19+
#include "crypto/evp.h"
1920

2021
int EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek, int ekl,
2122
EVP_PKEY *priv)
@@ -28,7 +29,7 @@ int EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek, int ekl,
2829
}
2930

3031
ret =
31-
RSA_private_decrypt(ekl, ek, key, EVP_PKEY_get0_RSA(priv),
32+
RSA_private_decrypt(ekl, ek, key, evp_pkey_get0_RSA_int(priv),
3233
RSA_PKCS1_PADDING);
3334
err:
3435
return ret;

crypto/evp/p_enc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <openssl/evp.h>
1717
#include <openssl/objects.h>
1818
#include <openssl/x509.h>
19+
#include "crypto/evp.h"
1920

2021
int EVP_PKEY_encrypt_old(unsigned char *ek, const unsigned char *key,
2122
int key_len, EVP_PKEY *pubk)
@@ -26,8 +27,9 @@ int EVP_PKEY_encrypt_old(unsigned char *ek, const unsigned char *key,
2627
ERR_raise(ERR_LIB_EVP, EVP_R_PUBLIC_KEY_NOT_RSA);
2728
goto err;
2829
}
30+
2931
ret =
30-
RSA_public_encrypt(key_len, key, ek, EVP_PKEY_get0_RSA(pubk),
32+
RSA_public_encrypt(key_len, key, ek, evp_pkey_get0_RSA_int(pubk),
3133
RSA_PKCS1_PADDING);
3234
err:
3335
return ret;

crypto/evp/p_legacy.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key)
3131
return ret;
3232
}
3333

34-
RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey)
34+
RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey)
3535
{
3636
if (pkey->type != EVP_PKEY_RSA && pkey->type != EVP_PKEY_RSA_PSS) {
3737
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY);
@@ -40,9 +40,14 @@ RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey)
4040
return evp_pkey_get_legacy((EVP_PKEY *)pkey);
4141
}
4242

43+
const RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey)
44+
{
45+
return evp_pkey_get0_RSA_int(pkey);
46+
}
47+
4348
RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey)
4449
{
45-
RSA *ret = EVP_PKEY_get0_RSA(pkey);
50+
RSA *ret = evp_pkey_get0_RSA_int(pkey);
4651

4752
if (ret != NULL)
4853
RSA_up_ref(ret);
@@ -59,18 +64,23 @@ int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key)
5964
return ret;
6065
}
6166

62-
EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey)
67+
EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey)
6368
{
6469
if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) {
65-
EVPerr(EVP_F_EVP_PKEY_GET0_EC_KEY, EVP_R_EXPECTING_A_EC_KEY);
70+
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_EC_KEY);
6671
return NULL;
6772
}
6873
return evp_pkey_get_legacy((EVP_PKEY *)pkey);
6974
}
7075

76+
const EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey)
77+
{
78+
return evp_pkey_get0_EC_KEY_int(pkey);
79+
}
80+
7181
EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey)
7282
{
73-
EC_KEY *ret = EVP_PKEY_get0_EC_KEY(pkey);
83+
EC_KEY *ret = evp_pkey_get0_EC_KEY_int(pkey);
7484

7585
if (ret != NULL)
7686
EC_KEY_up_ref(ret);

crypto/evp/p_lib.c

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key)
740740
}
741741
# endif
742742

743-
void *EVP_PKEY_get0(const EVP_PKEY *pkey)
743+
const void *EVP_PKEY_get0(const EVP_PKEY *pkey)
744744
{
745745
if (pkey == NULL)
746746
return NULL;
@@ -750,7 +750,7 @@ void *EVP_PKEY_get0(const EVP_PKEY *pkey)
750750

751751
const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len)
752752
{
753-
ASN1_OCTET_STRING *os = NULL;
753+
const ASN1_OCTET_STRING *os = NULL;
754754
if (pkey->type != EVP_PKEY_HMAC) {
755755
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY);
756756
return NULL;
@@ -763,7 +763,7 @@ const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len)
763763
# ifndef OPENSSL_NO_POLY1305
764764
const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len)
765765
{
766-
ASN1_OCTET_STRING *os = NULL;
766+
const ASN1_OCTET_STRING *os = NULL;
767767
if (pkey->type != EVP_PKEY_POLY1305) {
768768
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY);
769769
return NULL;
@@ -777,7 +777,7 @@ const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len)
777777
# ifndef OPENSSL_NO_SIPHASH
778778
const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len)
779779
{
780-
ASN1_OCTET_STRING *os = NULL;
780+
const ASN1_OCTET_STRING *os = NULL;
781781

782782
if (pkey->type != EVP_PKEY_SIPHASH) {
783783
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY);
@@ -790,7 +790,7 @@ const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len)
790790
# endif
791791

792792
# ifndef OPENSSL_NO_DSA
793-
DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey)
793+
static DSA *evp_pkey_get0_DSA_int(const EVP_PKEY *pkey)
794794
{
795795
if (pkey->type != EVP_PKEY_DSA) {
796796
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_DSA_KEY);
@@ -799,6 +799,11 @@ DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey)
799799
return evp_pkey_get_legacy((EVP_PKEY *)pkey);
800800
}
801801

802+
const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey)
803+
{
804+
return evp_pkey_get0_DSA_int(pkey);
805+
}
806+
802807
int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key)
803808
{
804809
int ret = EVP_PKEY_assign_DSA(pkey, key);
@@ -808,7 +813,8 @@ int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key)
808813
}
809814
DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey)
810815
{
811-
DSA *ret = EVP_PKEY_get0_DSA(pkey);
816+
DSA *ret = evp_pkey_get0_DSA_int(pkey);
817+
812818
if (ret != NULL)
813819
DSA_up_ref(ret);
814820
return ret;
@@ -818,7 +824,7 @@ DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey)
818824

819825
#ifndef FIPS_MODULE
820826
# ifndef OPENSSL_NO_EC
821-
static ECX_KEY *evp_pkey_get0_ECX_KEY(const EVP_PKEY *pkey, int type)
827+
static const ECX_KEY *evp_pkey_get0_ECX_KEY(const EVP_PKEY *pkey, int type)
822828
{
823829
if (EVP_PKEY_base_id(pkey) != type) {
824830
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_ECX_KEY);
@@ -829,7 +835,7 @@ static ECX_KEY *evp_pkey_get0_ECX_KEY(const EVP_PKEY *pkey, int type)
829835

830836
static ECX_KEY *evp_pkey_get1_ECX_KEY(EVP_PKEY *pkey, int type)
831837
{
832-
ECX_KEY *ret = evp_pkey_get0_ECX_KEY(pkey, type);
838+
ECX_KEY *ret = (ECX_KEY *)evp_pkey_get0_ECX_KEY(pkey, type);
833839
if (ret != NULL)
834840
ossl_ecx_key_up_ref(ret);
835841
return ret;
@@ -859,7 +865,7 @@ int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key)
859865
return ret;
860866
}
861867

862-
DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey)
868+
DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey)
863869
{
864870
if (pkey->type != EVP_PKEY_DH && pkey->type != EVP_PKEY_DHX) {
865871
ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_DH_KEY);
@@ -868,9 +874,15 @@ DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey)
868874
return evp_pkey_get_legacy((EVP_PKEY *)pkey);
869875
}
870876

877+
const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey)
878+
{
879+
return evp_pkey_get0_DH_int(pkey);
880+
}
881+
871882
DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey)
872883
{
873-
DH *ret = EVP_PKEY_get0_DH(pkey);
884+
DH *ret = evp_pkey_get0_DH_int(pkey);
885+
874886
if (ret != NULL)
875887
DH_up_ref(ret);
876888
return ret;
@@ -2166,7 +2178,7 @@ int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey)
21662178
|| pkey->keydata == NULL) {
21672179
#ifndef OPENSSL_NO_EC
21682180
/* Might work through the legacy route */
2169-
EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
2181+
const EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
21702182

21712183
if (ec == NULL)
21722184
return 0;
@@ -2206,7 +2218,7 @@ int EVP_PKEY_get_field_type(const EVP_PKEY *pkey)
22062218
|| pkey->keydata == NULL) {
22072219
#ifndef OPENSSL_NO_EC
22082220
/* Might work through the legacy route */
2209-
EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
2221+
const EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
22102222
const EC_GROUP *grp;
22112223

22122224
if (ec == NULL)

crypto/pem/pvkfmt.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,12 +450,12 @@ static void write_lebn(unsigned char **out, const BIGNUM *bn, int len)
450450
*out += len;
451451
}
452452

453-
static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *magic);
454-
static void write_rsa(unsigned char **out, RSA *rsa, int ispub);
453+
static int check_bitlen_rsa(const RSA *rsa, int ispub, unsigned int *magic);
454+
static void write_rsa(unsigned char **out, const RSA *rsa, int ispub);
455455

456456
#ifndef OPENSSL_NO_DSA
457-
static int check_bitlen_dsa(DSA *dsa, int ispub, unsigned int *magic);
458-
static void write_dsa(unsigned char **out, DSA *dsa, int ispub);
457+
static int check_bitlen_dsa(const DSA *dsa, int ispub, unsigned int *magic);
458+
static void write_dsa(unsigned char **out, const DSA *dsa, int ispub);
459459
#endif
460460

461461
static int do_i2b(unsigned char **out, const EVP_PKEY *pk, int ispub)
@@ -542,7 +542,7 @@ static int do_i2b_bio(BIO *out, const EVP_PKEY *pk, int ispub)
542542
return -1;
543543
}
544544

545-
static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *pmagic)
545+
static int check_bitlen_rsa(const RSA *rsa, int ispub, unsigned int *pmagic)
546546
{
547547
int nbyte, hnbyte, bitlen;
548548
const BIGNUM *e;
@@ -582,7 +582,7 @@ static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *pmagic)
582582
return 0;
583583
}
584584

585-
static void write_rsa(unsigned char **out, RSA *rsa, int ispub)
585+
static void write_rsa(unsigned char **out, const RSA *rsa, int ispub)
586586
{
587587
int nbyte, hnbyte;
588588
const BIGNUM *n, *d, *e, *p, *q, *iqmp, *dmp1, *dmq1;
@@ -605,7 +605,7 @@ static void write_rsa(unsigned char **out, RSA *rsa, int ispub)
605605
}
606606

607607
#ifndef OPENSSL_NO_DSA
608-
static int check_bitlen_dsa(DSA *dsa, int ispub, unsigned int *pmagic)
608+
static int check_bitlen_dsa(const DSA *dsa, int ispub, unsigned int *pmagic)
609609
{
610610
int bitlen;
611611
const BIGNUM *p = NULL, *q = NULL, *g = NULL;
@@ -633,7 +633,7 @@ static int check_bitlen_dsa(DSA *dsa, int ispub, unsigned int *pmagic)
633633
return 0;
634634
}
635635

636-
static void write_dsa(unsigned char **out, DSA *dsa, int ispub)
636+
static void write_dsa(unsigned char **out, const DSA *dsa, int ispub)
637637
{
638638
int nbyte;
639639
const BIGNUM *p = NULL, *q = NULL, *g = NULL;

doc/man3/EVP_PKEY_set1_RSA.pod

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ L<openssl_user_macros(7)>:
3838
const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
3939
const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
4040
const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
41-
RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
42-
DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
43-
DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
44-
EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
41+
const RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
42+
const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
43+
const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
44+
const EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
4545

4646
int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
4747
int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
@@ -143,6 +143,17 @@ EVP_PKEY_id(), EVP_PKEY_base_id(), EVP_PKEY_type(), EVP_PKEY_set_alias_type()
143143

144144
For EVP_PKEY key type checking purposes, L<EVP_PKEY_is_a(3)> is more generic.
145145

146+
The keys returned from the functions EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(),
147+
EVP_PKEY_get0_DH() and EVP_PKEY_get0_EC_KEY() were changed to have a "const"
148+
return type in OpenSSL 3.0. As described above the keys returned may be cached
149+
copies of the key held in a provider. Due to this, and unlike in earlier
150+
versions of OpenSSL, they should be considered read-only copies of the key.
151+
Updates to these keys will not be reflected back in the provider side key. The
152+
EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
153+
EVP_PKEY_get1_EC_KEY() functions were not changed to have a "const" return type
154+
in order that applications can "free" the return value. However applications
155+
should still consider them as read-only copies.
156+
146157
=head1 NOTES
147158

148159
In accordance with the OpenSSL naming convention the key obtained
@@ -216,6 +227,9 @@ EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash,
216227
EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine and EVP_PKEY_get0_engine were
217228
deprecated in OpenSSL 3.0.
218229

230+
The return value from EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH,
231+
EVP_PKEY_get0_EC_KEY were made const in OpenSSL 3.0.
232+
219233
=head1 COPYRIGHT
220234

221235
Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.

0 commit comments

Comments
 (0)