mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
feat(mbedtls): support rom mbedtls threading layer
This commit is contained in:
parent
d0ec6fc04d
commit
5bb93061a3
@ -12,6 +12,10 @@ endif()
|
|||||||
set(mbedtls_srcs "")
|
set(mbedtls_srcs "")
|
||||||
set(mbedtls_include_dirs "port/include" "mbedtls/include" "mbedtls/library")
|
set(mbedtls_include_dirs "port/include" "mbedtls/include" "mbedtls/library")
|
||||||
|
|
||||||
|
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
|
||||||
|
list(APPEND mbedtls_include_dirs "port/mbedtls_rom")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE)
|
if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE)
|
||||||
list(APPEND mbedtls_srcs "esp_crt_bundle/esp_crt_bundle.c")
|
list(APPEND mbedtls_srcs "esp_crt_bundle/esp_crt_bundle.c")
|
||||||
list(APPEND mbedtls_include_dirs "esp_crt_bundle/include")
|
list(APPEND mbedtls_include_dirs "esp_crt_bundle/include")
|
||||||
@ -94,6 +98,11 @@ set(Python3_EXECUTABLE ${python})
|
|||||||
# Needed to for include_next includes to work from within mbedtls
|
# Needed to for include_next includes to work from within mbedtls
|
||||||
include_directories("${COMPONENT_DIR}/port/include")
|
include_directories("${COMPONENT_DIR}/port/include")
|
||||||
|
|
||||||
|
# Needed to for mbedtls_rom includes to work from within mbedtls
|
||||||
|
if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL)
|
||||||
|
include_directories("${COMPONENT_DIR}/port/mbedtls_rom")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Import mbedtls library targets
|
# Import mbedtls library targets
|
||||||
add_subdirectory(mbedtls)
|
add_subdirectory(mbedtls)
|
||||||
|
|
||||||
|
@ -1147,6 +1147,7 @@ menu "mbedTLS"
|
|||||||
select MBEDTLS_ROM_MD5
|
select MBEDTLS_ROM_MD5
|
||||||
select MBEDTLS_HARDWARE_SHA
|
select MBEDTLS_HARDWARE_SHA
|
||||||
select MBEDTLS_ECP_RESTARTABLE
|
select MBEDTLS_ECP_RESTARTABLE
|
||||||
|
select MBEDTLS_THREADING_C
|
||||||
help
|
help
|
||||||
Enable this flag to use mbedtls crypto algorithm from ROM instead of ESP-IDF.
|
Enable this flag to use mbedtls crypto algorithm from ROM instead of ESP-IDF.
|
||||||
|
|
||||||
|
@ -19,9 +19,13 @@ void mbedtls_rom_osi_functions_init(void);
|
|||||||
|
|
||||||
static void mbedtls_rom_mutex_init( mbedtls_threading_mutex_t *mutex )
|
static void mbedtls_rom_mutex_init( mbedtls_threading_mutex_t *mutex )
|
||||||
{
|
{
|
||||||
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
if (mutex == NULL) {
|
||||||
((void) mutex);
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_THREADING_ALT)
|
||||||
|
mutex->mutex = xSemaphoreCreateMutex();
|
||||||
|
assert(mutex->mutex != NULL);
|
||||||
#else
|
#else
|
||||||
mbedtls_mutex_init(mutex);
|
mbedtls_mutex_init(mutex);
|
||||||
#endif
|
#endif
|
||||||
@ -29,9 +33,12 @@ static void mbedtls_rom_mutex_init( mbedtls_threading_mutex_t *mutex )
|
|||||||
|
|
||||||
static void mbedtls_rom_mutex_free( mbedtls_threading_mutex_t *mutex )
|
static void mbedtls_rom_mutex_free( mbedtls_threading_mutex_t *mutex )
|
||||||
{
|
{
|
||||||
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
if (mutex == NULL) {
|
||||||
((void) mutex);
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_THREADING_ALT)
|
||||||
|
vSemaphoreDelete(mutex->mutex);
|
||||||
#else
|
#else
|
||||||
mbedtls_mutex_free(mutex);
|
mbedtls_mutex_free(mutex);
|
||||||
#endif
|
#endif
|
||||||
@ -39,8 +46,14 @@ static void mbedtls_rom_mutex_free( mbedtls_threading_mutex_t *mutex )
|
|||||||
|
|
||||||
static int mbedtls_rom_mutex_lock( mbedtls_threading_mutex_t *mutex )
|
static int mbedtls_rom_mutex_lock( mbedtls_threading_mutex_t *mutex )
|
||||||
{
|
{
|
||||||
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
if (mutex == NULL) {
|
||||||
((void) mutex);
|
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_THREADING_ALT)
|
||||||
|
if (xSemaphoreTake(mutex->mutex, portMAX_DELAY) != pdTRUE) {
|
||||||
|
return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
return mbedtls_mutex_lock(mutex);
|
return mbedtls_mutex_lock(mutex);
|
||||||
@ -49,8 +62,14 @@ static int mbedtls_rom_mutex_lock( mbedtls_threading_mutex_t *mutex )
|
|||||||
|
|
||||||
static int mbedtls_rom_mutex_unlock( mbedtls_threading_mutex_t *mutex )
|
static int mbedtls_rom_mutex_unlock( mbedtls_threading_mutex_t *mutex )
|
||||||
{
|
{
|
||||||
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
if (mutex == NULL) {
|
||||||
((void) mutex);
|
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_THREADING_ALT)
|
||||||
|
if (xSemaphoreGive(mutex->mutex) != pdTRUE) {
|
||||||
|
return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
return mbedtls_mutex_unlock(mutex);
|
return mbedtls_mutex_unlock(mutex);
|
||||||
@ -430,11 +449,15 @@ __attribute__((constructor)) void mbedtls_rom_osi_functions_init(void)
|
|||||||
/* Export the rom mbedtls functions table pointer */
|
/* Export the rom mbedtls functions table pointer */
|
||||||
extern void *mbedtls_rom_osi_funcs_ptr;
|
extern void *mbedtls_rom_osi_funcs_ptr;
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_THREADING_ALT)
|
||||||
|
mbedtls_threading_set_alt(mbedtls_rom_mutex_init, mbedtls_rom_mutex_free, mbedtls_rom_mutex_lock, mbedtls_rom_mutex_unlock);
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned chip_version = efuse_hal_chip_revision();
|
unsigned chip_version = efuse_hal_chip_revision();
|
||||||
if ( ESP_CHIP_REV_ABOVE(chip_version, 200) ) {
|
if ( ESP_CHIP_REV_ABOVE(chip_version, 200) ) {
|
||||||
/* Initialize the rom function mbedtls_threading_set_alt on chip rev2.0 with rom eco4 */
|
/* Initialize the rom function mbedtls_threading_set_alt on chip rev2.0 with rom eco4 */
|
||||||
mbedtls_threading_set_alt_t mbedtls_threading_set_alt = (mbedtls_threading_set_alt_t)0x40002c0c;
|
_rom_mbedtls_threading_set_alt_t rom_mbedtls_threading_set_alt = (_rom_mbedtls_threading_set_alt_t)0x40002c0c;
|
||||||
mbedtls_threading_set_alt(mbedtls_rom_mutex_init, mbedtls_rom_mutex_free, mbedtls_rom_mutex_lock, mbedtls_rom_mutex_unlock);
|
rom_mbedtls_threading_set_alt(mbedtls_rom_mutex_init, mbedtls_rom_mutex_free, mbedtls_rom_mutex_lock, mbedtls_rom_mutex_unlock);
|
||||||
|
|
||||||
/* Initialize the pointer of rom eco4 mbedtls functions table. */
|
/* Initialize the pointer of rom eco4 mbedtls functions table. */
|
||||||
mbedtls_rom_osi_funcs_ptr = (mbedtls_rom_eco4_funcs_t *)&mbedtls_rom_eco4_funcs_table;
|
mbedtls_rom_osi_funcs_ptr = (mbedtls_rom_eco4_funcs_t *)&mbedtls_rom_eco4_funcs_table;
|
||||||
|
@ -44,12 +44,10 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
#if (!defined(CONFIG_MBEDTLS_THREADING_C))
|
||||||
typedef struct mbedtls_threading_mutex_t {
|
#error CONFIG_MBEDTLS_THREADING_C
|
||||||
int dummy;
|
|
||||||
} mbedtls_threading_mutex_t;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*mbedtls_threading_set_alt_t)(void (*mutex_init)(mbedtls_threading_mutex_t *),
|
typedef void (*_rom_mbedtls_threading_set_alt_t)(void (*mutex_init)(mbedtls_threading_mutex_t *),
|
||||||
void (*mutex_free)(mbedtls_threading_mutex_t *),
|
void (*mutex_free)(mbedtls_threading_mutex_t *),
|
||||||
int (*mutex_lock)(mbedtls_threading_mutex_t *),
|
int (*mutex_lock)(mbedtls_threading_mutex_t *),
|
||||||
int (*mutex_unlock)(mbedtls_threading_mutex_t *));
|
int (*mutex_unlock)(mbedtls_threading_mutex_t *));
|
||||||
|
22
components/mbedtls/port/mbedtls_rom/threading_alt.h
Normal file
22
components/mbedtls/port/mbedtls_rom/threading_alt.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/semphr.h"
|
||||||
|
|
||||||
|
typedef struct mbedtls_threading_mutex_t {
|
||||||
|
SemaphoreHandle_t mutex;
|
||||||
|
/* is_valid is 0 after a failed init or a free, and nonzero after a
|
||||||
|
* successful init. This field is not considered part of the public
|
||||||
|
* API of Mbed TLS and may change without notice. */
|
||||||
|
char is_valid;
|
||||||
|
} mbedtls_threading_mutex_t;
|
||||||
|
|
||||||
|
extern void mbedtls_threading_set_alt(void (*mutex_init)(mbedtls_threading_mutex_t *),
|
||||||
|
void (*mutex_free)(mbedtls_threading_mutex_t *),
|
||||||
|
int (*mutex_lock)(mbedtls_threading_mutex_t *),
|
||||||
|
int (*mutex_unlock)(mbedtls_threading_mutex_t *));
|
Loading…
Reference in New Issue
Block a user