mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +02:00
src/x509.c: fix wolfSSL_X509_signature_print() to print raw signature algorithm as hex digits, not as an (unprintable) string; fix printed-null bug in wolfSSL_X509_NAME_print_ex() (relates particularly to calls from wolfSSL_X509_NAME_print_ex_fp()).
This commit is contained in:
39
src/x509.c
39
src/x509.c
@@ -6231,6 +6231,10 @@ int wolfSSL_X509_print_fp(XFILE fp, WOLFSSL_X509 *x509)
|
|||||||
int wolfSSL_X509_signature_print(WOLFSSL_BIO *bp,
|
int wolfSSL_X509_signature_print(WOLFSSL_BIO *bp,
|
||||||
const WOLFSSL_X509_ALGOR *sigalg, const WOLFSSL_ASN1_STRING *sig)
|
const WOLFSSL_X509_ALGOR *sigalg, const WOLFSSL_ASN1_STRING *sig)
|
||||||
{
|
{
|
||||||
|
int length = 0;
|
||||||
|
word32 idx = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
(void)sig;
|
(void)sig;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_X509_signature_print");
|
WOLFSSL_ENTER("wolfSSL_X509_signature_print");
|
||||||
@@ -6240,16 +6244,37 @@ int wolfSSL_X509_signature_print(WOLFSSL_BIO *bp,
|
|||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wolfSSL_BIO_puts(bp, " Signature Algorithm: ") <= 0) {
|
if ((sigalg->algorithm->obj == NULL) || (sigalg->algorithm->obj[idx++] != ASN_OBJECT_ID)) {
|
||||||
|
WOLFSSL_MSG("Bad ASN1 Object");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetLength((const byte*)sigalg->algorithm->obj, &idx, &length,
|
||||||
|
sigalg->algorithm->objSz) < 0 || length < 0) {
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wolfSSL_BIO_puts(bp, " Raw Signature Algorithm:") <= 0) {
|
||||||
WOLFSSL_MSG("wolfSSL_BIO_puts error");
|
WOLFSSL_MSG("wolfSSL_BIO_puts error");
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wolfSSL_i2a_ASN1_OBJECT(bp, sigalg->algorithm) <= 0) {
|
for (i = 0; i < length; ++i) {
|
||||||
WOLFSSL_MSG("wolfSSL_i2a_ASN1_OBJECT error");
|
char hex_digits[4];
|
||||||
return WOLFSSL_FAILURE;
|
#ifdef XSNPRINTF
|
||||||
|
XSNPRINTF(hex_digits, sizeof hex_digits, "%c%02X", i>0 ? ':' : ' ',
|
||||||
|
(unsigned int)sigalg->algorithm->obj[idx+i]);
|
||||||
|
#else
|
||||||
|
XSPRINTF(hex_digits, "%c%02X", i>0 ? ':' : ' ',
|
||||||
|
(unsigned int)sigalg->algorithm->obj[idx+i]);
|
||||||
|
#endif
|
||||||
|
if (wolfSSL_BIO_puts(bp, hex_digits) <= 0)
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wolfSSL_BIO_puts(bp, "\n") <= 0)
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
|
||||||
return WOLFSSL_SUCCESS;
|
return WOLFSSL_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif /* !NO_BIO */
|
#endif /* !NO_BIO */
|
||||||
@@ -11386,7 +11411,11 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
XSNPRINTF(tmp, tmpSz, "%s=%s", buf, nameStr);
|
XSNPRINTF(tmp, tmpSz, "%s=%s", buf, nameStr);
|
||||||
tmpSz = len + nameStrSz + 2; /* 2 for '=', '\0' */
|
tmpSz = len + nameStrSz + 1; /* 1 for '=' */
|
||||||
|
if (bio->type != WOLFSSL_BIO_FILE)
|
||||||
|
++tmpSz; /* include the terminating null when not writing to a
|
||||||
|
* file.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wolfSSL_BIO_write(bio, tmp, tmpSz) != tmpSz) {
|
if (wolfSSL_BIO_write(bio, tmp, tmpSz) != tmpSz) {
|
||||||
|
Reference in New Issue
Block a user