diff --git a/src/ssl.c b/src/ssl.c index ca693eb6c..fcbf7765d 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -34065,6 +34065,20 @@ int wolfSSL_ASN1_TIME_get_length(WOLFSSL_ASN1_TIME *t) return (int)t->data[1]; } +int wolfSSL_ASN1_TIME_get_data(WOLFSSL_ASN1_TIME *t, unsigned char* data) +{ + char *dptr = NULL; + + WOLFSSL_ENTER("wolfSSL_ASN1_TIME_get_data"); + if (t == NULL || data == NULL) + return WOLFSSL_FAILURE; + + dptr = (char*)t->data + 2; + XSTRNCPY((char*)data, dptr, t->data[1]); + + return WOLFSSL_SUCCESS; +} + WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_to_generalizedtime(WOLFSSL_ASN1_TIME *t, WOLFSSL_ASN1_TIME **out) { diff --git a/tests/api.c b/tests/api.c index cdc18e482..e209011a8 100644 --- a/tests/api.c +++ b/tests/api.c @@ -19686,6 +19686,7 @@ static void test_wolfSSL_ASN1_TIME_to_generalizedtime(void){ WOLFSSL_ASN1_TIME *out; WOLFSSL_ASN1_TIME *gtime; int tlen = 0; + unsigned char data[ASN_GENERALIZED_TIME_SIZE]; printf(testingFmt, "wolfSSL_ASN1_TIME_to_generalizedtime()"); @@ -19704,6 +19705,8 @@ static void test_wolfSSL_ASN1_TIME_to_generalizedtime(void){ ======= tlen = wolfSSL_ASN1_TIME_get_length(t); AssertIntEQ(tlen, ASN_UTC_TIME_SIZE); + wolfSSL_ASN1_TIME_get_data(t,data); + AssertStrEQ((char*)data, "050727123456Z"); gtime = wolfSSL_ASN1_TIME_to_generalizedtime(t, &out); >>>>>>> wolfSSL_ASN1_TIME_get_length() AssertIntEQ(gtime->data[0], ASN_GENERALIZED_TIME); @@ -19713,6 +19716,7 @@ static void test_wolfSSL_ASN1_TIME_to_generalizedtime(void){ /* Generalized Time test */ XMEMSET(t, 0, ASN_GENERALIZED_TIME_SIZE); XMEMSET(out, 0, ASN_GENERALIZED_TIME_SIZE); + XMEMSET(data, 0, ASN_GENERALIZED_TIME_SIZE); gtime = NULL; t->data[0] = ASN_GENERALIZED_TIME; t->data[1] = ASN_GENERALIZED_TIME_SIZE; @@ -19723,6 +19727,8 @@ static void test_wolfSSL_ASN1_TIME_to_generalizedtime(void){ tlen = wolfSSL_ASN1_TIME_get_length(t); AssertIntEQ(tlen, ASN_GENERALIZED_TIME_SIZE); + wolfSSL_ASN1_TIME_get_data(t,data); + AssertStrEQ((char*)data, "20050727123456Z"); gtime = wolfSSL_ASN1_TIME_to_generalizedtime(t, &out); >>>>>>> wolfSSL_ASN1_TIME_get_length() AssertIntEQ(gtime->data[0], ASN_GENERALIZED_TIME); diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 5d2a6eb20..aa99560d4 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -2991,6 +2991,7 @@ WOLFSSL_API void wolfSSL_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT * WOLFSSL_API const char *wolfSSL_ASN1_tag2str(int tag); WOLFSSL_API int wolfSSL_ASN1_STRING_print_ex(WOLFSSL_BIO *out, WOLFSSL_ASN1_STRING *str, unsigned long flags); WOLFSSL_API int wolfSSL_ASN1_TIME_get_length(WOLFSSL_ASN1_TIME *t); +WOLFSSL_API int wolfSSL_ASN1_TIME_get_data(WOLFSSL_ASN1_TIME *t, unsigned char *data); WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_to_generalizedtime(WOLFSSL_ASN1_TIME *t, WOLFSSL_ASN1_TIME **out); WOLFSSL_API int wolfSSL_i2c_ASN1_INTEGER(WOLFSSL_ASN1_INTEGER *a, unsigned char **pp);