mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 20:24:39 +02:00
EVP_PKEY_get1/set1_EC_KEY: modify for EC_KEY_up_ref support
This commit is contained in:
@@ -6941,42 +6941,46 @@ WOLFSSL_EC_KEY *wolfSSL_EVP_PKEY_get0_EC_KEY(WOLFSSL_EVP_PKEY *pkey)
|
|||||||
|
|
||||||
WOLFSSL_EC_KEY* wolfSSL_EVP_PKEY_get1_EC_KEY(WOLFSSL_EVP_PKEY* key)
|
WOLFSSL_EC_KEY* wolfSSL_EVP_PKEY_get1_EC_KEY(WOLFSSL_EVP_PKEY* key)
|
||||||
{
|
{
|
||||||
WOLFSSL_EC_KEY* local;
|
WOLFSSL_EC_KEY* local = NULL;
|
||||||
WOLFSSL_ENTER("wolfSSL_EVP_PKEY_get1_EC_KEY");
|
WOLFSSL_ENTER("wolfSSL_EVP_PKEY_get1_EC_KEY");
|
||||||
|
|
||||||
if (key == NULL) {
|
if (key == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (key->type == EVP_PKEY_EC) {
|
||||||
|
if (key->ecc != NULL) {
|
||||||
|
if (wolfSSL_EC_KEY_up_ref(key->ecc) != WOLFSSL_SUCCESS) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
local = key->ecc;
|
||||||
|
}
|
||||||
|
else {
|
||||||
local = wolfSSL_EC_KEY_new();
|
local = wolfSSL_EC_KEY_new();
|
||||||
if (local == NULL) {
|
if (local == NULL) {
|
||||||
WOLFSSL_MSG("Error creating a new WOLFSSL_EC_KEY structure");
|
WOLFSSL_MSG("Error creating a new WOLFSSL_EC_KEY structure");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key->type == EVP_PKEY_EC) {
|
if (wolfSSL_EC_KEY_LoadDer(local,
|
||||||
if (wolfSSL_EC_KEY_LoadDer(local, (const unsigned char*)key->pkey.ptr,
|
(const unsigned char*)key->pkey.ptr,
|
||||||
key->pkey_sz) != WOLFSSL_SUCCESS) {
|
key->pkey_sz) != WOLFSSL_SUCCESS) {
|
||||||
/* now try public key */
|
/* now try public key */
|
||||||
if (wolfSSL_EC_KEY_LoadDer_ex(local,
|
if (wolfSSL_EC_KEY_LoadDer_ex(local,
|
||||||
(const unsigned char*)key->pkey.ptr,
|
(const unsigned char*)key->pkey.ptr, key->pkey_sz,
|
||||||
key->pkey_sz, WOLFSSL_EC_KEY_LOAD_PUBLIC) != WOLFSSL_SUCCESS) {
|
WOLFSSL_EC_KEY_LOAD_PUBLIC) != WOLFSSL_SUCCESS) {
|
||||||
|
|
||||||
wolfSSL_EC_KEY_free(local);
|
wolfSSL_EC_KEY_free(local);
|
||||||
local = NULL;
|
local = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
WOLFSSL_MSG("WOLFSSL_EVP_PKEY does not hold an EC key");
|
WOLFSSL_MSG("WOLFSSL_EVP_PKEY does not hold an EC key");
|
||||||
wolfSSL_EC_KEY_free(local);
|
wolfSSL_EC_KEY_free(local);
|
||||||
local = NULL;
|
local = NULL;
|
||||||
}
|
}
|
||||||
#ifdef OPENSSL_ALL
|
|
||||||
if (!local && key->ecc) {
|
|
||||||
local = wolfSSL_EC_KEY_dup(key->ecc);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return local;
|
return local;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ECC */
|
#endif /* HAVE_ECC */
|
||||||
@@ -7225,8 +7229,11 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
|
|||||||
int wolfSSL_EVP_PKEY_set1_EC_KEY(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_EC_KEY *key)
|
int wolfSSL_EVP_PKEY_set1_EC_KEY(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_EC_KEY *key)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
if((pkey == NULL) || (key ==NULL))return WOLFSSL_FAILURE;
|
|
||||||
WOLFSSL_ENTER("wolfSSL_EVP_PKEY_set1_EC_KEY");
|
WOLFSSL_ENTER("wolfSSL_EVP_PKEY_set1_EC_KEY");
|
||||||
|
|
||||||
|
if (pkey == NULL || key == NULL) {
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
if (pkey->rsa != NULL && pkey->ownRsa == 1) {
|
if (pkey->rsa != NULL && pkey->ownRsa == 1) {
|
||||||
wolfSSL_RSA_free(pkey->rsa);
|
wolfSSL_RSA_free(pkey->rsa);
|
||||||
@@ -7245,18 +7252,24 @@ int wolfSSL_EVP_PKEY_set1_EC_KEY(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_EC_KEY *key)
|
|||||||
}
|
}
|
||||||
pkey->ownDh = 0;
|
pkey->ownDh = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (wolfSSL_EC_KEY_up_ref(key) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_EC_KEY_up_ref failed");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
if (pkey->ecc != NULL && pkey->ownEcc == 1) {
|
if (pkey->ecc != NULL && pkey->ownEcc == 1) {
|
||||||
wolfSSL_EC_KEY_free(pkey->ecc);
|
wolfSSL_EC_KEY_free(pkey->ecc);
|
||||||
}
|
}
|
||||||
pkey->ecc = key;
|
pkey->ecc = key;
|
||||||
pkey->ownEcc = 0; /* pkey does not own EC key */
|
pkey->ownEcc = 1; /* doesn't own EC_KEY but needs to call free on it */
|
||||||
pkey->type = EVP_PKEY_EC;
|
pkey->type = EVP_PKEY_EC;
|
||||||
return ECC_populate_EVP_PKEY(pkey, key);
|
return ECC_populate_EVP_PKEY(pkey, key);
|
||||||
#else
|
#else
|
||||||
(void)pkey;
|
(void)pkey;
|
||||||
(void)key;
|
(void)key;
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
#endif
|
#endif /* HAVE_ECC */
|
||||||
}
|
}
|
||||||
|
|
||||||
void* wolfSSL_EVP_X_STATE(const WOLFSSL_EVP_CIPHER_CTX* ctx)
|
void* wolfSSL_EVP_X_STATE(const WOLFSSL_EVP_CIPHER_CTX* ctx)
|
||||||
|
Reference in New Issue
Block a user