mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2026-11-10 07:10:12 +08:00
test_suite_ssl: Test server Finished on record boundary enforcement
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
parent
ee2cb8abce
commit
d157fa7ae2
@ -3595,3 +3595,6 @@ tls13_record_boundary_alignment:MBEDTLS_SSL_IS_SERVER:MBEDTLS_SSL_HS_CLIENT_HELL
|
|||||||
|
|
||||||
TLS 1.3 ServerHello record boundary alignement enforcement
|
TLS 1.3 ServerHello record boundary alignement enforcement
|
||||||
tls13_record_boundary_alignment:MBEDTLS_SSL_IS_CLIENT:MBEDTLS_SSL_HS_SERVER_HELLO
|
tls13_record_boundary_alignment:MBEDTLS_SSL_IS_CLIENT:MBEDTLS_SSL_HS_SERVER_HELLO
|
||||||
|
|
||||||
|
TLS 1.3 server Finished record boundary alignement enforcement
|
||||||
|
tls13_record_boundary_alignment:MBEDTLS_SSL_IS_CLIENT:MBEDTLS_SSL_HS_FINISHED
|
||||||
|
|||||||
@ -510,6 +510,51 @@ exit:
|
|||||||
|
|
||||||
#endif /* MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED etc */
|
#endif /* MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED etc */
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_SSL_PROTO_TLS1_3) && defined(MBEDTLS_DEBUG_C) && \
|
||||||
|
defined(MBEDTLS_SSL_CLI_C) && defined(MBEDTLS_SSL_SRV_C) && \
|
||||||
|
defined(MBEDTLS_TEST_AT_LEAST_ONE_TLS1_3_CIPHERSUITE) && \
|
||||||
|
defined(MBEDTLS_TEST_HAS_DEFAULT_EC_GROUP) && \
|
||||||
|
defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED) && \
|
||||||
|
defined(PSA_WANT_ALG_SHA_256) && \
|
||||||
|
defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) && \
|
||||||
|
defined(PSA_WANT_ALG_RSA_PKCS1V15_SIGN)
|
||||||
|
typedef struct {
|
||||||
|
/* Context for `tls_tweak_in_msglen()`. The debug callback
|
||||||
|
* watches for "<= read record" in the SSL debug trace. When the pattern is
|
||||||
|
* detected, it increases by `nb_bytes` the 'in_msglen' field of the
|
||||||
|
* associated SSL context.
|
||||||
|
*/
|
||||||
|
mbedtls_ssl_context *ssl;
|
||||||
|
int armed;
|
||||||
|
int nb_bytes;
|
||||||
|
int triggered;
|
||||||
|
} tls_tweak_in_msglen_context;
|
||||||
|
|
||||||
|
static void tls_tweak_in_msglen(void *ctx, int level,
|
||||||
|
const char *file, int line,
|
||||||
|
const char *str)
|
||||||
|
{
|
||||||
|
tls_tweak_in_msglen_context *tweak_in_msglen_ctx = ctx;
|
||||||
|
|
||||||
|
(void) level;
|
||||||
|
(void) file;
|
||||||
|
(void) line;
|
||||||
|
|
||||||
|
if (!tweak_in_msglen_ctx->armed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (strstr(str, "<= read record") == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tweak_in_msglen_ctx->ssl->in_msglen += tweak_in_msglen_ctx->nb_bytes;
|
||||||
|
tweak_in_msglen_ctx->armed = 0;
|
||||||
|
tweak_in_msglen_ctx->triggered++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* END_HEADER */
|
/* END_HEADER */
|
||||||
|
|
||||||
/* BEGIN_DEPENDENCIES
|
/* BEGIN_DEPENDENCIES
|
||||||
@ -6897,6 +6942,9 @@ void tls13_record_boundary_alignment(int endpoint, int handshake_message)
|
|||||||
mbedtls_test_init_handshake_options(&client_options);
|
mbedtls_test_init_handshake_options(&client_options);
|
||||||
mbedtls_test_init_handshake_options(&server_options);
|
mbedtls_test_init_handshake_options(&server_options);
|
||||||
|
|
||||||
|
tls_tweak_in_msglen_context tweak_in_msglen_ctx;
|
||||||
|
memset(&tweak_in_msglen_ctx, 0, sizeof(tweak_in_msglen_ctx));
|
||||||
|
|
||||||
mbedtls_test_mock_socket *socket = NULL;
|
mbedtls_test_mock_socket *socket = NULL;
|
||||||
mbedtls_ssl_context *ssl_ctx = NULL;
|
mbedtls_ssl_context *ssl_ctx = NULL;
|
||||||
mbedtls_ssl_context *peer_ssl_ctx = NULL;
|
mbedtls_ssl_context *peer_ssl_ctx = NULL;
|
||||||
@ -6919,6 +6967,14 @@ void tls13_record_boundary_alignment(int endpoint, int handshake_message)
|
|||||||
encrypted = 0;
|
encrypted = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MBEDTLS_SSL_HS_FINISHED:
|
||||||
|
if (endpoint == MBEDTLS_SSL_IS_CLIENT) {
|
||||||
|
target_state = MBEDTLS_SSL_SERVER_FINISHED;
|
||||||
|
peer_target_state = MBEDTLS_SSL_CLIENT_CERTIFICATE;
|
||||||
|
}
|
||||||
|
encrypted = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
TEST_ASSERT(0);
|
TEST_ASSERT(0);
|
||||||
}
|
}
|
||||||
@ -6927,12 +6983,19 @@ void tls13_record_boundary_alignment(int endpoint, int handshake_message)
|
|||||||
ssl_ctx = &client_ep.ssl;
|
ssl_ctx = &client_ep.ssl;
|
||||||
peer_ssl_ctx = &server_ep.ssl;
|
peer_ssl_ctx = &server_ep.ssl;
|
||||||
socket = &client_ep.socket;
|
socket = &client_ep.socket;
|
||||||
|
client_options.cli_log_obj = &tweak_in_msglen_ctx;
|
||||||
|
client_options.cli_log_fun = tls_tweak_in_msglen;
|
||||||
} else {
|
} else {
|
||||||
ssl_ctx = &server_ep.ssl;
|
ssl_ctx = &server_ep.ssl;
|
||||||
peer_ssl_ctx = &client_ep.ssl;
|
peer_ssl_ctx = &client_ep.ssl;
|
||||||
socket = &server_ep.socket;
|
socket = &server_ep.socket;
|
||||||
|
server_options.srv_log_obj = &tweak_in_msglen_ctx;
|
||||||
|
server_options.srv_log_fun = tls_tweak_in_msglen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mbedtls_debug_set_threshold(2);
|
||||||
|
tweak_in_msglen_ctx.ssl = ssl_ctx;
|
||||||
|
|
||||||
TEST_EQUAL(mbedtls_test_ssl_endpoint_init(&client_ep, MBEDTLS_SSL_IS_CLIENT,
|
TEST_EQUAL(mbedtls_test_ssl_endpoint_init(&client_ep, MBEDTLS_SSL_IS_CLIENT,
|
||||||
&client_options, NULL, NULL, NULL), 0);
|
&client_options, NULL, NULL, NULL), 0);
|
||||||
TEST_EQUAL(mbedtls_test_ssl_endpoint_init(&server_ep, MBEDTLS_SSL_IS_SERVER,
|
TEST_EQUAL(mbedtls_test_ssl_endpoint_init(&server_ep, MBEDTLS_SSL_IS_SERVER,
|
||||||
@ -6956,7 +7019,15 @@ void tls13_record_boundary_alignment(int endpoint, int handshake_message)
|
|||||||
TEST_EQUAL(ssl_ctx->state, target_state);
|
TEST_EQUAL(ssl_ctx->state, target_state);
|
||||||
|
|
||||||
if (encrypted) {
|
if (encrypted) {
|
||||||
TEST_ASSERT(0);
|
/*
|
||||||
|
* If the message we want to test the record boundary enforcement is
|
||||||
|
* encrypted, we cannot manipulate easily the record that contains it.
|
||||||
|
* In that case, we tamper with the record size after the record has been
|
||||||
|
* fetched from the socket buffer and decrypted by
|
||||||
|
* `mbedtls_ssl_read_record()`.
|
||||||
|
*/
|
||||||
|
tweak_in_msglen_ctx.armed = 1;
|
||||||
|
tweak_in_msglen_ctx.nb_bytes = sizeof(dummy_data);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* In case of the unencrypted ClientHello or ServerHello, add an
|
* In case of the unencrypted ClientHello or ServerHello, add an
|
||||||
@ -6980,11 +7051,16 @@ void tls13_record_boundary_alignment(int endpoint, int handshake_message)
|
|||||||
TEST_EQUAL(ssl_ctx->in_msgtype, MBEDTLS_SSL_MSG_HANDSHAKE);
|
TEST_EQUAL(ssl_ctx->in_msgtype, MBEDTLS_SSL_MSG_HANDSHAKE);
|
||||||
TEST_EQUAL(ssl_ctx->in_msg[0], handshake_message);
|
TEST_EQUAL(ssl_ctx->in_msg[0], handshake_message);
|
||||||
|
|
||||||
|
if (encrypted) {
|
||||||
|
TEST_EQUAL(tweak_in_msglen_ctx.triggered, 1);
|
||||||
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mbedtls_test_ssl_endpoint_free(&client_ep, NULL);
|
mbedtls_test_ssl_endpoint_free(&client_ep, NULL);
|
||||||
mbedtls_test_ssl_endpoint_free(&server_ep, NULL);
|
mbedtls_test_ssl_endpoint_free(&server_ep, NULL);
|
||||||
mbedtls_test_free_handshake_options(&client_options);
|
mbedtls_test_free_handshake_options(&client_options);
|
||||||
mbedtls_test_free_handshake_options(&server_options);
|
mbedtls_test_free_handshake_options(&server_options);
|
||||||
|
mbedtls_debug_set_threshold(0);
|
||||||
PSA_DONE();
|
PSA_DONE();
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user