feat(esp-tls): adds per ssl context state management

This commit is contained in:
Ashish Sharma
2026-03-30 13:45:28 +08:00
parent a4c40112c3
commit cca227e022
4 changed files with 21 additions and 47 deletions
+11 -12
View File
@@ -17,13 +17,9 @@ int __wrap_mbedtls_ssl_tls13_handshake_client_step(mbedtls_ssl_context *ssl);
static const char *TAG = "SSL client";
static int manage_resource(mbedtls_ssl_context *ssl, bool add)
static int manage_resource(mbedtls_ssl_context *ssl, bool add, int prev_state)
{
static _Thread_local int last_state = 0;
int state = add ? ssl->MBEDTLS_PRIVATE(state) : last_state;
if (add) {
last_state = state;
}
int state = add ? ssl->MBEDTLS_PRIVATE(state) : prev_state;
if (mbedtls_ssl_is_handshake_over(ssl) || ssl->MBEDTLS_PRIVATE(handshake) == NULL) {
return 0;
@@ -265,33 +261,36 @@ static int manage_resource(mbedtls_ssl_context *ssl, bool add)
int __wrap_mbedtls_ssl_handshake_client_step(mbedtls_ssl_context *ssl)
{
CHECK_OK(manage_resource(ssl, true));
int prev_state = ssl->MBEDTLS_PRIVATE(state);
CHECK_OK(manage_resource(ssl, true, prev_state));
CHECK_OK(__real_mbedtls_ssl_handshake_client_step(ssl));
CHECK_OK(manage_resource(ssl, false));
CHECK_OK(manage_resource(ssl, false, prev_state));
return 0;
}
int __wrap_mbedtls_ssl_tls13_handshake_client_step(mbedtls_ssl_context *ssl)
{
CHECK_OK(manage_resource(ssl, true));
int prev_state = ssl->MBEDTLS_PRIVATE(state);
CHECK_OK(manage_resource(ssl, true, prev_state));
CHECK_OK(__real_mbedtls_ssl_tls13_handshake_client_step(ssl));
CHECK_OK(manage_resource(ssl, false));
CHECK_OK(manage_resource(ssl, false, prev_state));
return 0;
}
int __wrap_mbedtls_ssl_write_client_hello(mbedtls_ssl_context *ssl)
{
CHECK_OK(manage_resource(ssl, true));
int prev_state = ssl->MBEDTLS_PRIVATE(state);
CHECK_OK(manage_resource(ssl, true, prev_state));
CHECK_OK(__real_mbedtls_ssl_write_client_hello(ssl));
CHECK_OK(manage_resource(ssl, false));
CHECK_OK(manage_resource(ssl, false, prev_state));
return 0;
}
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2020-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -30,9 +30,9 @@ static bool ssl_ciphersuite_uses_rsa_key_ex(mbedtls_ssl_context *ssl)
}
#endif
static int manage_resource(mbedtls_ssl_context *ssl, bool add)
static int manage_resource(mbedtls_ssl_context *ssl, bool add, int prev_state)
{
int state = add ? ssl->MBEDTLS_PRIVATE(state) : ssl->MBEDTLS_PRIVATE(state) - 1;
int state = add ? ssl->MBEDTLS_PRIVATE(state) : prev_state;
if (mbedtls_ssl_is_handshake_over(ssl) || ssl->MBEDTLS_PRIVATE(handshake) == NULL) {
return 0;
@@ -209,11 +209,12 @@ static int manage_resource(mbedtls_ssl_context *ssl, bool add)
int __wrap_mbedtls_ssl_handshake_server_step(mbedtls_ssl_context *ssl)
{
CHECK_OK(manage_resource(ssl, true));
int prev_state = ssl->MBEDTLS_PRIVATE(state);
CHECK_OK(manage_resource(ssl, true, prev_state));
CHECK_OK(__real_mbedtls_ssl_handshake_server_step(ssl));
CHECK_OK(manage_resource(ssl, false));
CHECK_OK(manage_resource(ssl, false, prev_state));
return 0;
}