From 7fd1378fbb0b81231a83f91f8227f8fb083635a5 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Tue, 25 Apr 2023 17:40:01 +0530 Subject: [PATCH] esp_tls: add initial support for TLS 1.3 connection --- components/esp-tls/esp_tls_mbedtls.c | 16 ++++++++++++++++ .../esp-tls/private_include/esp_tls_private.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/components/esp-tls/esp_tls_mbedtls.c b/components/esp-tls/esp_tls_mbedtls.c index 79921f0c36d2..6448845186e5 100644 --- a/components/esp-tls/esp_tls_mbedtls.c +++ b/components/esp-tls/esp_tls_mbedtls.c @@ -72,6 +72,15 @@ esp_err_t esp_create_mbedtls_handle(const char *hostname, size_t hostlen, const assert(tls != NULL); int ret; esp_err_t esp_ret = ESP_FAIL; + +#ifdef CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 + psa_status_t status = psa_crypto_init(); + if (status != PSA_SUCCESS) { + ESP_LOGE(TAG, "Failed to initialize PSA crypto, returned %d\n", (int) status); + return esp_ret; + } +#endif // CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 + tls->server_fd.fd = tls->sockfd; mbedtls_ssl_init(&tls->ssl); mbedtls_ctr_drbg_init(&tls->ctr_drbg); @@ -220,6 +229,13 @@ ssize_t esp_mbedtls_read(esp_tls_t *tls, char *data, size_t datalen) { ssize_t ret = mbedtls_ssl_read(&tls->ssl, (unsigned char *)data, datalen); +#if CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 && CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS + while (ret == MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) { + ESP_LOGD(TAG, "got session ticket in TLS 1.3 connection, retry read"); + ret = mbedtls_ssl_read(&tls->ssl, (unsigned char *)data, datalen); + } +#endif // CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 && CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS + if (ret < 0) { if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { return 0; diff --git a/components/esp-tls/private_include/esp_tls_private.h b/components/esp-tls/private_include/esp_tls_private.h index f071c9b0ff30..295162c7fb5e 100644 --- a/components/esp-tls/private_include/esp_tls_private.h +++ b/components/esp-tls/private_include/esp_tls_private.h @@ -26,6 +26,9 @@ #ifdef CONFIG_ESP_TLS_SERVER_SESSION_TICKETS #include "mbedtls/ssl_ticket.h" #endif +#ifdef CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 +#include "psa/crypto.h" +#endif #elif CONFIG_ESP_TLS_USING_WOLFSSL #include "wolfssl/wolfcrypt/settings.h" #include "wolfssl/ssl.h"