fix gating and unused-variable warnings in src/quic.c wolfSSL_quic_aead_is_{gcm,ccm,chacha20}();

fix TLS version gating in tests/quic.c;

fix gating in src/ssl.c for wolfSSLv2_client_method() and wolfSSLv2_server_method();

reorganize prototypes in wolfssl/ssl.h for wolf*_method*() to group systematically by protocol version and gate correctly on support for that version in the build.
This commit is contained in:
Daniel Pouzzner 2022-08-11 14:54:33 -05:00
parent 499b9c4f35
commit 017c4e7a41
4 changed files with 149 additions and 73 deletions

View File

@ -634,8 +634,6 @@ int wolfSSL_process_quic_post_handshake(WOLFSSL* ssl)
if (ssl->options.handShakeState != HANDSHAKE_DONE) {
WOLFSSL_MSG("WOLFSSL_QUIC_POST_HS handshake is not done yet");
fprintf(stderr, "WOLFSSL_QUIC_POST_HS, handShakeState is %d\n",
ssl->options.handShakeState);
ret = WOLFSSL_FAILURE;
goto cleanup;
}
@ -1044,6 +1042,8 @@ int wolfSSL_quic_aead_is_gcm(const WOLFSSL_EVP_CIPHER* aead_cipher)
) {
return 1;
}
#else
(void)aead_cipher;
#endif
return 0;
}
@ -1054,13 +1054,20 @@ int wolfSSL_quic_aead_is_ccm(const WOLFSSL_EVP_CIPHER* aead_cipher)
if (evp_cipher_eq(aead_cipher, wolfSSL_EVP_aes_128_ctr())) {
return 1;
}
#else
(void)aead_cipher;
#endif
return 0;
}
int wolfSSL_quic_aead_is_chacha20(const WOLFSSL_EVP_CIPHER* aead_cipher)
{
#if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
return evp_cipher_eq(aead_cipher, wolfSSL_EVP_chacha20_poly1305());
#else
(void)aead_cipher;
return 0;
#endif
}
const WOLFSSL_EVP_MD* wolfSSL_quic_get_md(WOLFSSL* ssl)

View File

