Skip to content

Commit

Permalink
Apply various espressif compatibility updates
Browse files Browse the repository at this point in the history
  • Loading branch information
gojimmypi committed Oct 16, 2024
1 parent db6a2cc commit 9e6d6b2
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 31 deletions.
2 changes: 1 addition & 1 deletion wolfcrypt/src/port/Espressif/esp32_aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ int esp_hw_show_aes_metrics(void)
#if defined(WOLFSSL_HW_METRICS)

ESP_LOGI(TAG, "--------------------------------------------------------");
ESP_LOGI(TAG, "------------- wolfSSL ESP HW AES Metrics----------------");
ESP_LOGI(TAG, "------------- wolfSSL ESP HW AES Metrics -------------");
ESP_LOGI(TAG, "--------------------------------------------------------");

ESP_LOGI(TAG, "esp_aes_unsupported_length_usage_ct = %lu",
Expand Down
4 changes: 4 additions & 0 deletions wolfcrypt/src/port/Espressif/esp32_mp.c
Original file line number Diff line number Diff line change
Expand Up @@ -3039,12 +3039,16 @@ int esp_mp_exptmod(MATH_INT_T* X, MATH_INT_T* Y, MATH_INT_T* M, MATH_INT_T* Z)
}

/* 8. clear and release HW */
#ifdef WOLFSSL_ESP32_HW_LOCK_DEBUG
ESP_LOGI(TAG, "Unlock esp_mp_exptmod");
#endif
if (exptmod_lock_called) {
ret = esp_mp_hw_unlock();
}
else {
#ifdef WOLFSSL_ESP32_HW_LOCK_DEBUG
ESP_LOGV(TAG, "Lock not called");
#endif
}
/* end if CONFIG_IDF_TARGET_ESP32C6 */

Expand Down
4 changes: 2 additions & 2 deletions wolfcrypt/src/port/Espressif/esp32_sha.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
*/

/*
* ESP32-C3: https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf
* ESP32-C3: esp32-c3_technical_reference_manual_en.pdf
* see page 335: no SHA-512
*
*/
Expand Down Expand Up @@ -2384,7 +2384,7 @@ int esp_hw_show_sha_metrics(void)
int ret = 0;
#if defined(WOLFSSL_ESP32_CRYPT) && !defined(NO_WOLFSSL_ESP32_CRYPT_HASH)
ESP_LOGI(TAG, "--------------------------------------------------------");
ESP_LOGI(TAG, "------------- wolfSSL ESP HW SHA Metrics----------------");
ESP_LOGI(TAG, "------------- wolfSSL ESP HW SHA Metrics -------------");
ESP_LOGI(TAG, "--------------------------------------------------------");

