From 451ea047e848625af1a067bea9e80205bd65fbcd Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Sat, 29 Aug 2026 21:09:02 +0200 Subject: [PATCH] Fix esp32 build Signed-off-by: Pol Henarejos --- CMakeLists.txt | 104 ++++++++++++++--------- pico-keys-sdk | 2 +- src/openpgp/cmd_import_data.c | 2 +- src/openpgp/cmd_pso.c | 2 +- src/openpgp/openpgp.c | 2 +- src/openpgp/openpgp.h | 2 +- src/openpgp/openpgp_vault.c | 2 +- src/openpgp/{vault.h => openpgp_vault.h} | 0 src/openpgp/piv.c | 2 +- 9 files changed, 72 insertions(+), 46 deletions(-) rename src/openpgp/{vault.h => openpgp_vault.h} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f3d2c7..b4a44aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,21 @@ set(USB_VID 0x2E8A) set(USB_PID 0x10FF) if(ESP_PLATFORM) - set(EXTRA_COMPONENT_DIRS pico-keys-sdk/config/esp32/components src/openpgp) + if(NOT DEFINED ENABLE_PQC) + set(ENABLE_PQC 0) + endif() + set(EXTRA_COMPONENT_DIRS + src/openpgp + pico-keys-sdk/config/esp32/components/pico-keys-sdk + pico-keys-sdk/config/esp32/components/libcvc + ) + if(ENABLE_PQC) + list(APPEND EXTRA_COMPONENT_DIRS + pico-keys-sdk/config/esp32/components/mlkem512 + pico-keys-sdk/config/esp32/components/mlkem768 + pico-keys-sdk/config/esp32/components/mlkem1024 + ) + endif() include($ENV{IDF_PATH}/tools/cmake/project.cmake) else() if(NOT ENABLE_EMULATION) @@ -49,37 +63,38 @@ endif() set(USB_ITF_CCID 1) set(USB_ITF_WCID 1) +set(ENABLE_LIBCVC 1) include(pico-keys-sdk/picokeys_sdk_import.cmake) if(NOT ESP_PLATFORM) set(SOURCES ${PICOKEYS_SOURCES}) endif() -set(SOURCES ${SOURCES} - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/openpgp.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/object_provider.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/key_container.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/openpgp_vault.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/files.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/piv.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/management.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_select.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_get_data.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_verify.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_put_data.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_select_data.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_import_data.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_version.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_change_pin.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_mse.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_internal_aut.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_challenge.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_activate_file.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_terminate_df.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_pso.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_keypair_gen.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_reset_retry.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/do.c - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/defs.c +list(APPEND SOURCES + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/openpgp.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/object_provider.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/key_container.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/openpgp_vault.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/files.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/piv.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/management.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_select.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_get_data.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_verify.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_put_data.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_select_data.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_import_data.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_version.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_change_pin.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_mse.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_internal_aut.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_challenge.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_activate_file.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_terminate_df.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_pso.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_keypair_gen.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/cmd_reset_retry.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/do.c + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp/defs.c ) SET_VERSION(ver_major ver_minor "${CMAKE_CURRENT_LIST_DIR}/src/openpgp/version.h") @@ -89,7 +104,7 @@ if(ESP_PLATFORM) endif() set(INCLUDES ${INCLUDES} - ${CMAKE_CURRENT_LIST_DIR}/src/openpgp + ${CMAKE_CURRENT_LIST_DIR}/src/openpgp ) if(NOT ESP_PLATFORM) target_sources(pico_openpgp PUBLIC ${SOURCES}) @@ -123,28 +138,39 @@ if(NOT ESP_PLATFORM) if(ENABLE_EMULATION) enable_testing() if(NOT MSVC) - target_compile_options(pico_openpgp PUBLIC + set(EMULATION_NON_MSVC_COMPILE_OPTIONS -fdata-sections -ffunction-sections ) + target_compile_options(pico_openpgp PRIVATE ${EMULATION_NON_MSVC_COMPILE_OPTIONS}) endif() if(APPLE) - target_link_options(pico_openpgp PUBLIC + set(EMULATION_APPLE_LINK_OPTIONS -Wl,-dead_strip ) - elseif(MSVC) - target_compile_options(pico_openpgp PUBLIC - -WX - ) + target_link_options(pico_openpgp PRIVATE ${EMULATION_APPLE_LINK_OPTIONS}) - target_link_libraries(pico_openpgp PUBLIC wsock32 ws2_32 Bcrypt) - else() - target_link_options(pico_openpgp PUBLIC + if(DEBUG_APDU) + set(DEBUG_APDU_SANITIZER_OPTIONS + -fsanitize=address + -g + -O1 + -fno-omit-frame-pointer + ) + target_compile_options(pico_openpgp PRIVATE ${DEBUG_APDU_SANITIZER_OPTIONS}) + target_link_options(pico_openpgp PRIVATE ${DEBUG_APDU_SANITIZER_OPTIONS}) + endif() + elseif(NOT MSVC) + set(EMULATION_NON_APPLE_LINK_OPTIONS -Wl,--gc-sections ) - endif(APPLE) - target_link_libraries(pico_openpgp PRIVATE picokeys_sdk mbedtls pthread m) + target_link_options(pico_openpgp PRIVATE ${EMULATION_NON_APPLE_LINK_OPTIONS}) + endif() + target_link_libraries(pico_openpgp PRIVATE picokeys_sdk mbedtls) + if(NOT MSVC) + target_link_libraries(pico_openpgp PRIVATE pthread m) + endif() add_executable(openpgp_key_container_test ${CMAKE_CURRENT_LIST_DIR}/pico-keys-sdk/src/fs/object_container.c ${CMAKE_CURRENT_LIST_DIR}/pico-keys-sdk/src/fs/object_container_store.c diff --git a/pico-keys-sdk b/pico-keys-sdk index 8e437f7..b35df81 160000 --- a/pico-keys-sdk +++ b/pico-keys-sdk @@ -1 +1 @@ -Subproject commit 8e437f7ca6bc3dfdfd5515dd266bf04979fbfabb +Subproject commit b35df81a03ed4248680bc5f2099d4fd97e71baf8 diff --git a/src/openpgp/cmd_import_data.c b/src/openpgp/cmd_import_data.c index e21bd44..71a7d22 100644 --- a/src/openpgp/cmd_import_data.c +++ b/src/openpgp/cmd_import_data.c @@ -16,7 +16,7 @@ */ #ifdef ESP_PLATFORM -#include "esp_compat.h" +#include "compat/esp_compat.h" #define MBEDTLS_ALLOW_PRIVATE_ACCESS #endif #include "openpgp.h" diff --git a/src/openpgp/cmd_pso.c b/src/openpgp/cmd_pso.c index 1d9dfce..8adfba3 100644 --- a/src/openpgp/cmd_pso.c +++ b/src/openpgp/cmd_pso.c @@ -16,7 +16,7 @@ */ #ifdef ESP_PLATFORM -#include "esp_compat.h" +#include "compat/esp_compat.h" #define MBEDTLS_ALLOW_PRIVATE_ACCESS #endif #include "openpgp.h" diff --git a/src/openpgp/openpgp.c b/src/openpgp/openpgp.c index 9894046..6eeaeab 100644 --- a/src/openpgp/openpgp.c +++ b/src/openpgp/openpgp.c @@ -17,7 +17,7 @@ #include #ifdef ESP_PLATFORM -#include "esp_compat.h" +#include "compat/esp_compat.h" #define MBEDTLS_ALLOW_PRIVATE_ACCESS #endif #include "openpgp.h" diff --git a/src/openpgp/openpgp.h b/src/openpgp/openpgp.h index ec8010e..e412e0a 100644 --- a/src/openpgp/openpgp.h +++ b/src/openpgp/openpgp.h @@ -29,7 +29,7 @@ #include "mbedtls/ecdsa.h" #include "crypto_utils.h" #include "files.h" -#include "vault.h" +#include "openpgp_vault.h" extern bool has_pw1; extern bool has_pw2; diff --git a/src/openpgp/openpgp_vault.c b/src/openpgp/openpgp_vault.c index 5ac085f..5f68ebd 100644 --- a/src/openpgp/openpgp_vault.c +++ b/src/openpgp/openpgp_vault.c @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -#include "vault.h" +#include "openpgp_vault.h" #include diff --git a/src/openpgp/vault.h b/src/openpgp/openpgp_vault.h similarity index 100% rename from src/openpgp/vault.h rename to src/openpgp/openpgp_vault.h diff --git a/src/openpgp/piv.c b/src/openpgp/piv.c index 1082171..0357cfc 100644 --- a/src/openpgp/piv.c +++ b/src/openpgp/piv.c @@ -17,7 +17,7 @@ #include #ifdef ESP_PLATFORM -#include "esp_compat.h" +#include "compat/esp_compat.h" #define MBEDTLS_ALLOW_PRIVATE_ACCESS #endif #include "files.h"