forked from wolfSSL/wolfssl
remove pubKeyX509 from WOLFSSL_X509 structure
This commit is contained in:
83
src/ssl.c
83
src/ssl.c
@@ -15375,56 +15375,59 @@ WOLFSSL_X509* wolfSSL_X509_d2i(WOLFSSL_X509** x509, const byte* in, int len)
|
|||||||
int wolfSSL_X509_get_pubkey_buffer(WOLFSSL_X509* x509,
|
int wolfSSL_X509_get_pubkey_buffer(WOLFSSL_X509* x509,
|
||||||
unsigned char* buf, int* bufSz)
|
unsigned char* buf, int* bufSz)
|
||||||
{
|
{
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
DecodedCert* cert;
|
||||||
|
#else
|
||||||
|
DecodedCert cert[1];
|
||||||
|
#endif
|
||||||
|
word32 idx;
|
||||||
|
const byte* der;
|
||||||
|
int length = 0;
|
||||||
|
int ret, derSz = 0;
|
||||||
|
int badDate = 0;
|
||||||
|
const byte* pubKeyX509;
|
||||||
|
int pubKeyX509Sz;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_X509_get_pubkey_buffer");
|
WOLFSSL_ENTER("wolfSSL_X509_get_pubkey_buffer");
|
||||||
if (x509 == NULL || bufSz == NULL)
|
if (x509 == NULL || bufSz == NULL) {
|
||||||
|
WOLFSSL_LEAVE("wolfSSL_X509_get_pubkey_buffer", BAD_FUNC_ARG);
|
||||||
return WOLFSSL_FATAL_ERROR;
|
return WOLFSSL_FATAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* get pointer into DER for X.509 public key */
|
|
||||||
if (x509->pubKeyX509 == NULL) {
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
DecodedCert* cert;
|
|
||||||
#else
|
|
||||||
DecodedCert cert[1];
|
|
||||||
#endif
|
|
||||||
word32 idx;
|
|
||||||
const byte* der;
|
|
||||||
int length = 0;
|
|
||||||
int ret, derSz = 0;
|
|
||||||
int badDate = 0;
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
cert = (DecodedCert*)XMALLOC(sizeof(DecodedCert),
|
cert = (DecodedCert*)XMALLOC(sizeof(DecodedCert),
|
||||||
x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (decoded == NULL)
|
if (cert == NULL) {
|
||||||
return MEMORY_E;
|
WOLFSSL_LEAVE("wolfSSL_X509_get_pubkey_buffer", MEMORY_E);
|
||||||
#endif
|
return WOLFSSL_FATAL_ERROR;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
der = wolfSSL_X509_get_der(x509, &derSz);
|
der = wolfSSL_X509_get_der(x509, &derSz);
|
||||||
InitDecodedCert(cert, der, derSz, NULL);
|
InitDecodedCert(cert, der, derSz, NULL);
|
||||||
ret = wc_GetPubX509(cert, 0, &badDate);
|
ret = wc_GetPubX509(cert, 0, &badDate);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
idx = cert->srcIdx;
|
idx = cert->srcIdx;
|
||||||
x509->pubKeyX509 = cert->source + cert->srcIdx;
|
pubKeyX509 = cert->source + cert->srcIdx;
|
||||||
ret = GetSequence(cert->source, &cert->srcIdx, &length,
|
ret = GetSequence(cert->source, &cert->srcIdx, &length,
|
||||||
cert->maxIdx);
|
cert->maxIdx);
|
||||||
x509->pubKeyX509Sz = length + (cert->srcIdx - idx);
|
pubKeyX509Sz = length + (cert->srcIdx - idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeDecodedCert(cert);
|
FreeDecodedCert(cert);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(cert, x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(cert, x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
x509->pubKeyX509 = NULL;
|
WOLFSSL_LEAVE("wolfSSL_X509_get_pubkey_buffer", ret);
|
||||||
x509->pubKeyX509Sz = 0;
|
return WOLFSSL_FATAL_ERROR;
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf != NULL)
|
if (buf != NULL)
|
||||||
XMEMCPY(buf, x509->pubKeyX509, x509->pubKeyX509Sz);
|
XMEMCPY(buf, pubKeyX509, pubKeyX509Sz);
|
||||||
*bufSz = x509->pubKeyX509Sz;
|
*bufSz = pubKeyX509Sz;
|
||||||
|
|
||||||
return WOLFSSL_SUCCESS;
|
return WOLFSSL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -3417,11 +3417,6 @@ struct WOLFSSL_X509 {
|
|||||||
DNS_entry* altNames; /* alt names list */
|
DNS_entry* altNames; /* alt names list */
|
||||||
buffer pubKey;
|
buffer pubKey;
|
||||||
int pubKeyOID;
|
int pubKeyOID;
|
||||||
#ifdef OPENSSL_EXTRA
|
|
||||||
const byte* pubKeyX509; /* pointer to internal X509 for where X.509
|
|
||||||
* format key starts */
|
|
||||||
int pubKeyX509Sz;
|
|
||||||
#endif
|
|
||||||
DNS_entry* altNamesNext; /* hint for retrieval */
|
DNS_entry* altNamesNext; /* hint for retrieval */
|
||||||
#if defined(HAVE_ECC) || defined(HAVE_ED25519)
|
#if defined(HAVE_ECC) || defined(HAVE_ED25519)
|
||||||
word32 pkCurveOID;
|
word32 pkCurveOID;
|
||||||
|
Reference in New Issue
Block a user