From 68600291d0a85cbf695d798a330ebe78fb163a4d Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Mon, 12 Jan 2026 09:18:34 +0100 Subject: [PATCH] Reorganize tree for ESP32 Signed-off-by: Pol Henarejos --- .../esp32/components/mlkem1024/CMakeLists.txt | 23 ++++ .../esp32/components/mlkem512/CMakeLists.txt | 23 ++++ .../esp32/components/mlkem768/CMakeLists.txt | 23 ++++ .../components/pico-keys-sdk/CMakeLists.txt | 7 ++ .../pico-keys-sdk}/idf_component.yml | 0 .../esp32/components/tinycbor/CMakeLists.txt | 6 + config/mlkem/mlkem_native_all.h | 27 ++++ config/mlkem/mlkem_native_config.h | 13 ++ pico_keys_sdk_import.cmake | 118 ++++++++++++++---- src/CMakeLists.txt | 6 - src/pico_keys.h | 2 + 11 files changed, 221 insertions(+), 27 deletions(-) create mode 100644 config/esp32/components/mlkem1024/CMakeLists.txt create mode 100644 config/esp32/components/mlkem512/CMakeLists.txt create mode 100644 config/esp32/components/mlkem768/CMakeLists.txt create mode 100755 config/esp32/components/pico-keys-sdk/CMakeLists.txt rename {src => config/esp32/components/pico-keys-sdk}/idf_component.yml (100%) create mode 100755 config/esp32/components/tinycbor/CMakeLists.txt create mode 100644 config/mlkem/mlkem_native_all.h create mode 100644 config/mlkem/mlkem_native_config.h delete mode 100755 src/CMakeLists.txt diff --git a/config/esp32/components/mlkem1024/CMakeLists.txt b/config/esp32/components/mlkem1024/CMakeLists.txt new file mode 100644 index 0000000..22033d4 --- /dev/null +++ b/config/esp32/components/mlkem1024/CMakeLists.txt @@ -0,0 +1,23 @@ +set(MLKEM_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../mlkem/mlkem) + +file(GLOB_RECURSE MLKEM_SOURCES + ${MLKEM_DIR}/src/*.c +) +list(FILTER MLKEM_SOURCES EXCLUDE REGEX "/native/") + +idf_component_register( + SRCS ${MLKEM_SOURCES} + INCLUDE_DIRS ${MLKEM_DIR} +) + +target_compile_definitions(${COMPONENT_LIB} PRIVATE + MLK_CONFIG_PARAMETER_SET=1024 + MLK_CONFIG_MULTILEVEL_NO_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem +) + +target_compile_options(${COMPONENT_LIB} PRIVATE + -O2 + -fno-builtin + -fno-strict-aliasing +) diff --git a/config/esp32/components/mlkem512/CMakeLists.txt b/config/esp32/components/mlkem512/CMakeLists.txt new file mode 100644 index 0000000..65357c5 --- /dev/null +++ b/config/esp32/components/mlkem512/CMakeLists.txt @@ -0,0 +1,23 @@ +set(MLKEM_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../mlkem/mlkem) + +file(GLOB_RECURSE MLKEM_SOURCES + ${MLKEM_DIR}/src/*.c +) +list(FILTER MLKEM_SOURCES EXCLUDE REGEX "/native/") + +idf_component_register( + SRCS ${MLKEM_SOURCES} + INCLUDE_DIRS ${MLKEM_DIR} +) + +target_compile_definitions(${COMPONENT_LIB} PRIVATE + MLK_CONFIG_PARAMETER_SET=512 + MLK_CONFIG_MULTILEVEL_WITH_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem +) + +target_compile_options(${COMPONENT_LIB} PRIVATE + -O2 + -fno-builtin + -fno-strict-aliasing +) diff --git a/config/esp32/components/mlkem768/CMakeLists.txt b/config/esp32/components/mlkem768/CMakeLists.txt new file mode 100644 index 0000000..0085303 --- /dev/null +++ b/config/esp32/components/mlkem768/CMakeLists.txt @@ -0,0 +1,23 @@ +set(MLKEM_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../mlkem/mlkem) + +file(GLOB_RECURSE MLKEM_SOURCES + ${MLKEM_DIR}/src/*.c +) +list(FILTER MLKEM_SOURCES EXCLUDE REGEX "/native/") + +idf_component_register( + SRCS ${MLKEM_SOURCES} + INCLUDE_DIRS ${MLKEM_DIR} +) + +target_compile_definitions(${COMPONENT_LIB} PRIVATE + MLK_CONFIG_PARAMETER_SET=768 + MLK_CONFIG_MULTILEVEL_NO_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem +) + +target_compile_options(${COMPONENT_LIB} PRIVATE + -O2 + -fno-builtin + -fno-strict-aliasing +) diff --git a/config/esp32/components/pico-keys-sdk/CMakeLists.txt b/config/esp32/components/pico-keys-sdk/CMakeLists.txt new file mode 100755 index 0000000..653fd87 --- /dev/null +++ b/config/esp32/components/pico-keys-sdk/CMakeLists.txt @@ -0,0 +1,7 @@ +set(PICO_KEYS_SDK_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../..) +idf_component_register( + SRCS ${PICO_KEYS_SOURCES} + INCLUDE_DIRS ${PICO_KEYS_SDK_DIR}/src ${PICO_KEYS_SDK_DIR}/src/fs ${PICO_KEYS_SDK_DIR}/src/rng ${PICO_KEYS_SDK_DIR}/src/usb ${PICO_KEYS_SDK_DIR}/src/led ${PICO_KEYS_SDK_DIR}/tinycbor/src ${PICO_KEYS_SDK_DIR}/mlkem/mlkem ${PICO_KEYS_SDK_DIR}/config/mlkem + REQUIRES bootloader_support esp_partition esp_tinyusb efuse mbedtls mlkem512 mlkem768 mlkem1024 tinycbor +) +idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) diff --git a/src/idf_component.yml b/config/esp32/components/pico-keys-sdk/idf_component.yml similarity index 100% rename from src/idf_component.yml rename to config/esp32/components/pico-keys-sdk/idf_component.yml diff --git a/config/esp32/components/tinycbor/CMakeLists.txt b/config/esp32/components/tinycbor/CMakeLists.txt new file mode 100755 index 0000000..76ecf22 --- /dev/null +++ b/config/esp32/components/tinycbor/CMakeLists.txt @@ -0,0 +1,6 @@ +set(PICO_KEYS_SDK_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../..) +idf_component_register( + SRCS ${CBOR_SOURCES} + INCLUDE_DIRS ${PICO_KEYS_SDK_DIR}/tinycbor/src +) +idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) diff --git a/config/mlkem/mlkem_native_all.h b/config/mlkem/mlkem_native_all.h new file mode 100644 index 0000000..5fb5ba5 --- /dev/null +++ b/config/mlkem/mlkem_native_all.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) The mlkem-native project authors + * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + */ + +#if !defined(MLK_ALL_H) +#define MLK_ALL_H + +/* API for MLKEM-512 */ +#define MLK_CONFIG_PARAMETER_SET 512 +#include "mlkem_native.h" +#undef MLK_CONFIG_PARAMETER_SET +#undef MLK_H + +/* API for MLKEM-768 */ +#define MLK_CONFIG_PARAMETER_SET 768 +#include "mlkem_native.h" +#undef MLK_CONFIG_PARAMETER_SET +#undef MLK_H + +/* API for MLKEM-1024 */ +#define MLK_CONFIG_PARAMETER_SET 1024 +#include "mlkem_native.h" +#undef MLK_CONFIG_PARAMETER_SET +#undef MLK_H + +#endif /* !MLK_ALL_H */ diff --git a/config/mlkem/mlkem_native_config.h b/config/mlkem/mlkem_native_config.h new file mode 100644 index 0000000..b75c37a --- /dev/null +++ b/config/mlkem/mlkem_native_config.h @@ -0,0 +1,13 @@ +#pragma once + +/* Disable all native/asm backends */ +#define MLK_NO_NATIVE_BACKENDS 1 + +/* No CBMC */ +#undef CBMC + +/* Platform characteristics */ +#define MLK_LITTLE_ENDIAN 1 + +/* Memory model */ +#define MLK_NO_MALLOC 1 diff --git a/pico_keys_sdk_import.cmake b/pico_keys_sdk_import.cmake index 346febf..8db0699 100644 --- a/pico_keys_sdk_import.cmake +++ b/pico_keys_sdk_import.cmake @@ -213,6 +213,14 @@ if(NOT ESP_PLATFORM) endif() endif(NOT ESP_PLATFORM) +option(ENABLE_PQC "Enable/disable PQC support" OFF) +if(ENABLE_PQC) + message(STATUS "PQC support:\t\t\t enabled") + add_definitions(-DENABLE_PQC) +else() + message(STATUS "PQC support:\t\t\t disabled") +endif(ENABLE_PQC) + set(MBEDTLS_SOURCES ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/aes.c ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/asn1parse.c @@ -260,6 +268,54 @@ if (ENABLE_EDDSA) ) endif() +if(ENABLE_PQC) +if (NOT ESP_PLATFORM) + file(GLOB_RECURSE MLKEM_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/mlkem/mlkem/src/*.c + ) + list(FILTER MLKEM_SOURCES EXCLUDE REGEX "/native/") + + add_library(mlkem512 STATIC ${MLKEM_SOURCES}) + target_include_directories(mlkem512 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mlkem/mlkem/src + ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ) + target_compile_definitions(mlkem512 PRIVATE + MLK_CONFIG_PARAMETER_SET=512 + MLK_CONFIG_MULTILEVEL_WITH_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem + ) + + add_library(mlkem768 STATIC ${MLKEM_SOURCES}) + target_include_directories(mlkem768 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mlkem/mlkem/src + ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ) + target_compile_definitions(mlkem768 PRIVATE + MLK_CONFIG_PARAMETER_SET=768 + MLK_CONFIG_MULTILEVEL_NO_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem + ) + + add_library(mlkem1024 STATIC ${MLKEM_SOURCES}) + target_include_directories(mlkem1024 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mlkem/mlkem/src + ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ) + target_compile_definitions(mlkem1024 PRIVATE + MLK_CONFIG_PARAMETER_SET=1024 + MLK_CONFIG_MULTILEVEL_NO_SHARED + MLK_CONFIG_NAMESPACE_PREFIX=mlkem + ) +endif() + + set(INCLUDES ${INCLUDES} + ${CMAKE_CURRENT_LIST_DIR}/mlkem/mlkem + ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ) + add_definitions(-DMLK_CONFIG_NAMESPACE_PREFIX=mlkem -DMLK_CONFIG_MULTILEVEL_BUILD=1) +endif() + set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/src/main.c ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb.c @@ -318,6 +374,8 @@ if(USB_ITF_HID) ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/pk_wrap.c ${CMAKE_CURRENT_LIST_DIR}/mbedtls/library/pkwrite.c ) +endif() + set(CBOR_SOURCES ${CMAKE_CURRENT_LIST_DIR}/tinycbor/src/cborencoder.c ${CMAKE_CURRENT_LIST_DIR}/tinycbor/src/cborparser.c @@ -327,19 +385,41 @@ if(USB_ITF_HID) set(INCLUDES ${INCLUDES} ${CMAKE_CURRENT_LIST_DIR}/tinycbor/src ) +set(LIBRARIES + mbedtls +) + +if (NOT ESP_PLATFORM) + add_library(mbedtls STATIC ${MBEDTLS_SOURCES}) + target_include_directories(mbedtls PUBLIC ${CMAKE_CURRENT_LIST_DIR}/mbedtls/include) + if(USB_ITF_HID) + add_library(tinycbor STATIC ${CBOR_SOURCES}) + target_include_directories(tinycbor PUBLIC ${CMAKE_CURRENT_LIST_DIR}/tinycbor/src) + set(LIBRARIES ${LIBRARIES} tinycbor) + endif() endif() -set(LIBRARIES - pico_stdlib - pico_multicore - pico_rand - pico_aon_timer - hardware_flash - pico_unique_id - tinyusb_device - tinyusb_board - hardware_pio -) +if (PICO_PLATFORM) + list(APPEND LIBRARIES + pico_stdlib + pico_multicore + pico_rand + pico_aon_timer + hardware_flash + pico_unique_id + tinyusb_device + tinyusb_board + hardware_pio + ) +endif() + +if (ENABLE_PQC) + list(APPEND LIBRARIES + mlkem512 + mlkem768 + mlkem1024 + ) +endif() set(IS_CYW43 0) if (PICO_PLATFORM) @@ -403,10 +483,7 @@ else() ${CMAKE_CURRENT_LIST_DIR}/src/usb/usb_descriptors.c ) endif() -set(EXTERNAL_SOURCES ${CBOR_SOURCES}) -if(NOT ESP_PLATFORM) - set(EXTERNAL_SOURCES ${EXTERNAL_SOURCES} ${MBEDTLS_SOURCES}) -endif() + if(MSVC) set( CMAKE_C_FLAGS @@ -423,11 +500,6 @@ if(MSVC) _WIN32_WINNT_WIN10_RS5=0 _STRALIGN_USE_SECURE_CRT=0 NTDDI_WIN11_DT=0) - set_source_files_properties( - ${EXTERNAL_SOURCES} - PROPERTIES - COMPILE_FLAGS " -W3 -wd4242 -wd4065" - ) endif() if(PICO_PLATFORM) @@ -450,13 +522,17 @@ if(PICO_RP2350) set(INCLUDES ${INCLUDES} ${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt ) + target_include_directories(mbedtls PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt + ) + target_link_libraries(mbedtls PRIVATE pico_sha256) set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/config/rp2350/alt/sha256_alt.c ) + add_definitions(-DMBEDTLS_SHA256_ALT=1) set(LIBRARIES ${LIBRARIES} pico_sha256) endif() set(INTERNAL_SOURCES ${PICO_KEYS_SOURCES}) -set(PICO_KEYS_SOURCES ${PICO_KEYS_SOURCES} ${EXTERNAL_SOURCES}) if(NOT TARGET pico_keys_sdk) if(PICO_PLATFORM) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100755 index 4ccd9f1..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -idf_component_register( - SRCS ${PICO_KEYS_SOURCES} - INCLUDE_DIRS . fs rng usb led ../tinycbor/src - REQUIRES bootloader_support esp_partition esp_tinyusb efuse mbedtls -) -idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) diff --git a/src/pico_keys.h b/src/pico_keys.h index 3859ac2..d271607 100644 --- a/src/pico_keys.h +++ b/src/pico_keys.h @@ -18,6 +18,8 @@ #ifndef _PICO_KEYS_H_ #define _PICO_KEYS_H_ +#define MBEDTLS_ALLOW_PRIVATE_ACCESS + #if defined(PICO_RP2040) || defined(PICO_RP2350) #define PICO_PLATFORM #endif