@ -11807,7 +11807,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl,
/* client only parts */
#ifndef NO_WOLFSSL_CLIENT
#ifdef OPENSSL_EXTRA
#if defined(OPENSSL_EXTRA) && !defined(NO_OLD_TLS)
WOLFSSL_METHOD* wolfSSLv2_client_method(void)
{
WOLFSSL_STUB("wolfSSLv2_client_method");
@ -12284,7 +12284,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl,
/* server only parts */
#ifndef NO_WOLFSSL_SERVER
#ifdef OPENSSL_EXTRA
#if defined(OPENSSL_EXTRA) && !defined(NO_OLD_TLS)
WOLFSSL_METHOD* wolfSSLv2_server_method(void)
{
WOLFSSL_STUB("wolfSSLv2_server_method");

View File

@ -104,17 +104,25 @@ static int test_set_quic_method(void) {
const uint8_t *data;
size_t data_len;
ctx_setups valids[] = {
#ifdef WOLFSSL_TLS13
{ "TLSv1.3 server", wolfTLSv1_3_server_method(), 1},
{ "TLSv1.3 client", wolfTLSv1_3_client_method(), 0},
#endif
{ NULL, NULL, 0}
};
ctx_setups invalids[] = {
#ifndef WOLFSSL_NO_TLS12
{ "TLSv1.2 server", wolfTLSv1_2_server_method(), 1},
{ "TLSv1.2 client", wolfTLSv1_2_client_method(), 0},
#endif
#ifndef NO_OLD_TLS
{ "TLSv1.1 server", wolfTLSv1_1_server_method(), 1},
{ "TLSv1.1 client", wolfTLSv1_1_client_method(), 0},
#endif
{ NULL, NULL, 0}
};
for (i = 0; i < (int)(sizeof(valids)/sizeof(valids[0])); ++i) {
for (i = 0; valids[i].name != NULL; ++i) {
AssertNotNull(ctx = wolfSSL_CTX_new(valids[i].method));
if (valids[i].is_server) {
AssertTrue(wolfSSL_CTX_use_certificate_file(ctx, svrCertFile,
@ -166,7 +174,7 @@ static int test_set_quic_method(void) {
wolfSSL_CTX_free(ctx);
}
for (i = 0; i < (int)(sizeof(invalids)/sizeof(invalids[0])); ++i) {
for (i = 0; invalids[i].name != NULL; ++i) {
AssertNotNull(ctx = wolfSSL_CTX_new(invalids[i].method));
AssertTrue(wolfSSL_CTX_use_certificate_file(ctx, svrCertFile,

View File

@ -831,89 +831,155 @@ enum Tls13Secret {
typedef WOLFSSL_METHOD* (*wolfSSL_method_func)(void* heap);
/* CTX Method EX Constructor Functions */
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method_ex(void* heap);
/* CTX Method Constructor Functions */
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_server_method(void);
#endif
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv23_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method(void);
#endif
#ifndef NO_OLD_TLS
#ifdef OPENSSL_EXTRA
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_server_method(void);
#endif
#endif /* OPENSSL_EXTRA */
#ifdef WOLFSSL_ALLOW_SSLV3
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
#endif
#endif /* WOLFSSL_ALLOW_SSLV3 */
#ifdef WOLFSSL_ALLOW_TLSV10
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
#endif
#endif /* WOLFSSL_ALLOW_TLSV10 */
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method(void);
#endif
#endif /* NO_OLD_TLS */
#ifndef WOLFSSL_NO_TLS12
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method_ex(void* heap);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method_ex(void* heap);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
#endif
#endif /* !WOLFSSL_NO_TLS12 */
#ifdef WOLFSSL_TLS13
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method_ex(void* heap);
#endif
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_client_method_ex(void* heap);
#ifdef WOLFSSL_DTLS
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap);
#ifdef WOLFSSL_DTLS13
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_server_method_ex(void* heap);
WOLFSSL_API int wolfSSL_dtls13_has_pending_msg(WOLFSSL *ssl);
#endif
#endif
/* CTX Method Constructor Functions */
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_client_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLS_server_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method(void);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
#ifdef WOLFSSL_TLS13
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_method(void);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method_ex(void* heap);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method_ex(void* heap);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
#endif
#endif /* WOLFSSL_TLS13 */
#ifdef WOLFSSL_DTLS
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_method(void);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method(void);
#endif
#ifndef NO_OLD_TLS
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method(void);
#endif
#endif /* !NO_OLD_TLS */
#ifndef WOLFSSL_NO_TLS12
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_method(void);
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void);
#endif
#endif /* !WOLFSSL_NO_TLS12 */
#ifdef WOLFSSL_DTLS13
#ifndef NO_WOLFSSL_CLIENT
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_client_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_client_method(void);
#endif
#ifndef NO_WOLFSSL_SERVER
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_server_method_ex(void* heap);
WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_3_server_method(void);
#endif
WOLFSSL_API int wolfSSL_dtls13_has_pending_msg(WOLFSSL *ssl);
#endif /* WOLFSSL_DTLS13 */
#endif
#endif /* WOLFSSL_DTLS */
#ifdef HAVE_POLY1305
WOLFSSL_API int wolfSSL_use_old_poly(WOLFSSL* ssl, int value);
@ -1565,10 +1631,6 @@ WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)*
WOLFSSL_API int wolfSSL_OCSP_parse_url(char* url, char** host, char** port,
char** path, int* ssl);
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv23_client_method(void);
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_client_method(void);
WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_server_method(void);
#ifndef NO_BIO
#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new(const WOLFSSL_BIO_METHOD* method);
@ -2591,7 +2653,6 @@ WOLFSSL_API void wolfSSL_ERR_clear_error(void);
WOLFSSL_API int wolfSSL_RAND_status(void);
WOLFSSL_API int wolfSSL_RAND_pseudo_bytes(unsigned char* buf, int num);
WOLFSSL_API int wolfSSL_RAND_bytes(unsigned char* buf, int num);
WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method(void);
WOLFSSL_API long wolfSSL_CTX_set_options(WOLFSSL_CTX* ctx, long opt);
WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX* ctx, long opt);