ESP_LOGI(TAG, "esp_sha_hw_copy_ct = %lu",
Expand Down
26 changes: 17 additions & 9 deletions wolfcrypt/src/port/Espressif/esp_crt_bundle/esp_crt_bundle.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,18 @@ esp_err_t esp_crt_bundle_attach(void *conf)
#include <wolfssl/wolfcrypt/asn.h>
#include <wolfssl/wolfcrypt/error-crypt.h>

#include <esp_tls.h> /* needed only for esp_tls_free_global_ca_store() */
#ifdef WOLFSSL_CMAKE_REQUIRED_ESP_TLS
/* We're already here since CONFIG_ESP_TLS_USING_WOLFSSL is enabled, */
/* but do we have a recent version of wolfSSL CMakeLists.txt to support */
/* using wolfSSL in ESP-IDF? If so, include the esp-tls component here: */
#include <esp_tls.h> /* needed only for esp_tls_free_global_ca_store() */
#endif

/* There's a minimum version of wolfSSL needed for Certificate Bundle Support.
*
* See the latest code at:
* https://github.com/wolfSSL/wolfssl or
* https://components.espressif.com/components/wolfssl/wolfssl
* https://github.com/wolfSSL/wolfssl or Managed Components at
* https://www.wolfssl.com/wolfssl-now-available-in-espressif-component-registry/
*/
#if defined(WOLFSSL_ESPIDF_COMPONENT_VERSION)
#if (WOLFSSL_ESPIDF_COMPONENT_VERSION > 0)
Expand Down Expand Up @@ -186,12 +191,10 @@ typedef struct crt_bundle_t {
static WOLFSSL_X509* store_cert = NULL; /* will point to existing param values*/
static WOLFSSL_X509* bundle_cert = NULL; /* the iterating cert being reviewed.*/

static const uint8_t **crts = NULL;
static uint16_t num_certs = 0;


/* Found in <esp_tls.h> */
void esp_tls_free_global_ca_store(void);
#ifdef CONFIG_WOLFSSL_CERTIFICATE_BUNDLE
static const uint8_t **crts = NULL;
static uint16_t num_certs = 0;
#endif

#ifdef CONFIG_WOLFSSL_CERTIFICATE_BUNDLE
static esp_err_t wolfssl_esp_crt_bundle_init(const uint8_t *x509_bundle,
Expand Down Expand Up @@ -1514,7 +1517,12 @@ esp_err_t wolfSSL_bundle_cleanup(void)
s_crt_bundle.crts = NULL;
}

#ifdef WOLFSSL_CMAKE_REQUIRED_ESP_TLS
/* When the esp-tls is linked as a requirement in CMake and used by the
* ESP-IDF in the esp-tls component, call at cleanup time: */
esp_tls_free_global_ca_store();
#endif

/* Be sure to free the bundle_cert first, as it may be part of store. */
if (bundle_cert != NULL) {
#ifdef DEBUG_WOLFSSL_MALLOC
Expand Down
38 changes: 28 additions & 10 deletions wolfcrypt/src/port/Espressif/esp_sdk_mem_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@

/* wolfSSL */
/* Always include wolfcrypt/settings.h before any other wolfSSL file. */
/* Reminder: settings.h pulls in user_settings.h; don't include it here. */
#ifdef WOLFSSL_USER_SETTINGS
#include <wolfssl/wolfcrypt/settings.h>
#endif
/* Be sure to define WOLFSSL_USER_SETTINGS, typically in CMakeLists.txt */
/* Reminder: settings.h pulls in user_settings.h */
/* Do not explicitly include user_settings.h here. */
#include <wolfssl/wolfcrypt/settings.h>

#if defined(WOLFSSL_ESPIDF) /* Entire file is only for Espressif EDP-IDF */

Expand Down Expand Up @@ -71,8 +71,6 @@ extern wc_ptr_t _rodata_start[];
extern wc_ptr_t _rodata_end[];
extern wc_ptr_t _bss_start[];
extern wc_ptr_t _bss_end[];
extern wc_ptr_t _rtc_data_start[];
extern wc_ptr_t _rtc_data_end[];
extern wc_ptr_t _rtc_bss_start[];
extern wc_ptr_t _rtc_bss_end[];
extern wc_ptr_t _iram_start[];
Expand All @@ -83,16 +81,24 @@ extern wc_ptr_t _init_end[];
#endif
extern wc_ptr_t _iram_text_start[];
extern wc_ptr_t _iram_text_end[];
extern wc_ptr_t _iram_bss_start[];
extern wc_ptr_t _iram_bss_end[];
#if defined(CONFIG_IDF_TARGET_ESP32S2)
/* TODO: Find ESP32-S2 equivalent */
#else
extern wc_ptr_t _iram_bss_start[];
extern wc_ptr_t _iram_bss_end[];
#endif
extern wc_ptr_t _noinit_start[];
extern wc_ptr_t _noinit_end[];
extern wc_ptr_t _text_start[];
extern wc_ptr_t _text_end[];
extern wc_ptr_t _heap_start[];
extern wc_ptr_t _heap_end[];
extern wc_ptr_t _rtc_data_start[];
extern wc_ptr_t _rtc_data_end[];
#ifdef CONFIG_IDF_TARGET_ESP32C2
/* no rtc_data on ESP32-C2*/
#else
extern wc_ptr_t _rtc_data_start[];
extern wc_ptr_t _rtc_data_end[];
#endif

#if defined(CONFIG_IDF_TARGET_ARCH_XTENSA) && CONFIG_IDF_TARGET_ARCH_XTENSA == 1
extern void* _thread_local_start;
Expand Down Expand Up @@ -194,7 +200,11 @@ int sdk_init_meminfo(void) {
#endif
sdk_log_meminfo(data, _data_start, _data_end);
sdk_log_meminfo(user_data_ram, USER_DATA_START, USER_DATA_END);
#if defined(CONFIG_IDF_TARGET_ESP32S2)
/* TODO: Find ESP32-S2 equivalent of bss */
#else
sdk_log_meminfo(bss, _bss_start, _bss_end);
#endif
sdk_log_meminfo(noinit, _noinit_start, _noinit_end);
sdk_log_meminfo(ets_system, ETS_SYS_START, ETS_SYS_END);
sdk_log_meminfo(rodata, _rodata_start, _rodata_end);
Expand All @@ -203,12 +213,20 @@ int sdk_init_meminfo(void) {
sdk_log_meminfo(iramf2, IRAMF2_START, IRAMF2_END);
sdk_log_meminfo(iram, _iram_start, _iram_end);
sdk_log_meminfo(iram_text, _iram_text_start, _iram_text_end);
#if defined(CONFIG_IDF_TARGET_ESP32S2)
/* No iram_bss on ESP32-C2 at this time. TODO: something equivalent? */
#else
sdk_log_meminfo(iram_bss, _iram_bss_start, _iram_bss_end);
#endif
#if defined(CONFIG_IDF_TARGET_ESP8266)
sdk_log_meminfo(init, _init_start, _init_end);
#endif
sdk_log_meminfo(text, _text_start, _text_end);
#if defined(CONFIG_IDF_TARGET_ESP32C2)
/* No rtc_data on ESP32-C2 at this time. TODO: something equivalent? */
#else
sdk_log_meminfo(rtc_data, _rtc_data_start, _rtc_data_end);
#endif
ESP_LOGI(TAG, "-----------------------------------------------------");
sample_heap_var = malloc(1);
if (sample_heap_var == NULL) {
Expand Down
7 changes: 5 additions & 2 deletions wolfcrypt/src/port/Espressif/esp_sdk_wifi_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@
#include <config.h>
#endif

/* Reminder: user_settings.h is needed and included from settings.h
* Be sure to define WOLFSSL_USER_SETTINGS, typically in CMakeLists.txt */
/* wolfSSL */
/* Always include wolfcrypt/settings.h before any other wolfSSL file. */
/* Be sure to define WOLFSSL_USER_SETTINGS, typically in CMakeLists.txt */
/* Reminder: settings.h pulls in user_settings.h */
/* Do not explicitly include user_settings.h here. */
#include <wolfssl/wolfcrypt/settings.h>

#if defined(WOLFSSL_ESPIDF) /* Entire file is only for Espressif EDP-IDF */
Expand Down
24 changes: 17 additions & 7 deletions wolfssl/wolfcrypt/port/Espressif/esp_crt_bundle.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@
#define __ESP_CRT_BUNDLE_wolfssl_LIB_H__

/* This file is typically NOT directly used by applications utilizing the
* wolfSSL libraries. It is used when the wolfssl libary component is configured
* to be utilized by the Espressif ESP-IDF, specifically the esp-tls layer.
* wolfSSL libraries. It is used when the wolfssl library component is
* configured to be utilized by the Espressif ESP-IDF, specifically the
* esp-tls layer.
*
* See:
* https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/protocols/esp_tls.html
Expand All @@ -54,7 +55,16 @@
* Normally on, this uses the compiler `inline` decorator for bundle functions
* to be optimized, since they are called during a TLS connection.
*
* See Kconfig file (or use idy.py menufconfig) for other bundle settings.
* See Kconfig file (or use idy.py menuconfig) for other bundle settings.
*
*******************************************************************************
** Other Settings:
*******************************************************************************
* WOLFSSL_CMAKE_REQUIRED_ESP_TLS
* This is defined in the wolfssl component cmake file when the esp-tls
* component is required. This is typically when Certificate Bundles are
* enabled, and the esp_tls_free_global_ca_store() in the esp-tls needs
* to be called from the wolfSSL wolfSSL_bundle_cleanup().
*/

/* wolfSSL */
Expand Down Expand Up @@ -122,14 +132,14 @@ esp_err_t esp_crt_bundle_attach(void *conf);

#else
/**
* @brief Return ESP_OK for valid bunder, otherwise ESP_FAIL.
* @brief Return ESP_OK for valid bundle, otherwise ESP_FAIL.
*
* Specific to wolfSSL. Not used by ESP-IDF esp-tls layer.
*/
esp_err_t esp_crt_bundle_is_valid(void);

/**
* @brief Return 1 if Cert Bundle loaded, otheriwse 0.
* @brief Return 1 if Cert Bundle loaded, otherwise 0.
*
* Specific to wolfSSL. Not used by ESP-IDF esp-tls layer.
*/
Expand Down Expand Up @@ -170,7 +180,7 @@ void esp_crt_bundle_detach(wolfssl_ssl_config *conf);
*
* @return
* - ESP_OK if adding certificates was successful.
* - Other if an error occured or an action must be taken
* - Other if an error occurred or an action must be taken
* by the calling process.
*/
esp_err_t esp_crt_bundle_set(const uint8_t *x509_bundle, size_t bundle_size);
Expand All @@ -180,7 +190,7 @@ esp_err_t esp_crt_bundle_set(const uint8_t *x509_bundle, size_t bundle_size);
* @brief Set the issuer and subject values given the current cert.
*
* Used internally by ESP-IDF esp-tls layer. Also helpful for debugging
* and general visibiity to certificate attributes.
* and general visibility to certificate attributes.
*
* The CERT_TAG can be used at the esp-tls or application layer to indicate
* the usage of the respective cert (e.g. the string "peer").
Expand Down

0 comments on commit 9e6d6b2

Please sign in to comment.