提交 ff1f7cde 编写于 作者: A Aaron Thompson 提交者: Dmitry Belyavskiy

Add ex_data to EVP_PKEY.

Reviewed-by: NMatt Caswell <matt@openssl.org>
Reviewed-by: NDmitry Belyavskiy <beldmit@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/11515)
上级 0437435a
...@@ -96,6 +96,16 @@ int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode) ...@@ -96,6 +96,16 @@ int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode)
return 0; return 0;
} }
int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg)
{
return CRYPTO_set_ex_data(&key->ex_data, idx, arg);
}
void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx)
{
return CRYPTO_get_ex_data(&key->ex_data, idx);
}
int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from) int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from)
{ {
/* /*
...@@ -1090,10 +1100,20 @@ EVP_PKEY *EVP_PKEY_new(void) ...@@ -1090,10 +1100,20 @@ EVP_PKEY *EVP_PKEY_new(void)
ret->lock = CRYPTO_THREAD_lock_new(); ret->lock = CRYPTO_THREAD_lock_new();
if (ret->lock == NULL) { if (ret->lock == NULL) {
EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE); EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE);
OPENSSL_free(ret); goto err;
return NULL; }
#ifndef FIPS_MODE
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_EVP_PKEY, ret, &ret->ex_data)) {
EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE);
goto err;
} }
#endif
return ret; return ret;
err:
CRYPTO_THREAD_lock_free(ret->lock);
OPENSSL_free(ret);
return NULL;
} }
/* /*
...@@ -1328,6 +1348,9 @@ void EVP_PKEY_free(EVP_PKEY *x) ...@@ -1328,6 +1348,9 @@ void EVP_PKEY_free(EVP_PKEY *x)
return; return;
REF_ASSERT_ISNT(i < 0); REF_ASSERT_ISNT(i < 0);
evp_pkey_free_it(x); evp_pkey_free_it(x);
#ifndef FIPS_MODE
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_EVP_PKEY, x, &x->ex_data);
#endif
CRYPTO_THREAD_lock_free(x->lock); CRYPTO_THREAD_lock_free(x->lock);
#ifndef FIPS_MODE #ifndef FIPS_MODE
sk_X509_ATTRIBUTE_pop_free(x->attributes, X509_ATTRIBUTE_free); sk_X509_ATTRIBUTE_pop_free(x->attributes, X509_ATTRIBUTE_free);
......
...@@ -9,6 +9,7 @@ DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data, ...@@ -9,6 +9,7 @@ DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data,
ECDH_get_ex_new_index, ECDH_set_ex_data, ECDH_get_ex_data, ECDH_get_ex_new_index, ECDH_set_ex_data, ECDH_get_ex_data,
EC_KEY_get_ex_new_index, EC_KEY_set_ex_data, EC_KEY_get_ex_data, EC_KEY_get_ex_new_index, EC_KEY_set_ex_data, EC_KEY_get_ex_data,
ENGINE_get_ex_new_index, ENGINE_set_ex_data, ENGINE_get_ex_data, ENGINE_get_ex_new_index, ENGINE_set_ex_data, ENGINE_get_ex_data,
EVP_PKEY_get_ex_new_index, EVP_PKEY_set_ex_data, EVP_PKEY_get_ex_data,
RAND_DRBG_set_ex_data, RAND_DRBG_get_ex_data, RAND_DRBG_get_ex_new_index, RAND_DRBG_set_ex_data, RAND_DRBG_get_ex_data, RAND_DRBG_get_ex_new_index,
RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data, RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data,
RSA_set_app_data, RSA_get_app_data, RSA_set_app_data, RSA_get_app_data,
......
...@@ -49,6 +49,7 @@ The specific structures are: ...@@ -49,6 +49,7 @@ The specific structures are:
DSA DSA
EC_KEY EC_KEY
ENGINE ENGINE
EVP_PKEY
RAND_DRBG RAND_DRBG
RSA RSA
SSL SSL
......
...@@ -557,6 +557,9 @@ struct evp_pkey_st { ...@@ -557,6 +557,9 @@ struct evp_pkey_st {
CRYPTO_RWLOCK *lock; CRYPTO_RWLOCK *lock;
STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
int save_parameters; int save_parameters;
#ifndef FIPS_MODE
CRYPTO_EX_DATA ex_data;
#endif
/* == Provider attributes == */ /* == Provider attributes == */
......
...@@ -192,7 +192,8 @@ DEFINE_STACK_OF(void) ...@@ -192,7 +192,8 @@ DEFINE_STACK_OF(void)
# define CRYPTO_EX_INDEX_RAND_DRBG 15 # define CRYPTO_EX_INDEX_RAND_DRBG 15
# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG # define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG
# define CRYPTO_EX_INDEX_OPENSSL_CTX 16 # define CRYPTO_EX_INDEX_OPENSSL_CTX 16
# define CRYPTO_EX_INDEX__COUNT 17 # define CRYPTO_EX_INDEX_EVP_PKEY 17
# define CRYPTO_EX_INDEX__COUNT 18
typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad,
int idx, long argl, void *argp); int idx, long argl, void *argp);
......
...@@ -1616,6 +1616,11 @@ int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); ...@@ -1616,6 +1616,11 @@ int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx);
int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx);
# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \
CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef)
int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg);
void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx);
void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
......
...@@ -5045,3 +5045,5 @@ CT_POLICY_EVAL_CTX_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT ...@@ -5045,3 +5045,5 @@ CT_POLICY_EVAL_CTX_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT
CTLOG_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT CTLOG_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT
CTLOG_new_from_base64_with_libctx ? 3_0_0 EXIST::FUNCTION:CT CTLOG_new_from_base64_with_libctx ? 3_0_0 EXIST::FUNCTION:CT
CTLOG_STORE_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT CTLOG_STORE_new_with_libctx ? 3_0_0 EXIST::FUNCTION:CT
EVP_PKEY_set_ex_data ? 3_0_0 EXIST::FUNCTION:
EVP_PKEY_get_ex_data ? 3_0_0 EXIST::FUNCTION:
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册