1 /* 2 * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 #ifndef _DYNAMIC_IMPL_H_ 7 #define _DYNAMIC_IMPL_H_ 8 9 #include <stddef.h> 10 #include <string.h> 11 #include <stdbool.h> 12 13 /* TODO: Remove this once the appropriate solution is found 14 * 15 * ssl_misc.h header uses private elements from 16 * mbedtls, which become undefined if the following flag 17 * is not defined 18 */ 19 #define MBEDTLS_ALLOW_PRIVATE_ACCESS 20 21 // located at mbedtls/library/ssl_misc.h 22 #include "ssl_misc.h" 23 24 #include "mbedtls/ssl.h" 25 #include "mbedtls/platform.h" 26 #include "esp_log.h" 27 #include "sdkconfig.h" 28 29 #define TRACE_CHECK(_fn, _state) \ 30 ({ \ 31 ESP_LOGV(TAG, "%d " _state " to do \"%s\"", __LINE__, # _fn); \ 32 }) 33 34 #define CHECK_OK(_fn) \ 35 ({ \ 36 int _ret; \ 37 \ 38 TRACE_CHECK(_fn, "state"); \ 39 \ 40 if ((_ret = _fn) != 0) { \ 41 ESP_LOGV(TAG, "\"%s\" result is %d", # _fn, -_ret); \ 42 TRACE_CHECK(_fn, "fail"); \ 43 return _ret; \ 44 } \ 45 \ 46 TRACE_CHECK(_fn, "end"); \ 47 \ 48 }) 49 50 typedef enum { 51 ESP_MBEDTLS_SSL_BUF_CACHED, 52 ESP_MBEDTLS_SSL_BUF_NO_CACHED, 53 } esp_mbedtls_ssl_buf_states; 54 55 struct esp_mbedtls_ssl_buf { 56 esp_mbedtls_ssl_buf_states state; 57 unsigned int len; 58 unsigned char buf[]; 59 }; 60 61 #define SSL_BUF_HEAD_OFFSET_SIZE ((int)offsetof(struct esp_mbedtls_ssl_buf, buf)) 62 63 void esp_mbedtls_free_buf(unsigned char *buf); 64 65 int esp_mbedtls_setup_tx_buffer(mbedtls_ssl_context *ssl); 66 67 void esp_mbedtls_setup_rx_buffer(mbedtls_ssl_context *ssl); 68 69 int esp_mbedtls_reset_add_tx_buffer(mbedtls_ssl_context *ssl); 70 71 int esp_mbedtls_reset_add_rx_buffer(mbedtls_ssl_context *ssl); 72 73 int esp_mbedtls_reset_free_tx_buffer(mbedtls_ssl_context *ssl); 74 75 void esp_mbedtls_reset_free_rx_buffer(mbedtls_ssl_context *ssl); 76 77 int esp_mbedtls_add_tx_buffer(mbedtls_ssl_context *ssl, size_t buffer_len); 78 79 int esp_mbedtls_add_rx_buffer(mbedtls_ssl_context *ssl); 80 81 int esp_mbedtls_free_tx_buffer(mbedtls_ssl_context *ssl); 82 83 int esp_mbedtls_free_rx_buffer(mbedtls_ssl_context *ssl); 84 85 size_t esp_mbedtls_get_crt_size(mbedtls_x509_crt *cert, size_t *num); 86 87 #ifdef CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA 88 void esp_mbedtls_free_dhm(mbedtls_ssl_context *ssl); 89 90 void esp_mbedtls_free_keycert(mbedtls_ssl_context *ssl); 91 92 void esp_mbedtls_free_keycert_cert(mbedtls_ssl_context *ssl); 93 94 void esp_mbedtls_free_keycert_key(mbedtls_ssl_context *ssl); 95 #endif 96 97 #ifdef CONFIG_MBEDTLS_DYNAMIC_FREE_CA_CERT 98 void esp_mbedtls_free_cacert(mbedtls_ssl_context *ssl); 99 #endif 100 101 #endif /* _DYNAMIC_IMPL_H_ */ 102