Fix merge conflict resolution in ECC_populate_EVP_PKEY

This commit is contained in:
Juliusz Sosinowicz
2021-07-22 19:33:12 +02:00
parent 10168e093a
commit 9f7aa32662
2 changed files with 44 additions and 67 deletions

View File

@ -42480,7 +42480,7 @@ int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey)
#ifdef HAVE_ECC
case EVP_PKEY_EC:
WOLFSSL_MSG("populating ECC key");
if (ECC_populate_EVP_PKEY(pkey, (ecc_key*)pkey->ecc->internal)
if (ECC_populate_EVP_PKEY(pkey, pkey->ecc)
!= WOLFSSL_SUCCESS)
return WOLFSSL_FAILURE;
break;

View File

@ -6587,18 +6587,20 @@ int wolfSSL_EVP_PKEY_assign(WOLFSSL_EVP_PKEY *pkey, int type, void *key)
/* try and populate public pkey_sz and pkey.ptr */
static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
{
<<<<<<< master
int derSz = 0;
byte* derBuf = NULL;
ecc_key* ecc;
if (pkey == NULL || key == NULL || key->internal == NULL)
return WOLFSSL_FAILURE;
ecc = (ecc_key*)key->internal;
if (ecc->type == ECC_PRIVATEKEY || ecc->type == ECC_PRIVATEKEY_ONLY) {
#ifdef HAVE_PKCS8
if (key->pkcs8HeaderSz) {
/* when key has pkcs8 header the pkey should too */
if (wc_EccKeyToPKCS8(ecc, NULL, (word32*)&derSz) == LENGTH_ONLY_E) {
byte* derBuf = (byte*)XMALLOC(derSz, pkey->heap, DYNAMIC_TYPE_OPENSSL);
derBuf = (byte*)XMALLOC(derSz, pkey->heap, DYNAMIC_TYPE_OPENSSL);
if (derBuf) {
if (wc_EccKeyToPKCS8(ecc, derBuf, (word32*)&derSz) >= 0) {
if (pkey->pkey.ptr) {
@ -6611,46 +6613,17 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
}
else {
XFREE(derBuf, pkey->heap, DYNAMIC_TYPE_OPENSSL);
=======
word32 derSz = 0;
byte* derBuf = NULL;
if (!pkey || !ecc)
return WOLFSSL_FAILURE;
if (ecc->type == ECC_PRIVATEKEY || ecc->type == ECC_PRIVATEKEY_ONLY) {
#ifdef HAVE_PKCS8
if (wc_EccKeyToPKCS8(ecc, NULL, &derSz) == LENGTH_ONLY_E) {
derBuf = (byte*)XREALLOC(pkey->pkey.ptr, derSz, NULL,
DYNAMIC_TYPE_OPENSSL);
if (derBuf != NULL) {
pkey->pkey.ptr = (char*)derBuf;
if (wc_EccKeyToPKCS8(ecc, derBuf, &derSz) < 0) {
XFREE(derBuf, NULL, DYNAMIC_TYPE_OPENSSL);
>>>>>>> WIP
derBuf = NULL;
}
}
}
#else
derSz = (word32)wc_EccKeyDerSize(ecc, 1);
if (derSz > 0) {
derBuf = (byte*)XREALLOC(pkey->pkey.ptr, derSz, NULL,
DYNAMIC_TYPE_OPENSSL);
if (derBuf != NULL) {
pkey->pkey.ptr = (char*)derBuf;
if (wc_EccKeyToDer(ecc, derBuf, derSz) < 0) {
XFREE(derBuf, NULL, DYNAMIC_TYPE_OPENSSL);
derBuf = NULL;
}
}
}
else
#endif /* HAVE_PKCS8 */
}
<<<<<<< master
else {
{
/* if not, the pkey will be traditional ecc key */
if ((derSz = wc_EccKeyDerSize(ecc, 1)) > 0) {
byte* derBuf = (byte*)XMALLOC(derSz, pkey->heap, DYNAMIC_TYPE_OPENSSL);
derBuf = (byte*)XMALLOC(derSz, pkey->heap, DYNAMIC_TYPE_OPENSSL);
if (derBuf) {
if (wc_EccKeyToDer(ecc, derBuf, derSz) >= 0) {
if (pkey->pkey.ptr) {
@ -6662,7 +6635,12 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
}
else {
XFREE(derBuf, pkey->heap, DYNAMIC_TYPE_OPENSSL);
=======
derBuf = NULL;
}
}
}
}
}
else if (ecc->type == ECC_PUBLICKEY) {
if ((derSz = (word32)wc_EccPublicKeyDerSize(ecc, 1)) > 0) {
derBuf = (byte*)XREALLOC(pkey->pkey.ptr, derSz, NULL,
@ -6671,7 +6649,6 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
pkey->pkey.ptr = (char*)derBuf;
if (wc_EccPublicKeyToDer(ecc, derBuf, derSz, 1) < 0) {
XFREE(derBuf, NULL, DYNAMIC_TYPE_OPENSSL);
>>>>>>> WIP
derBuf = NULL;
}
}