diff --git a/src/ssl.c b/src/ssl.c index 7b612ffa1..d7b43a87c 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -27667,17 +27667,23 @@ WOLFSSL_API WOLFSSL_EVP_PKEY *wolfSSL_get_privatekey(const WOLFSSL *ssl) } #endif -#ifndef NO_WOLFSSL_STUB -/*** TBD ***/ -WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a) +/** + * Get a textual representation of given WOLFSSL_ASN1_OBJECT then write it to + * buf at most buf_len bytes. + * + * params + * - buf: buffer where the textual representation is to be written to + * - buf_len: buffer size in bytes + * - a: WOLFSSL_ASN1_OBJECT + * + * return the string length written on success, WOLFSSL_FAILURE on failure. + */ +WOLFSSL_API int wolfSSL_i2t_ASN1_OBJECT(char *buf, int buf_len, + WOLFSSL_ASN1_OBJECT *a) { - (void)buf; - (void)buf_len; - (void)a; - WOLFSSL_STUB("i2t_ASN1_OBJECT"); - return -1; + WOLFSSL_ENTER("wolfSSL_i2t_ASN1_OBJECT"); + return wolfSSL_OBJ_obj2txt(buf, buf_len, a, 0); } -#endif WOLFSSL_ASN1_OBJECT *wolfSSL_d2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a, const unsigned char **der, diff --git a/tests/api.c b/tests/api.c index 522cd4e65..f14d4d358 100644 --- a/tests/api.c +++ b/tests/api.c @@ -34876,6 +34876,33 @@ static void test_wolfSSL_OBJ_txt2obj(void) #endif } +static void test_wolfSSL_i2t_ASN1_OBJECT(void) +{ +#if defined(OPENSSL_EXTRA) && \ + defined(WOLFSSL_CERT_EXT) && defined(WOLFSSL_CERT_GEN) + + char buf[50] = {0}; + ASN1_OBJECT* obj; + const char* oid = "2.5.29.19"; + const char* ln = "X509v3 Basic Constraints"; + + printf(testingFmt, "test_wolfSSL_i2t_ASN1_OBJECT()"); + + obj = NULL; + AssertIntEQ(i2t_ASN1_OBJECT(NULL, sizeof(buf), obj), WOLFSSL_FAILURE); + AssertIntEQ(i2t_ASN1_OBJECT(buf, sizeof(buf), NULL), WOLFSSL_FAILURE); + AssertIntEQ(i2t_ASN1_OBJECT(buf, 0, NULL), WOLFSSL_FAILURE); + + AssertNotNull(obj = OBJ_txt2obj(oid, 0)); + XMEMSET(buf, 0, sizeof(buf)); + AssertIntEQ(i2t_ASN1_OBJECT(buf, sizeof(buf), obj), XSTRLEN(ln)); + AssertIntEQ(XSTRNCMP(buf, ln, XSTRLEN(ln)), 0); + ASN1_OBJECT_free(obj); + + printf(resultFmt, passed); +#endif /* OPENSSL_EXTRA && WOLFSSL_CERT_EXT && WOLFSSL_CERT_GEN */ +} + static void test_wolfSSL_X509_NAME_ENTRY(void) { #if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && !defined(NO_FILESYSTEM) && \ @@ -47773,6 +47800,7 @@ void ApiTest(void) test_wolfSSL_OBJ_cmp(); test_wolfSSL_OBJ_txt2nid(); test_wolfSSL_OBJ_txt2obj(); + test_wolfSSL_i2t_ASN1_OBJECT(); test_wolfSSL_X509_NAME_ENTRY(); test_wolfSSL_X509_set_name(); test_wolfSSL_X509_set_notAfter(); diff --git a/wolfssl/openssl/objects.h b/wolfssl/openssl/objects.h index 5d6b49ca9..acc569b07 100644 --- a/wolfssl/openssl/objects.h +++ b/wolfssl/openssl/objects.h @@ -55,6 +55,7 @@ #define OBJ_create wolfSSL_OBJ_create #define ASN1_OBJECT_free wolfSSL_ASN1_OBJECT_free #define OBJ_NAME_do_all wolfSSL_OBJ_NAME_do_all +#define i2t_ASN1_OBJECT wolfSSL_i2t_ASN1_OBJECT /* not required for wolfSSL */ #define OPENSSL_load_builtin_modules() diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 8f48c64ee..3733154d5 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -4526,7 +4526,7 @@ WOLFSSL_API WOLFSSL_X509_PUBKEY *wolfSSL_X509_get_X509_PUBKEY(const WOLFSSL_X509 WOLFSSL_API int wolfSSL_X509_PUBKEY_get0_param(WOLFSSL_ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, WOLFSSL_X509_ALGOR **pa, WOLFSSL_X509_PUBKEY *pub); WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_PUBKEY_get(WOLFSSL_X509_PUBKEY* key); WOLFSSL_API int wolfSSL_X509_PUBKEY_set(WOLFSSL_X509_PUBKEY **x, WOLFSSL_EVP_PKEY *key); -WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a); +WOLFSSL_API int wolfSSL_i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a); WOLFSSL_API WOLFSSL_ASN1_OBJECT *wolfSSL_d2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a, const unsigned char **der, long length);