diff --git a/src/tls.c b/src/tls.c index 6a8ed3fcb..1fc090b8d 100644 --- a/src/tls.c +++ b/src/tls.c @@ -10755,6 +10755,31 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType, } #endif /* !WOLFSSL_NO_TLS12 */ + #ifdef WOLFSSL_TLS13 + /* Gets a WOLFSL_METHOD type that is not set as client or server + * + * Returns a pointer to a WOLFSSL_METHOD struct + */ + WOLFSSL_METHOD* wolfTLSv1_3_method(void) + { + return wolfTLSv1_3_method_ex(NULL); + } + WOLFSSL_METHOD* wolfTLSv1_3_method_ex(void* heap) + { + WOLFSSL_METHOD* m; + WOLFSSL_ENTER("TLSv1_3_method"); + #ifndef NO_WOLFSSL_CLIENT + m = wolfTLSv1_3_client_method_ex(heap); + #else + m = wolfTLSv1_3_server_method_ex(heap); + #endif + if (m != NULL) { + m->side = WOLFSSL_NEITHER_END; + } + return m; + } + #endif /* WOLFSSL_TLS13 */ + #ifdef WOLFSSL_DTLS WOLFSSL_METHOD* wolfDTLS_method(void) { diff --git a/tests/api.c b/tests/api.c index 87efb38b1..7443c7fcd 100644 --- a/tests/api.c +++ b/tests/api.c @@ -578,6 +578,9 @@ static void test_wolfSSL_Method_Allocators(void) #ifndef WOLFSSL_NO_TLS12 TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_2_method); #endif /* !WOLFSSL_NO_TLS12 */ + #ifdef WOLFSSL_TLS13 + TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_3_method); + #endif /* WOLFSSL_TLS13 */ #ifdef WOLFSSL_DTLS TEST_VALID_METHOD_ALLOCATOR(wolfDTLS_method); #ifndef NO_OLD_TLS diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 2efef3c62..d768b041b 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -468,6 +468,7 @@ WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method(void); WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void); WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void); #ifdef WOLFSSL_TLS13 + WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_method(void); WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void); WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method(void); #endif