diff --git a/tests/suites/test_suite_ssl.function b/tests/suites/test_suite_ssl.function
index 4657df5..8f6d247 100644
--- a/tests/suites/test_suite_ssl.function
+++ b/tests/suites/test_suite_ssl.function
@@ -26,21 +26,21 @@
 #undef MBEDTLS_SSL_TLS1_3_LABEL
 };
 
-typedef struct log_pattern {
+typedef struct mbedtls_test_ssl_log_pattern {
     const char *pattern;
     size_t counter;
-} log_pattern;
+} mbedtls_test_ssl_log_pattern;
 
 /*
  * This function can be passed to mbedtls to receive output logs from it. In
- * this case, it will count the instances of a log_pattern in the received
+ * this case, it will count the instances of a mbedtls_test_ssl_log_pattern in the received
  * logged messages.
  */
 void log_analyzer(void *ctx, int level,
                   const char *file, int line,
                   const char *str)
 {
-    log_pattern *p = (log_pattern *) ctx;
+    mbedtls_test_ssl_log_pattern *p = (mbedtls_test_ssl_log_pattern *) ctx;
 
     (void) level;
     (void) line;
@@ -56,7 +56,7 @@
 /* Invalid minor version used when not specifying a min/max version or expecting a test to fail */
 #define TEST_SSL_MINOR_VERSION_NONE -1
 
-typedef struct handshake_test_options {
+typedef struct mbedtls_test_handshake_test_options {
     const char *cipher;
     int client_min_version;
     int client_max_version;
@@ -80,9 +80,9 @@
     void (*srv_log_fun)(void *, int, const char *, int, const char *);
     void (*cli_log_fun)(void *, int, const char *, int, const char *);
     int resize_buffers;
-} handshake_test_options;
+} mbedtls_test_handshake_test_options;
 
-void init_handshake_options(handshake_test_options *opts)
+void init_handshake_options(mbedtls_test_handshake_test_options *opts)
 {
     opts->cipher = "";
     opts->client_min_version = TEST_SSL_MINOR_VERSION_NONE;
@@ -112,18 +112,18 @@
  * Buffer structure for custom I/O callbacks.
  */
 
-typedef struct mbedtls_test_buffer {
+typedef struct mbedtls_test_ssl_buffer {
     size_t start;
     size_t content_length;
     size_t capacity;
     unsigned char *buffer;
-} mbedtls_test_buffer;
+} mbedtls_test_ssl_buffer;
 
 /*
  * Initialises \p buf. After calling this function it is safe to call
  * `mbedtls_test_buffer_free()` on \p buf.
  */
-void mbedtls_test_buffer_init(mbedtls_test_buffer *buf)
+void mbedtls_test_buffer_init(mbedtls_test_ssl_buffer *buf)
 {
     memset(buf, 0, sizeof(*buf));
 }
@@ -132,7 +132,7 @@
  * Sets up \p buf. After calling this function it is safe to call
  * `mbedtls_test_buffer_put()` and `mbedtls_test_buffer_get()` on \p buf.
  */
-int mbedtls_test_buffer_setup(mbedtls_test_buffer *buf, size_t capacity)
+int mbedtls_test_buffer_setup(mbedtls_test_ssl_buffer *buf, size_t capacity)
 {
     buf->buffer = (unsigned char *) mbedtls_calloc(capacity,
                                                    sizeof(unsigned char));
@@ -144,7 +144,7 @@
     return 0;
 }
 
-void mbedtls_test_buffer_free(mbedtls_test_buffer *buf)
+void mbedtls_test_buffer_free(mbedtls_test_ssl_buffer *buf)
 {
     if (buf->buffer != NULL) {
         mbedtls_free(buf->buffer);
@@ -164,7 +164,7 @@
  * \retval  -1, if \p buf is NULL, it hasn't been set up or \p input_len is not
  *          zero and \p input is NULL.
  */
-int mbedtls_test_buffer_put(mbedtls_test_buffer *buf,
+int mbedtls_test_buffer_put(mbedtls_test_ssl_buffer *buf,
                             const unsigned char *input, size_t input_len)
 {
     size_t overflow = 0;
@@ -220,7 +220,7 @@
  * \retval  0 <= value < \p output_len, if the data is not available.
  * \retval  -1, if \buf is NULL or it hasn't been set up.
  */
-int mbedtls_test_buffer_get(mbedtls_test_buffer *buf,
+int mbedtls_test_buffer_get(mbedtls_test_ssl_buffer *buf,
                             unsigned char *output, size_t output_len)
 {
     size_t overflow = 0;
@@ -263,12 +263,12 @@
 /*
  * Context for a message metadata queue (fifo) that is on top of the ring buffer.
  */
-typedef struct mbedtls_test_message_queue {
+typedef struct mbedtls_test_ssl_message_queue {
     size_t *messages;
     int pos;
     int num;
     int capacity;
-} mbedtls_test_message_queue;
+} mbedtls_test_ssl_message_queue;
 
 /*
  * Setup and free functions for the message metadata queue.
@@ -279,7 +279,7 @@
  * \retval  0, if a metadata queue of a given length can be allocated.
  * \retval  MBEDTLS_ERR_SSL_ALLOC_FAILED, if allocation failed.
  */
-int mbedtls_test_message_queue_setup(mbedtls_test_message_queue *queue,
+int mbedtls_test_message_queue_setup(mbedtls_test_ssl_message_queue *queue,
                                      size_t capacity)
 {
     queue->messages = (size_t *) mbedtls_calloc(capacity, sizeof(size_t));
@@ -294,7 +294,7 @@
     return 0;
 }
 
-void mbedtls_test_message_queue_free(mbedtls_test_message_queue *queue)
+void mbedtls_test_message_queue_free(mbedtls_test_ssl_message_queue *queue)
 {
     if (queue == NULL) {
         return;
@@ -315,7 +315,7 @@
  * \retval  MBEDTLS_ERR_SSL_WANT_WRITE, if the queue is full.
  * \retval  \p len, if the push was successful.
  */
-int mbedtls_test_message_queue_push_info(mbedtls_test_message_queue *queue,
+int mbedtls_test_message_queue_push_info(mbedtls_test_ssl_message_queue *queue,
                                          size_t len)
 {
     int place;
@@ -343,7 +343,7 @@
  * \retval  message length, if the pop was successful, up to the given
             \p buf_len.
  */
-int mbedtls_test_message_queue_pop_info(mbedtls_test_message_queue *queue,
+int mbedtls_test_message_queue_pop_info(mbedtls_test_ssl_message_queue *queue,
                                         size_t buf_len)
 {
     size_t message_length;
@@ -378,7 +378,7 @@
  *          set to the full message length so that the
  *          caller knows what portion of the message can be dropped.
  */
-int mbedtls_test_message_queue_peek_info(mbedtls_test_message_queue *queue,
+int mbedtls_test_message_queue_peek_info(mbedtls_test_ssl_message_queue *queue,
                                          size_t buf_len, size_t *msg_len)
 {
     if (queue == NULL || msg_len == NULL) {
@@ -397,17 +397,17 @@
 
 #define MBEDTLS_MOCK_SOCKET_CONNECTED 1
 
-typedef struct mbedtls_mock_socket {
+typedef struct mbedtls_test_mock_socket {
     int status;
-    mbedtls_test_buffer *input;
-    mbedtls_test_buffer *output;
-    struct mbedtls_mock_socket *peer;
-} mbedtls_mock_socket;
+    mbedtls_test_ssl_buffer *input;
+    mbedtls_test_ssl_buffer *output;
+    struct mbedtls_test_mock_socket *peer;
+} mbedtls_test_mock_socket;
 
 /*
  * Setup and teardown functions for mock sockets.
  */
-void mbedtls_mock_socket_init(mbedtls_mock_socket *socket)
+void mbedtls_mock_socket_init(mbedtls_test_mock_socket *socket)
 {
     memset(socket, 0, sizeof(*socket));
 }
@@ -425,7 +425,7 @@
  * phenomenon that when closing a UDP connection the peer is not aware of the
  * connection having been closed.
  */
-void mbedtls_mock_socket_close(mbedtls_mock_socket *socket)
+void mbedtls_mock_socket_close(mbedtls_test_mock_socket *socket)
 {
     if (socket == NULL) {
         return;
@@ -458,14 +458,14 @@
  * the correct value allows for simulation of MTU, sanity testing the mock
  * implementation and mocking TCP connections with lower memory cost.
  */
-int mbedtls_mock_socket_connect(mbedtls_mock_socket *peer1,
-                                mbedtls_mock_socket *peer2,
+int mbedtls_mock_socket_connect(mbedtls_test_mock_socket *peer1,
+                                mbedtls_test_mock_socket *peer2,
                                 size_t bufsize)
 {
     int ret = -1;
 
     peer1->output =
-        (mbedtls_test_buffer *) mbedtls_calloc(1, sizeof(mbedtls_test_buffer));
+        (mbedtls_test_ssl_buffer *) mbedtls_calloc(1, sizeof(mbedtls_test_ssl_buffer));
     if (peer1->output == NULL) {
         ret = MBEDTLS_ERR_SSL_ALLOC_FAILED;
         goto exit;
@@ -476,7 +476,7 @@
     }
 
     peer2->output =
-        (mbedtls_test_buffer *) mbedtls_calloc(1, sizeof(mbedtls_test_buffer));
+        (mbedtls_test_ssl_buffer *) mbedtls_calloc(1, sizeof(mbedtls_test_ssl_buffer));
     if (peer2->output == NULL) {
         ret = MBEDTLS_ERR_SSL_ALLOC_FAILED;
         goto exit;
@@ -510,7 +510,7 @@
 
 int mbedtls_mock_tcp_send_b(void *ctx, const unsigned char *buf, size_t len)
 {
-    mbedtls_mock_socket *socket = (mbedtls_mock_socket *) ctx;
+    mbedtls_test_mock_socket *socket = (mbedtls_test_mock_socket *) ctx;
 
     if (socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED) {
         return -1;
@@ -521,7 +521,7 @@
 
 int mbedtls_mock_tcp_recv_b(void *ctx, unsigned char *buf, size_t len)
 {
-    mbedtls_mock_socket *socket = (mbedtls_mock_socket *) ctx;
+    mbedtls_test_mock_socket *socket = (mbedtls_test_mock_socket *) ctx;
 
     if (socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED) {
         return -1;
@@ -536,7 +536,7 @@
 
 int mbedtls_mock_tcp_send_nb(void *ctx, const unsigned char *buf, size_t len)
 {
-    mbedtls_mock_socket *socket = (mbedtls_mock_socket *) ctx;
+    mbedtls_test_mock_socket *socket = (mbedtls_test_mock_socket *) ctx;
 
     if (socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED) {
         return -1;
@@ -551,7 +551,7 @@
 
 int mbedtls_mock_tcp_recv_nb(void *ctx, unsigned char *buf, size_t len)
 {
-    mbedtls_mock_socket *socket = (mbedtls_mock_socket *) ctx;
+    mbedtls_test_mock_socket *socket = (mbedtls_test_mock_socket *) ctx;
 
     if (socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED) {
         return -1;
@@ -578,9 +578,9 @@
  * freed in the respective setup and free calls.
  */
 typedef struct mbedtls_test_message_socket_context {
-    mbedtls_test_message_queue *queue_input;
-    mbedtls_test_message_queue *queue_output;
-    mbedtls_mock_socket *socket;
+    mbedtls_test_ssl_message_queue *queue_input;
+    mbedtls_test_ssl_message_queue *queue_output;
+    mbedtls_test_mock_socket *socket;
 } mbedtls_test_message_socket_context;
 
 void mbedtls_message_socket_init(mbedtls_test_message_socket_context *ctx)
@@ -599,10 +599,10 @@
  * \retval  MBEDTLS_ERR_SSL_ALLOC_FAILED, if allocation of a message
  *          queue failed.
  */
-int mbedtls_message_socket_setup(mbedtls_test_message_queue *queue_input,
-                                 mbedtls_test_message_queue *queue_output,
+int mbedtls_message_socket_setup(mbedtls_test_ssl_message_queue *queue_input,
+                                 mbedtls_test_ssl_message_queue *queue_output,
                                  size_t queue_capacity,
-                                 mbedtls_mock_socket *socket,
+                                 mbedtls_test_mock_socket *socket,
                                  mbedtls_test_message_socket_context *ctx)
 {
     int ret = mbedtls_test_message_queue_setup(queue_input, queue_capacity);
@@ -646,8 +646,8 @@
  */
 int mbedtls_mock_tcp_send_msg(void *ctx, const unsigned char *buf, size_t len)
 {
-    mbedtls_test_message_queue *queue;
-    mbedtls_mock_socket *socket;
+    mbedtls_test_ssl_message_queue *queue;
+    mbedtls_test_mock_socket *socket;
     mbedtls_test_message_socket_context *context = (mbedtls_test_message_socket_context *) ctx;
 
     if (context == NULL || context->socket == NULL
@@ -683,8 +683,8 @@
  */
 int mbedtls_mock_tcp_recv_msg(void *ctx, unsigned char *buf, size_t buf_len)
 {
-    mbedtls_test_message_queue *queue;
-    mbedtls_mock_socket *socket;
+    mbedtls_test_ssl_message_queue *queue;
+    mbedtls_test_mock_socket *socket;
     mbedtls_test_message_socket_context *context = (mbedtls_test_message_socket_context *) ctx;
     size_t drop_len = 0;
     size_t msg_len;
@@ -736,31 +736,31 @@
 /*
  * Structure with endpoint's certificates for SSL communication tests.
  */
-typedef struct mbedtls_endpoint_certificate {
+typedef struct mbedtls_test_ssl_endpoint_certificate {
     mbedtls_x509_crt *ca_cert;
     mbedtls_x509_crt *cert;
     mbedtls_pk_context *pkey;
-} mbedtls_endpoint_certificate;
+} mbedtls_test_ssl_endpoint_certificate;
 
 /*
  * Endpoint structure for SSL communication tests.
  */
-typedef struct mbedtls_endpoint {
+typedef struct mbedtls_test_ssl_endpoint {
     const char *name;
     mbedtls_ssl_context ssl;
     mbedtls_ssl_config conf;
     mbedtls_ctr_drbg_context ctr_drbg;
     mbedtls_entropy_context entropy;
-    mbedtls_mock_socket socket;
-    mbedtls_endpoint_certificate cert;
-} mbedtls_endpoint;
+    mbedtls_test_mock_socket socket;
+    mbedtls_test_ssl_endpoint_certificate cert;
+} mbedtls_test_ssl_endpoint;
 
 /*
  * Deinitializes certificates from endpoint represented by \p ep.
  */
-void mbedtls_endpoint_certificate_free(mbedtls_endpoint *ep)
+void mbedtls_endpoint_certificate_free(mbedtls_test_ssl_endpoint *ep)
 {
-    mbedtls_endpoint_certificate *cert = &(ep->cert);
+    mbedtls_test_ssl_endpoint_certificate *cert = &(ep->cert);
     if (cert != NULL) {
         if (cert->ca_cert != NULL) {
             mbedtls_x509_crt_free(cert->ca_cert);
@@ -792,11 +792,11 @@
  *
  * \retval  0 on success, otherwise error code.
  */
-int mbedtls_endpoint_certificate_init(mbedtls_endpoint *ep, int pk_alg)
+int mbedtls_endpoint_certificate_init(mbedtls_test_ssl_endpoint *ep, int pk_alg)
 {
     int i = 0;
     int ret = -1;
-    mbedtls_endpoint_certificate *cert = NULL;
+    mbedtls_test_ssl_endpoint_certificate *cert = NULL;
 
     if (ep == NULL) {
         return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
@@ -896,10 +896,10 @@
  *
  * \retval  0 on success, otherwise error code.
  */
-int mbedtls_endpoint_init(mbedtls_endpoint *ep, int endpoint_type, int pk_alg,
+int mbedtls_endpoint_init(mbedtls_test_ssl_endpoint *ep, int endpoint_type, int pk_alg,
                           mbedtls_test_message_socket_context *dtls_context,
-                          mbedtls_test_message_queue *input_queue,
-                          mbedtls_test_message_queue *output_queue,
+                          mbedtls_test_ssl_message_queue *input_queue,
+                          mbedtls_test_ssl_message_queue *output_queue,
                           const mbedtls_ecp_group_id *curves)
 {
     int ret = -1;
@@ -983,7 +983,7 @@
 /*
  * Deinitializes endpoint represented by \p ep.
  */
-void mbedtls_endpoint_free(mbedtls_endpoint *ep,
+void mbedtls_endpoint_free(mbedtls_test_ssl_endpoint *ep,
                            mbedtls_test_message_socket_context *context)
 {
     mbedtls_endpoint_certificate_free(ep);
@@ -1668,12 +1668,12 @@
     defined(MBEDTLS_CERTS_C) && \
     defined(MBEDTLS_ENTROPY_C) && \
     defined(MBEDTLS_CTR_DRBG_C)
-void perform_handshake(handshake_test_options *options)
+void perform_handshake(mbedtls_test_handshake_test_options *options)
 {
     /* forced_ciphersuite needs to last until the end of the handshake */
     int forced_ciphersuite[2];
     enum { BUFFSIZE = 17000 };
-    mbedtls_endpoint client, server;
+    mbedtls_test_ssl_endpoint client, server;
 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED)
     const char *psk_identity = "foo";
 #endif
@@ -1693,7 +1693,7 @@
     mbedtls_platform_zeroize(&client, sizeof(client));
     mbedtls_platform_zeroize(&server, sizeof(server));
 
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2031,7 +2031,7 @@
 void test_callback_buffer_sanity()
 {
     enum { MSGLEN = 10 };
-    mbedtls_test_buffer buf;
+    mbedtls_test_ssl_buffer buf;
     unsigned char input[MSGLEN];
     unsigned char output[MSGLEN];
 
@@ -2089,7 +2089,7 @@
 /* END_CASE */
 
 /*
- * Test if the implementation of `mbedtls_test_buffer` related functions is
+ * Test if the implementation of `mbedtls_test_ssl_buffer` related functions is
  * correct and works as expected.
  *
  * That is
@@ -2111,7 +2111,7 @@
     int put_ret[ROUNDS];
     size_t get[ROUNDS];
     int get_ret[ROUNDS];
-    mbedtls_test_buffer buf;
+    mbedtls_test_ssl_buffer buf;
     unsigned char *input = NULL;
     size_t input_len;
     unsigned char *output = NULL;
@@ -2201,7 +2201,7 @@
 /* END_CASE */
 
 /*
- * Test if the implementation of `mbedtls_mock_socket` related I/O functions is
+ * Test if the implementation of `mbedtls_test_mock_socket` related I/O functions is
  * correct and works as expected on unconnected sockets.
  */
 
@@ -2211,7 +2211,7 @@
     enum { MSGLEN = 105 };
     unsigned char message[MSGLEN] = { 0 };
     unsigned char received[MSGLEN] = { 0 };
-    mbedtls_mock_socket socket;
+    mbedtls_test_mock_socket socket;
 
     mbedtls_mock_socket_init(&socket);
     TEST_ASSERT(mbedtls_mock_tcp_send_b(&socket, message, MSGLEN) < 0);
@@ -2234,7 +2234,7 @@
 /* END_CASE */
 
 /*
- * Test if the implementation of `mbedtls_mock_socket` related functions can
+ * Test if the implementation of `mbedtls_test_mock_socket` related functions can
  * send a single message from the client to the server.
  */
 
@@ -2245,8 +2245,8 @@
     enum { BUFLEN = MSGLEN / 5 };
     unsigned char message[MSGLEN];
     unsigned char received[MSGLEN];
-    mbedtls_mock_socket client;
-    mbedtls_mock_socket server;
+    mbedtls_test_mock_socket client;
+    mbedtls_test_mock_socket server;
     size_t written, read;
     int send_ret, recv_ret;
     mbedtls_ssl_send_t *send;
@@ -2327,7 +2327,7 @@
 /* END_CASE */
 
 /*
- * Test if the implementation of `mbedtls_mock_socket` related functions can
+ * Test if the implementation of `mbedtls_test_mock_socket` related functions can
  * send messages in both direction at the same time (with the I/O calls
  * interleaving).
  */
@@ -2340,8 +2340,8 @@
     enum { BUFLEN = MSGLEN / 5 };
     unsigned char message[ROUNDS][MSGLEN];
     unsigned char received[ROUNDS][MSGLEN];
-    mbedtls_mock_socket client;
-    mbedtls_mock_socket server;
+    mbedtls_test_mock_socket client;
+    mbedtls_test_mock_socket server;
     size_t written[ROUNDS];
     size_t read[ROUNDS];
     int send_ret[ROUNDS];
@@ -2381,7 +2381,7 @@
     /* This loop does not stop as long as there was a successful write or read
      * of at least one byte on either side. */
     while (progress != 0) {
-        mbedtls_mock_socket *socket;
+        mbedtls_test_mock_socket *socket;
 
         for (i = 0; i < ROUNDS; i++) {
             /* First sending is from the client */
@@ -2456,7 +2456,7 @@
 /* BEGIN_CASE */
 void ssl_message_queue_sanity()
 {
-    mbedtls_test_message_queue queue;
+    mbedtls_test_ssl_message_queue queue;
 
     /* Trying to push/pull to an empty queue */
     TEST_ASSERT(mbedtls_test_message_queue_push_info(NULL, 1)
@@ -2476,7 +2476,7 @@
 /* BEGIN_CASE */
 void ssl_message_queue_basic()
 {
-    mbedtls_test_message_queue queue;
+    mbedtls_test_ssl_message_queue queue;
 
     TEST_ASSERT(mbedtls_test_message_queue_setup(&queue, 3) == 0);
 
@@ -2503,7 +2503,7 @@
 /* BEGIN_CASE */
 void ssl_message_queue_overflow_underflow()
 {
-    mbedtls_test_message_queue queue;
+    mbedtls_test_ssl_message_queue queue;
 
     TEST_ASSERT(mbedtls_test_message_queue_setup(&queue, 3) == 0);
 
@@ -2529,7 +2529,7 @@
 /* BEGIN_CASE */
 void ssl_message_queue_interleaved()
 {
-    mbedtls_test_message_queue queue;
+    mbedtls_test_ssl_message_queue queue;
 
     TEST_ASSERT(mbedtls_test_message_queue_setup(&queue, 3) == 0);
 
@@ -2563,7 +2563,7 @@
 /* BEGIN_CASE */
 void ssl_message_queue_insufficient_buffer()
 {
-    mbedtls_test_message_queue queue;
+    mbedtls_test_ssl_message_queue queue;
     size_t message_len = 10;
     size_t buffer_len = 5;
 
@@ -2584,8 +2584,8 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN] = { 0 }, received[MSGLEN];
-    mbedtls_mock_socket client, server;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_mock_socket client, server;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2630,9 +2630,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2684,9 +2684,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2741,9 +2741,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2789,9 +2789,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2847,9 +2847,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2900,9 +2900,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -2957,9 +2957,9 @@
 {
     enum { MSGLEN = 10 };
     unsigned char message[MSGLEN], received[MSGLEN];
-    mbedtls_mock_socket client, server;
+    mbedtls_test_mock_socket client, server;
     unsigned i;
-    mbedtls_test_message_queue server_queue, client_queue;
+    mbedtls_test_ssl_message_queue server_queue, client_queue;
     mbedtls_test_message_socket_context server_context, client_context;
     mbedtls_message_socket_init(&server_context);
     mbedtls_message_socket_init(&client_context);
@@ -4037,7 +4037,7 @@
 void mbedtls_endpoint_sanity(int endpoint_type)
 {
     enum { BUFFSIZE = 1024 };
-    mbedtls_endpoint ep;
+    mbedtls_test_ssl_endpoint ep;
     int ret = -1;
 
     ret = mbedtls_endpoint_init(NULL, endpoint_type, MBEDTLS_PK_RSA,
@@ -4060,7 +4060,7 @@
 void move_handshake_to_state(int endpoint_type, int state, int need_pass)
 {
     enum { BUFFSIZE = 1024 };
-    mbedtls_endpoint base_ep, second_ep;
+    mbedtls_test_ssl_endpoint base_ep, second_ep;
     int ret = -1;
 
     mbedtls_platform_zeroize(&base_ep, sizeof(base_ep));
@@ -4103,7 +4103,7 @@
                        int server_min_version, int server_max_version,
                        int expected_negotiated_version)
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.client_min_version = client_min_version;
@@ -4131,7 +4131,7 @@
 /* BEGIN_CASE depends_on:MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED:MBEDTLS_CERTS_C:!MBEDTLS_USE_PSA_CRYPTO:MBEDTLS_PKCS1_V15:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_ENTROPY_C:MBEDTLS_CTR_DRBG_C:MBEDTLS_SHA256_C */
 void handshake_psk_cipher(char *cipher, int pk_alg, data_t *psk_str, int dtls)
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.cipher = cipher;
@@ -4161,7 +4161,7 @@
               int expected_cli_fragments,
               int expected_srv_fragments, int dtls)
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.mfl = mfl;
@@ -4204,7 +4204,7 @@
 /* BEGIN_CASE depends_on:MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED:MBEDTLS_CERTS_C:!MBEDTLS_USE_PSA_CRYPTO:MBEDTLS_PKCS1_V15:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_RSA_C:MBEDTLS_ECP_DP_SECP384R1_ENABLED:MBEDTLS_SSL_PROTO_DTLS:MBEDTLS_SSL_RENEGOTIATION:MBEDTLS_SSL_CONTEXT_SERIALIZATION:MBEDTLS_ENTROPY_C:MBEDTLS_CTR_DRBG_C:MBEDTLS_SHA256_C:MBEDTLS_CAN_HANDLE_RSA_TEST_KEY */
 void handshake_serialization()
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.serialize = 1;
@@ -4220,8 +4220,8 @@
                              int expected_srv_hs_fragmentation,
                              int expected_cli_hs_fragmentation)
 {
-    handshake_test_options options;
-    log_pattern srv_pattern, cli_pattern;
+    mbedtls_test_handshake_test_options options;
+    mbedtls_test_ssl_log_pattern srv_pattern, cli_pattern;
 
     srv_pattern.pattern = cli_pattern.pattern = "found fragmented DTLS handshake";
     srv_pattern.counter = 0;
@@ -4254,7 +4254,7 @@
 /* BEGIN_CASE depends_on:MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED:MBEDTLS_CERTS_C:!MBEDTLS_USE_PSA_CRYPTO:MBEDTLS_PKCS1_V15:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_RSA_C:MBEDTLS_ECP_DP_SECP384R1_ENABLED:MBEDTLS_SSL_PROTO_DTLS:MBEDTLS_SSL_RENEGOTIATION:MBEDTLS_ENTROPY_C:MBEDTLS_CTR_DRBG_C:MBEDTLS_SHA256_C:MBEDTLS_CAN_HANDLE_RSA_TEST_KEY */
 void renegotiation(int legacy_renegotiation)
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.renegotiate = 1;
@@ -4271,7 +4271,7 @@
 void resize_buffers(int mfl, int renegotiation, int legacy_renegotiation,
                     int serialize, int dtls, char *cipher)
 {
-    handshake_test_options options;
+    mbedtls_test_handshake_test_options options;
     init_handshake_options(&options);
 
     options.mfl = mfl;
@@ -4314,7 +4314,7 @@
 void raw_key_agreement_fail(int bad_server_ecdhe_key)
 {
     enum { BUFFSIZE = 17000 };
-    mbedtls_endpoint client, server;
+    mbedtls_test_ssl_endpoint client, server;
     mbedtls_psa_stats_t stats;
     size_t free_slots_before = -1;
 
