diff --git a/TactilityC/CMakeLists.txt b/TactilityC/CMakeLists.txt index 468bd52d..3acd8d12 100644 --- a/TactilityC/CMakeLists.txt +++ b/TactilityC/CMakeLists.txt @@ -10,6 +10,7 @@ list(APPEND PRIV_REQUIRES_LIST Tactility TactilityCore TactilityKernel + mbedtls ) if (DEFINED ENV{ESP_IDF_VERSION}) diff --git a/TactilityC/Private/symbols/mbedtls.h b/TactilityC/Private/symbols/mbedtls.h new file mode 100644 index 00000000..768c00d6 --- /dev/null +++ b/TactilityC/Private/symbols/mbedtls.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +extern const esp_elfsym mbedtls_symbols[]; diff --git a/TactilityC/Source/symbols/gcc_soft_float.cpp b/TactilityC/Source/symbols/gcc_soft_float.cpp index a3c259ad..7700db74 100644 --- a/TactilityC/Source/symbols/gcc_soft_float.cpp +++ b/TactilityC/Source/symbols/gcc_soft_float.cpp @@ -64,8 +64,8 @@ extern long __fixdfdi(double a); // extern long long __fixtfti(long double a); // extern long long __fixxfti(long double a); -// extern unsigned int __fixunssfsi(float a); -// extern unsigned int __fixunsdfsi(double a); +extern unsigned int __fixunssfsi(float a); +extern unsigned int __fixunsdfsi(double a); // extern unsigned int __fixunstfsi(long double a); // extern unsigned int __fixunsxfsi(long double a); @@ -79,8 +79,8 @@ extern unsigned long __fixunsdfdi(double a); // extern unsigned long long __fixunstfti(long double a); // extern unsigned long long __fixunsxfti(long double a); -// extern float __floatsisf(int i); -// extern double __floatsidf(int i); +extern float __floatsisf(int i); +extern double __floatsidf(int i); // extern long double __floatsitf(int i); // extern long double __floatsixf(int i); @@ -146,6 +146,12 @@ int __gtsf2(float a, float b); int __gtdf2(double a, double b); // int __gttf2(long double a, long double b); +// GCC integer arithmetic helpers (needed on 32-bit targets for 64-bit ops) +long long __divdi3(long long a, long long b); +long long __moddi3(long long a, long long b); +unsigned long long __udivdi3(unsigned long long a, unsigned long long b); +unsigned long long __umoddi3(unsigned long long a, unsigned long long b); + } // extern "C" const esp_elfsym gcc_soft_float_symbols[] = { @@ -201,8 +207,8 @@ const esp_elfsym gcc_soft_float_symbols[] = { // ESP_ELFSYM_EXPORT(__fixtfti), // ESP_ELFSYM_EXPORT(__fixxfti), - // ESP_ELFSYM_EXPORT(__fixunssfsi), - // ESP_ELFSYM_EXPORT(__fixunsdfsi), + ESP_ELFSYM_EXPORT(__fixunssfsi), + ESP_ELFSYM_EXPORT(__fixunsdfsi), // ESP_ELFSYM_EXPORT(__fixunstfsi), // ESP_ELFSYM_EXPORT(__fixunsxfsi), @@ -216,8 +222,8 @@ const esp_elfsym gcc_soft_float_symbols[] = { // ESP_ELFSYM_EXPORT(__fixunstfti), // ESP_ELFSYM_EXPORT(__fixunsxfti), - // ESP_ELFSYM_EXPORT(__floatsisf), - // ESP_ELFSYM_EXPORT(__floatsidf), + ESP_ELFSYM_EXPORT(__floatsisf), + ESP_ELFSYM_EXPORT(__floatsidf), // ESP_ELFSYM_EXPORT(__floatsitf), // ESP_ELFSYM_EXPORT(__floatsixf), @@ -283,6 +289,12 @@ const esp_elfsym gcc_soft_float_symbols[] = { ESP_ELFSYM_EXPORT(__gtdf2), // ESP_ELFSYM_EXPORT(__gttf2), + // GCC integer arithmetic helpers + ESP_ELFSYM_EXPORT(__divdi3), + ESP_ELFSYM_EXPORT(__moddi3), + ESP_ELFSYM_EXPORT(__udivdi3), + ESP_ELFSYM_EXPORT(__umoddi3), + ESP_ELFSYM_END }; diff --git a/TactilityC/Source/symbols/mbedtls.cpp b/TactilityC/Source/symbols/mbedtls.cpp new file mode 100644 index 00000000..adf4871d --- /dev/null +++ b/TactilityC/Source/symbols/mbedtls.cpp @@ -0,0 +1,100 @@ +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const esp_elfsym mbedtls_symbols[] = { + // CTR_DRBG (random number generation) + ESP_ELFSYM_EXPORT(mbedtls_ctr_drbg_init), + ESP_ELFSYM_EXPORT(mbedtls_ctr_drbg_free), + ESP_ELFSYM_EXPORT(mbedtls_ctr_drbg_seed), + ESP_ELFSYM_EXPORT(mbedtls_ctr_drbg_random), + // Entropy + ESP_ELFSYM_EXPORT(mbedtls_entropy_init), + ESP_ELFSYM_EXPORT(mbedtls_entropy_free), + ESP_ELFSYM_EXPORT(mbedtls_entropy_func), + // Cipher + ESP_ELFSYM_EXPORT(mbedtls_cipher_init), + ESP_ELFSYM_EXPORT(mbedtls_cipher_free), + ESP_ELFSYM_EXPORT(mbedtls_cipher_setup), + ESP_ELFSYM_EXPORT(mbedtls_cipher_setkey), + ESP_ELFSYM_EXPORT(mbedtls_cipher_set_iv), + ESP_ELFSYM_EXPORT(mbedtls_cipher_reset), + ESP_ELFSYM_EXPORT(mbedtls_cipher_update), + ESP_ELFSYM_EXPORT(mbedtls_cipher_finish), + ESP_ELFSYM_EXPORT(mbedtls_cipher_get_block_size), + ESP_ELFSYM_EXPORT(mbedtls_cipher_info_from_type), + // Message digest / HMAC + ESP_ELFSYM_EXPORT(mbedtls_md), + ESP_ELFSYM_EXPORT(mbedtls_md_init), + ESP_ELFSYM_EXPORT(mbedtls_md_free), + ESP_ELFSYM_EXPORT(mbedtls_md_setup), + ESP_ELFSYM_EXPORT(mbedtls_md_starts), + ESP_ELFSYM_EXPORT(mbedtls_md_update), + ESP_ELFSYM_EXPORT(mbedtls_md_finish), + ESP_ELFSYM_EXPORT(mbedtls_md_hmac_starts), + ESP_ELFSYM_EXPORT(mbedtls_md_hmac_update), + ESP_ELFSYM_EXPORT(mbedtls_md_hmac_finish), + ESP_ELFSYM_EXPORT(mbedtls_md_info_from_type), + // Bignum (MPI) + ESP_ELFSYM_EXPORT(mbedtls_mpi_init), + ESP_ELFSYM_EXPORT(mbedtls_mpi_free), + ESP_ELFSYM_EXPORT(mbedtls_mpi_read_binary), + ESP_ELFSYM_EXPORT(mbedtls_mpi_write_binary), + ESP_ELFSYM_EXPORT(mbedtls_mpi_size), + ESP_ELFSYM_EXPORT(mbedtls_mpi_bitlen), + ESP_ELFSYM_EXPORT(mbedtls_mpi_lset), + ESP_ELFSYM_EXPORT(mbedtls_mpi_set_bit), + ESP_ELFSYM_EXPORT(mbedtls_mpi_fill_random), + ESP_ELFSYM_EXPORT(mbedtls_mpi_exp_mod), + // RSA + ESP_ELFSYM_EXPORT(mbedtls_rsa_init), + ESP_ELFSYM_EXPORT(mbedtls_rsa_free), + ESP_ELFSYM_EXPORT(mbedtls_rsa_copy), + ESP_ELFSYM_EXPORT(mbedtls_rsa_get_len), + ESP_ELFSYM_EXPORT(mbedtls_rsa_check_pubkey), + ESP_ELFSYM_EXPORT(mbedtls_rsa_check_privkey), + ESP_ELFSYM_EXPORT(mbedtls_rsa_pkcs1_sign), + ESP_ELFSYM_EXPORT(mbedtls_rsa_pkcs1_verify), + // Public key abstraction + ESP_ELFSYM_EXPORT(mbedtls_pk_init), + ESP_ELFSYM_EXPORT(mbedtls_pk_free), + ESP_ELFSYM_EXPORT(mbedtls_pk_get_type), + ESP_ELFSYM_EXPORT(mbedtls_pk_parse_key), + ESP_ELFSYM_EXPORT(mbedtls_pk_parse_keyfile), + // ECP (elliptic curves) + ESP_ELFSYM_EXPORT(mbedtls_ecp_group_load), + ESP_ELFSYM_EXPORT(mbedtls_ecp_point_init), + ESP_ELFSYM_EXPORT(mbedtls_ecp_point_free), + ESP_ELFSYM_EXPORT(mbedtls_ecp_point_read_binary), + ESP_ELFSYM_EXPORT(mbedtls_ecp_point_write_binary), + ESP_ELFSYM_EXPORT(mbedtls_ecp_check_pubkey), + ESP_ELFSYM_EXPORT(mbedtls_ecp_check_privkey), + ESP_ELFSYM_EXPORT(mbedtls_ecp_mul), + // ECDSA + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_init), + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_free), + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_genkey), + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_from_keypair), + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_sign), + ESP_ELFSYM_EXPORT(mbedtls_ecdsa_verify), + // ECDH + ESP_ELFSYM_EXPORT(mbedtls_ecdh_compute_shared), + // Error strings + ESP_ELFSYM_EXPORT(mbedtls_strerror), + // delimiter + ESP_ELFSYM_END +}; diff --git a/TactilityC/Source/tt_init.cpp b/TactilityC/Source/tt_init.cpp index fe9c16d9..f64fda8e 100644 --- a/TactilityC/Source/tt_init.cpp +++ b/TactilityC/Source/tt_init.cpp @@ -23,6 +23,7 @@ #include "symbols/esp_http_client.h" #include "symbols/freertos.h" #include "symbols/gcc_soft_float.h" +#include "symbols/mbedtls.h" #include "symbols/pthread.h" #include "symbols/stl.h" #include "symbols/string.h" @@ -40,8 +41,12 @@ #include #include #include +#include +#include +#include #include #include +#include #include #include #include @@ -80,10 +85,13 @@ const esp_elfsym main_symbols[] { ESP_ELFSYM_EXPORT(close), ESP_ELFSYM_EXPORT(rmdir), ESP_ELFSYM_EXPORT(unlink), + // strings.h + ESP_ELFSYM_EXPORT(explicit_bzero), // time.h ESP_ELFSYM_EXPORT(clock_gettime), ESP_ELFSYM_EXPORT(strftime), ESP_ELFSYM_EXPORT(time), + ESP_ELFSYM_EXPORT(difftime), ESP_ELFSYM_EXPORT(localtime_r), ESP_ELFSYM_EXPORT(localtime), // esp_sntp.h @@ -364,6 +372,12 @@ const esp_elfsym main_symbols[] { ESP_ELFSYM_EXPORT(lwip_accept), ESP_ELFSYM_EXPORT(lwip_getsockname), ESP_ELFSYM_EXPORT(lwip_send), + ESP_ELFSYM_EXPORT(lwip_connect), + ESP_ELFSYM_EXPORT(lwip_select), + ESP_ELFSYM_EXPORT(lwip_gethostbyname), + ESP_ELFSYM_EXPORT(ipaddr_addr), + // POSIX socket names (VFS wrappers used when apps include ) + ESP_ELFSYM_EXPORT(select), // sys/stat.h ESP_ELFSYM_EXPORT(stat), ESP_ELFSYM_EXPORT(mkdir), @@ -418,6 +432,7 @@ uintptr_t tt_symbol_resolver(const char* symbolName) { string_symbols, esp_event_symbols, esp_http_client_symbols, + mbedtls_symbols, }; for (const auto* symbols : all_symbols) {