fix for wolfSSL_ASN1_TIME_print function

This commit is contained in:
Jacob Barthelmeh 2017-09-28 15:30:46 -06:00
parent 09e92c518d
commit 8cd0b7dfc7
3 changed files with 51 additions and 4 deletions

View File

@ -16367,16 +16367,26 @@ WOLFSSL_ASN1_INTEGER* wolfSSL_X509_get_serialNumber(WOLFSSL_X509* x509)
int wolfSSL_ASN1_TIME_print(WOLFSSL_BIO* bio, const WOLFSSL_ASN1_TIME* asnTime)
{
char buf[MAX_TIME_STRING_SZ];
int ret = SSL_SUCCESS;
WOLFSSL_ENTER("wolfSSL_ASN1_TIME_print");
if (bio == NULL || asnTime == NULL)
return BAD_FUNC_ARG;
wolfSSL_ASN1_TIME_to_string((WOLFSSL_ASN1_TIME*)asnTime, buf, sizeof(buf));
wolfSSL_BIO_write(bio, buf, (int)XSTRLEN(buf));
if (wolfSSL_ASN1_TIME_to_string((WOLFSSL_ASN1_TIME*)asnTime, buf,
sizeof(buf)) == NULL) {
XMEMSET(buf, 0, MAX_TIME_STRING_SZ);
XMEMCPY(buf, "Bad time value", 14);
ret = SSL_FAILURE;
}
return 0;
if (wolfSSL_BIO_write(bio, buf, (int)XSTRLEN(buf)) <= 0) {
WOLFSSL_MSG("Unable to write to bio");
return SSL_FAILURE;
}
return ret;
}

View File

@ -9450,6 +9450,42 @@ static void test_wolfSSL_certs(void)
}
static void test_wolfSSL_ASN1_TIME_print()
{
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && !defined(NO_RSA) \
&& (defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(WOLFSSL_NGINX) || \
defined(WOLFSSL_HAPROXY)) && defined(USE_CERT_BUFFERS_2048)
BIO* bio;
X509* x509;
const unsigned char* der = client_cert_der_2048;
ASN1_TIME* t;
unsigned char buf[25];
printf(testingFmt, "wolfSSL_ASN1_TIME_print()");
AssertNotNull(bio = BIO_new(BIO_s_mem()));
AssertNotNull(x509 = wolfSSL_X509_load_certificate_buffer(der,
sizeof_client_cert_der_2048, SSL_FILETYPE_ASN1));
AssertIntEQ(ASN1_TIME_print(bio, X509_get_notBefore(x509)), 1);
AssertIntEQ(BIO_read(bio, buf, sizeof(buf)), 24);
AssertIntEQ(XMEMCMP(buf, "Aug 11 20:07:37 2016 GMT", sizeof(buf) - 1), 0);
/* create a bad time and test results */
AssertNotNull(t = X509_get_notAfter(x509));
t->data[10] = 0;
t->data[5] = 0;
AssertIntNE(ASN1_TIME_print(bio, t), 1);
AssertIntEQ(BIO_read(bio, buf, sizeof(buf)), 14);
AssertIntEQ(XMEMCMP(buf, "Bad time value", 14), 0);
BIO_free(bio);
X509_free(x509);
printf(resultFmt, passed);
#endif
}
static void test_wolfSSL_private_keys(void)
{
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
@ -10857,6 +10893,7 @@ void ApiTest(void)
/* compatibility tests */
test_wolfSSL_DES();
test_wolfSSL_certs();
test_wolfSSL_ASN1_TIME_print();
test_wolfSSL_private_keys();
test_wolfSSL_PEM_PrivateKey();
test_wolfSSL_tmp_dh();

View File

@ -196,7 +196,7 @@ enum Misc_ASN {
TRAILING_ZERO = 1, /* Used for size of zero pad */
MIN_VERSION_SZ = 3, /* Min bytes needed for GetMyVersion */
#if defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
MAX_TIME_STRING_SZ = 21, /* Max length of formatted time string */
MAX_TIME_STRING_SZ = 25, /* Max length of formatted time string */
#endif
};