forked from wolfSSL/wolfssl
fix ecc public key print with X509 print function
This commit is contained in:
73
src/ssl.c
73
src/ssl.c
@ -16300,8 +16300,10 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509)
|
|||||||
!= 0) {
|
!= 0) {
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
if (wc_ecc_import_x963(x509->pubKey.buffer,
|
|
||||||
x509->pubKey.length, &ecc) != 0) {
|
i = 0;
|
||||||
|
if (wc_EccPublicKeyDecode(x509->pubKey.buffer, &i,
|
||||||
|
&ecc, x509->pubKey.length) != 0) {
|
||||||
wc_ecc_free(&ecc);
|
wc_ecc_free(&ecc);
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
@ -16315,41 +16317,62 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509)
|
|||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
XSNPRINTF(tmp, sizeof(tmp) - 1," ");
|
XSNPRINTF(tmp, sizeof(tmp) - 1," ");
|
||||||
for (i = 0; i < x509->pubKey.length; i++) {
|
{
|
||||||
char val[5];
|
word32 derSz;
|
||||||
int valSz = 5;
|
byte* der;
|
||||||
|
|
||||||
if (i == 0) {
|
derSz = wc_ecc_size(&ecc) * WOLFSSL_BIT_SIZE;
|
||||||
XSNPRINTF(val, valSz - 1, "%02x",
|
der = XMALLOC(derSz, x509->heap,
|
||||||
x509->pubKey.buffer[i]);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (der == NULL) {
|
||||||
|
wc_ecc_free(&ecc);
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
else if ((i % 15) == 0) {
|
|
||||||
tmp[sizeof(tmp) - 1] = '\0';
|
if (wc_ecc_export_x963(&ecc, der, &derSz) != 0) {
|
||||||
if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp))
|
wc_ecc_free(&ecc);
|
||||||
<= 0) {
|
XFREE(der, x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
wc_ecc_free(&ecc);
|
return WOLFSSL_FAILURE;
|
||||||
return WOLFSSL_FAILURE;
|
}
|
||||||
|
for (i = 0; i < derSz; i++) {
|
||||||
|
char val[5];
|
||||||
|
int valSz = 5;
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
XSNPRINTF(val, valSz - 1, "%02x", der[i]);
|
||||||
}
|
}
|
||||||
XSNPRINTF(tmp, sizeof(tmp) - 1,
|
else if ((i % 15) == 0) {
|
||||||
|
tmp[sizeof(tmp) - 1] = '\0';
|
||||||
|
if (wolfSSL_BIO_write(bio, tmp,
|
||||||
|
(int)XSTRLEN(tmp)) <= 0) {
|
||||||
|
wc_ecc_free(&ecc);
|
||||||
|
XFREE(der, x509->heap,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
XSNPRINTF(tmp, sizeof(tmp) - 1,
|
||||||
":\n ");
|
":\n ");
|
||||||
XSNPRINTF(val, valSz - 1, "%02x",
|
XSNPRINTF(val, valSz - 1, "%02x", der[i]);
|
||||||
x509->pubKey.buffer[i]);
|
}
|
||||||
|
else {
|
||||||
|
XSNPRINTF(val, valSz - 1, ":%02x", der[i]);
|
||||||
|
}
|
||||||
|
XSTRNCAT(tmp, val, valSz);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
XSNPRINTF(val, valSz - 1, ":%02x",
|
|
||||||
x509->pubKey.buffer[i]);
|
|
||||||
}
|
|
||||||
XSTRNCAT(tmp, val, valSz);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* print out remaning modulus values */
|
/* print out remaning modulus values */
|
||||||
if ((i > 0) && (((i - 1) % 15) != 0)) {
|
if ((i > 0) && (((i - 1) % 15) != 0)) {
|
||||||
tmp[sizeof(tmp) - 1] = '\0';
|
tmp[sizeof(tmp) - 1] = '\0';
|
||||||
if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp))
|
if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp))
|
||||||
<= 0) {
|
<= 0) {
|
||||||
wc_ecc_free(&ecc);
|
wc_ecc_free(&ecc);
|
||||||
|
XFREE(der, x509->heap,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XFREE(der, x509->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
}
|
}
|
||||||
XSNPRINTF(tmp, sizeof(tmp) - 1, "\n%s%s: %s\n",
|
XSNPRINTF(tmp, sizeof(tmp) - 1, "\n%s%s: %s\n",
|
||||||
" ", "ASN1 OID",
|
" ", "ASN1 OID",
|
||||||
|
Reference in New Issue
Block a user