Move serialization testing into its own function
No behavior change.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/tests/src/test_helpers/ssl_helpers.c b/tests/src/test_helpers/ssl_helpers.c
index e00f2d4..a638fb8 100644
--- a/tests/src/test_helpers/ssl_helpers.c
+++ b/tests/src/test_helpers/ssl_helpers.c
@@ -2187,6 +2187,83 @@
}
#endif /* MBEDTLS_SSL_RENEGOTIATION */
+#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
+static int test_serialization(const mbedtls_test_handshake_test_options *options,
+ mbedtls_test_ssl_endpoint *client,
+ mbedtls_test_ssl_endpoint *server)
+{
+ int ok = 0;
+ unsigned char *context_buf = NULL;
+ size_t context_buf_len;
+
+ TEST_EQUAL(options->dtls, 1);
+
+ TEST_EQUAL(mbedtls_ssl_context_save(&(server->ssl), NULL,
+ 0, &context_buf_len),
+ MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL);
+
+ context_buf = mbedtls_calloc(1, context_buf_len);
+ TEST_ASSERT(context_buf != NULL);
+
+ TEST_EQUAL(mbedtls_ssl_context_save(&(server->ssl), context_buf,
+ context_buf_len,
+ &context_buf_len),
+ 0);
+
+ mbedtls_ssl_free(&(server->ssl));
+ mbedtls_ssl_init(&(server->ssl));
+
+ TEST_EQUAL(mbedtls_ssl_setup(&(server->ssl), &(server->conf)), 0);
+
+ mbedtls_ssl_set_bio(&(server->ssl), &server->dtls_context,
+ mbedtls_test_mock_tcp_send_msg,
+ mbedtls_test_mock_tcp_recv_msg,
+ NULL);
+
+ mbedtls_ssl_set_user_data_p(&server->ssl, server);
+
+#if defined(MBEDTLS_TIMING_C)
+ mbedtls_ssl_set_timer_cb(&server->ssl, &server->timer,
+ mbedtls_timing_set_delay,
+ mbedtls_timing_get_delay);
+#endif
+#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
+ if (options->resize_buffers != 0) {
+ /* Ensure that the buffer sizes are appropriate before resizes */
+ TEST_EQUAL(server->ssl.out_buf_len, MBEDTLS_SSL_OUT_BUFFER_LEN);
+ TEST_EQUAL(server->ssl.in_buf_len, MBEDTLS_SSL_IN_BUFFER_LEN);
+ }
+#endif
+ TEST_EQUAL(mbedtls_ssl_context_load(&(server->ssl), context_buf,
+ context_buf_len), 0);
+
+#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
+ /* Validate buffer sizes after context deserialization */
+ if (options->resize_buffers != 0) {
+ TEST_EQUAL(server->ssl.out_buf_len,
+ mbedtls_ssl_get_output_buflen(&server->ssl));
+ TEST_EQUAL(server->ssl.in_buf_len,
+ mbedtls_ssl_get_input_buflen(&server->ssl));
+ }
+#endif
+ /* Retest writing/reading */
+ if (options->cli_msg_len != 0 || options->srv_msg_len != 0) {
+ TEST_EQUAL(mbedtls_test_ssl_exchange_data(
+ &(client->ssl), options->cli_msg_len,
+ options->expected_cli_fragments,
+ &(server->ssl), options->srv_msg_len,
+ options->expected_srv_fragments),
+ 0);
+ }
+
+ ok = 1;
+
+exit:
+ mbedtls_free(context_buf);
+ return ok;
+}
+#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */
+
void mbedtls_test_ssl_perform_handshake(
const mbedtls_test_handshake_test_options *options)
{
@@ -2200,10 +2277,6 @@
#if defined(MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED)
const char *psk_identity = "foo";
#endif
-#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
- unsigned char *context_buf = NULL;
- size_t context_buf_len;
-#endif
int expected_handshake_result = options->expected_handshake_result;
MD_OR_USE_PSA_INIT();
@@ -2356,65 +2429,7 @@
}
#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
if (options->serialize == 1) {
- TEST_EQUAL(options->dtls, 1);
-
- TEST_EQUAL(mbedtls_ssl_context_save(&(server->ssl), NULL,
- 0, &context_buf_len),
- MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL);
-
- context_buf = mbedtls_calloc(1, context_buf_len);
- TEST_ASSERT(context_buf != NULL);
-
- TEST_EQUAL(mbedtls_ssl_context_save(&(server->ssl), context_buf,
- context_buf_len,
- &context_buf_len),
- 0);
-
- mbedtls_ssl_free(&(server->ssl));
- mbedtls_ssl_init(&(server->ssl));
-
- TEST_EQUAL(mbedtls_ssl_setup(&(server->ssl), &(server->conf)), 0);
-
- mbedtls_ssl_set_bio(&(server->ssl), &server->dtls_context,
- mbedtls_test_mock_tcp_send_msg,
- mbedtls_test_mock_tcp_recv_msg,
- NULL);
-
- mbedtls_ssl_set_user_data_p(&server->ssl, server);
-
-#if defined(MBEDTLS_TIMING_C)
- mbedtls_ssl_set_timer_cb(&server->ssl, &server->timer,
- mbedtls_timing_set_delay,
- mbedtls_timing_get_delay);
-#endif
-#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
- if (options->resize_buffers != 0) {
- /* Ensure that the buffer sizes are appropriate before resizes */
- TEST_EQUAL(server->ssl.out_buf_len, MBEDTLS_SSL_OUT_BUFFER_LEN);
- TEST_EQUAL(server->ssl.in_buf_len, MBEDTLS_SSL_IN_BUFFER_LEN);
- }
-#endif
- TEST_EQUAL(mbedtls_ssl_context_load(&(server->ssl), context_buf,
- context_buf_len), 0);
-
-#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
- /* Validate buffer sizes after context deserialization */
- if (options->resize_buffers != 0) {
- TEST_EQUAL(server->ssl.out_buf_len,
- mbedtls_ssl_get_output_buflen(&server->ssl));
- TEST_EQUAL(server->ssl.in_buf_len,
- mbedtls_ssl_get_input_buflen(&server->ssl));
- }
-#endif
- /* Retest writing/reading */
- if (options->cli_msg_len != 0 || options->srv_msg_len != 0) {
- TEST_EQUAL(mbedtls_test_ssl_exchange_data(
- &(client->ssl), options->cli_msg_len,
- options->expected_cli_fragments,
- &(server->ssl), options->srv_msg_len,
- options->expected_srv_fragments),
- 0);
- }
+ TEST_ASSERT(test_serialization(options, client, server));
}
#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */
@@ -2437,11 +2452,6 @@
mbedtls_debug_set_threshold(0);
}
#endif
-#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
- if (context_buf != NULL) {
- mbedtls_free(context_buf);
- }
-#endif
MD_OR_USE_PSA_DONE();
}
#endif /* MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED */