1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-28 00:21:48 +03:00

Add ALPN checking when accepting early data

Signed-off-by: Waleed Elmelegy <waleed.elmelegy@arm.com>
This commit is contained in:
Waleed Elmelegy
2024-03-14 01:48:40 +00:00
parent 131b2ffd89
commit 4dfb0e7c90
6 changed files with 118 additions and 1 deletions

View File

@ -78,6 +78,10 @@ enum {
#undef MBEDTLS_SSL_TLS1_3_LABEL
};
#if defined(MBEDTLS_SSL_ALPN)
#define MBEDTLS_TEST_MAX_ALPN_LIST_SIZE 10
#endif
typedef struct mbedtls_test_ssl_log_pattern {
const char *pattern;
size_t counter;
@ -118,6 +122,9 @@ typedef struct mbedtls_test_handshake_test_options {
#if defined(MBEDTLS_SSL_CACHE_C)
mbedtls_ssl_cache_context *cache;
#endif
#if defined(MBEDTLS_SSL_ALPN)
const char *alpn_list[MBEDTLS_TEST_MAX_ALPN_LIST_SIZE];
#endif
} mbedtls_test_handshake_test_options;
/*

View File

@ -833,6 +833,12 @@ int mbedtls_test_ssl_endpoint_init(
options->max_early_data_size);
}
#endif
#if defined(MBEDTLS_SSL_ALPN)
/* check that alpn_list contains at least one valid entry */
if (options->alpn_list[0] != NULL) {
mbedtls_ssl_conf_alpn_protocols(&(ep->conf), options->alpn_list);
}
#endif
#endif
#if defined(MBEDTLS_SSL_CACHE_C) && defined(MBEDTLS_SSL_SRV_C)

View File

@ -3294,6 +3294,22 @@ tls13_read_early_data:TEST_EARLY_DATA_SERVER_REJECTS
TLS 1.3 read early data, discard after HRR
tls13_read_early_data:TEST_EARLY_DATA_HRR
TLS 1.3 cli, early data, same ALPN
depends_on:MBEDTLS_SSL_ALPN
tls13_read_early_data:TEST_EARLY_DATA_SAME_ALPN
TLS 1.3 cli, early data, different ALPN
depends_on:MBEDTLS_SSL_ALPN
tls13_read_early_data:TEST_EARLY_DATA_DIFF_ALPN
TLS 1.3 cli, early data, no initial ALPN
depends_on:MBEDTLS_SSL_ALPN
tls13_read_early_data:TEST_EARLY_DATA_NO_INITIAL_ALPN
TLS 1.3 cli, early data, no later ALPN
depends_on:MBEDTLS_SSL_ALPN
tls13_read_early_data:TEST_EARLY_DATA_NO_LATER_ALPN
TLS 1.3 cli, early data state, early data accepted
tls13_cli_early_data_state:TEST_EARLY_DATA_ACCEPTED

View File

@ -17,6 +17,10 @@
#define TEST_EARLY_DATA_NO_INDICATION_SENT 1
#define TEST_EARLY_DATA_SERVER_REJECTS 2
#define TEST_EARLY_DATA_HRR 3
#define TEST_EARLY_DATA_SAME_ALPN 4
#define TEST_EARLY_DATA_DIFF_ALPN 5
#define TEST_EARLY_DATA_NO_INITIAL_ALPN 6
#define TEST_EARLY_DATA_NO_LATER_ALPN 7
#if (!defined(MBEDTLS_SSL_PROTO_TLS1_2)) && \
defined(MBEDTLS_SSL_EARLY_DATA) && defined(MBEDTLS_SSL_CLI_C) && \
@ -3728,6 +3732,19 @@ void tls13_read_early_data(int scenario)
server_options.group_list = group_list;
server_options.early_data = MBEDTLS_SSL_EARLY_DATA_ENABLED;
#if defined(MBEDTLS_SSL_ALPN)
switch (scenario) {
case TEST_EARLY_DATA_SAME_ALPN:
case TEST_EARLY_DATA_DIFF_ALPN:
case TEST_EARLY_DATA_NO_LATER_ALPN:
client_options.alpn_list[0] = "ALPNExample";
client_options.alpn_list[1] = NULL;
server_options.alpn_list[0] = "ALPNExample";
server_options.alpn_list[1] = NULL;
break;
}
#endif
ret = mbedtls_test_get_tls13_ticket(&client_options, &server_options,
&saved_session);
TEST_EQUAL(ret, 0);
@ -3756,6 +3773,33 @@ void tls13_read_early_data(int scenario)
"EarlyData: Ignore application message before 2nd ClientHello";
server_options.group_list = group_list + 1;
break;
#if defined(MBEDTLS_SSL_ALPN)
case TEST_EARLY_DATA_SAME_ALPN:
client_options.alpn_list[0] = "ALPNExample";
client_options.alpn_list[1] = NULL;
server_options.alpn_list[0] = "ALPNExample";
server_options.alpn_list[1] = NULL;
break;
case TEST_EARLY_DATA_DIFF_ALPN:
case TEST_EARLY_DATA_NO_INITIAL_ALPN:
client_options.alpn_list[0] = "ALPNExample2";
client_options.alpn_list[1] = NULL;
server_options.alpn_list[0] = "ALPNExample2";
server_options.alpn_list[1] = NULL;
mbedtls_debug_set_threshold(3);
server_pattern.pattern =
"EarlyData: rejected, the selected ALPN is different "
"from the one associated with the pre-shared key.";
break;
case TEST_EARLY_DATA_NO_LATER_ALPN:
client_options.alpn_list[0] = NULL;
server_options.alpn_list[0] = NULL;
mbedtls_debug_set_threshold(3);
server_pattern.pattern =
"EarlyData: rejected, the selected ALPN is different "
"from the one associated with the pre-shared key.";
break;
#endif
default:
TEST_FAIL("Unknown scenario.");
@ -3807,6 +3851,9 @@ void tls13_read_early_data(int scenario)
switch (scenario) {
case TEST_EARLY_DATA_ACCEPTED:
#if defined(MBEDTLS_SSL_ALPN)
case TEST_EARLY_DATA_SAME_ALPN:
#endif
TEST_EQUAL(ret, MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA);
TEST_EQUAL(server_ep.ssl.handshake->early_data_accepted, 1);
TEST_EQUAL(mbedtls_ssl_read_early_data(&(server_ep.ssl),
@ -3821,6 +3868,11 @@ void tls13_read_early_data(int scenario)
case TEST_EARLY_DATA_SERVER_REJECTS: /* Intentional fallthrough */
case TEST_EARLY_DATA_HRR:
#if defined(MBEDTLS_SSL_ALPN)
case TEST_EARLY_DATA_DIFF_ALPN:
case TEST_EARLY_DATA_NO_INITIAL_ALPN:
case TEST_EARLY_DATA_NO_LATER_ALPN:
#endif
TEST_EQUAL(ret, 0);
TEST_EQUAL(server_ep.ssl.handshake->early_data_accepted, 0);
TEST_EQUAL(server_pattern.counter, 1);