diff --git a/cmake/deps.cmake b/cmake/deps.cmake index 1cb2534..dfbccff 100644 --- a/cmake/deps.cmake +++ b/cmake/deps.cmake @@ -12,6 +12,7 @@ set(MBEDTLS_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/mbedtls") set(TINYCBOR_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/tinycbor") set(CJSON_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/cjson") set(MLKEM_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/mlkem") +set(MLDSA_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/mldsa") set(LIBCVC_PATH "${CMAKE_CURRENT_LIST_DIR}/../third-party/libcvc") set(PICOKEYS_MBEDTLS_STD_REPO "https://github.com/Mbed-TLS/mbedtls.git") @@ -25,6 +26,8 @@ set(PICOKEYS_CJSON_REPO "https://github.com/DaveGamble/cJSON.git") set(PICOKEYS_CJSON_REF "v1.7.19") set(PICOKEYS_MLKEM_REPO "https://github.com/pq-code-package/mlkem-native.git") set(PICOKEYS_MLKEM_REF "v1.1.0") +set(PICOKEYS_MLDSA_REPO "https://github.com/pq-code-package/mldsa-native.git") +set(PICOKEYS_MLDSA_REF "v1.0.0-beta") set(PICOKEYS_LIBCVC_REPO "https://github.com/polhenarejos/libcvc.git") set(PICOKEYS_LIBCVC_REF "main") @@ -121,6 +124,7 @@ if(USB_ITF_LWIP) endif() if(ENABLE_PQC) picokeys_sync_dep(mlkem_dep "${PICOKEYS_MLKEM_REPO}" "${PICOKEYS_MLKEM_REF}" "${MLKEM_PATH}") + picokeys_sync_dep(mldsa_dep "${PICOKEYS_MLDSA_REPO}" "${PICOKEYS_MLDSA_REF}" "${MLDSA_PATH}") endif() if(ENABLE_LIBCVC) picokeys_sync_dep(libcvc_dep "${PICOKEYS_LIBCVC_REPO}" "${PICOKEYS_LIBCVC_REF}" "${LIBCVC_PATH}") diff --git a/config/esp32/components/mldsa44/CMakeLists.txt b/config/esp32/components/mldsa44/CMakeLists.txt new file mode 100644 index 0000000..378af40 --- /dev/null +++ b/config/esp32/components/mldsa44/CMakeLists.txt @@ -0,0 +1,24 @@ +set(MLKEM_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../third-party/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} +) +idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) + +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/mldsa65/CMakeLists.txt b/config/esp32/components/mldsa65/CMakeLists.txt new file mode 100644 index 0000000..a9ea731 --- /dev/null +++ b/config/esp32/components/mldsa65/CMakeLists.txt @@ -0,0 +1,24 @@ +set(MLDSA_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../third-party/mldsa/mldsa) + +file(GLOB_RECURSE MLDSA_SOURCES + ${MLDSA_DIR}/src/*.c +) +list(FILTER MLDSA_SOURCES EXCLUDE REGEX "/native/") + +idf_component_register( + SRCS ${MLDSA_SOURCES} + INCLUDE_DIRS ${MLDSA_DIR} +) +idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) + +target_compile_definitions(${COMPONENT_LIB} PRIVATE + MLD_CONFIG_PARAMETER_SET=65 + MLD_CONFIG_MULTILEVEL_WITH_SHARED + MLD_CONFIG_NAMESPACE_PREFIX=mldsa +) + +target_compile_options(${COMPONENT_LIB} PRIVATE + -O2 + -fno-builtin + -fno-strict-aliasing +) diff --git a/config/esp32/components/mldsa87/CMakeLists.txt b/config/esp32/components/mldsa87/CMakeLists.txt new file mode 100644 index 0000000..993e8d6 --- /dev/null +++ b/config/esp32/components/mldsa87/CMakeLists.txt @@ -0,0 +1,24 @@ +set(MLDSA_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../third-party/mldsa/mldsa) + +file(GLOB_RECURSE MLDSA_SOURCES + ${MLDSA_DIR}/src/*.c +) +list(FILTER MLDSA_SOURCES EXCLUDE REGEX "/native/") + +idf_component_register( + SRCS ${MLDSA_SOURCES} + INCLUDE_DIRS ${MLDSA_DIR} +) +idf_component_set_property(${COMPONENT_NAME} WHOLE_ARCHIVE ON) + +target_compile_definitions(${COMPONENT_LIB} PRIVATE + MLD_CONFIG_PARAMETER_SET=87 + MLD_CONFIG_MULTILEVEL_WITH_SHARED + MLD_CONFIG_NAMESPACE_PREFIX=mldsa +) + +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 index bbfd3f0..49cdcf1 100755 --- a/config/esp32/components/pico-keys-sdk/CMakeLists.txt +++ b/config/esp32/components/pico-keys-sdk/CMakeLists.txt @@ -24,11 +24,16 @@ if(ENABLE_PQC) list(APPEND PICOKEYS_INCLUDE_DIRS ${PICOKEYS_SDK_DIR}/third-party/mlkem/mlkem ${PICOKEYS_SDK_DIR}/config/mlkem + ${PICOKEYS_SDK_DIR}/third-party/mldsa/mldsa + ${PICOKEYS_SDK_DIR}/config/mldsa ) list(APPEND PICOKEYS_REQUIRES mlkem512 mlkem768 mlkem1024 + mldsa44 + mldsa65 + mldsa87 ) endif() diff --git a/config/mldsa/mldsa_native_all.h b/config/mldsa/mldsa_native_all.h new file mode 100644 index 0000000..8b9c1cd --- /dev/null +++ b/config/mldsa/mldsa_native_all.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) The mlkem-native project authors + * Copyright (c) The mldsa-native project authors + * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT + */ + +#ifndef MLD_ALL_H +#define MLD_ALL_H + + +/* API for MLDSA-44 */ +#define MLD_CONFIG_PARAMETER_SET 44 +#include "mldsa_native/mldsa_native.h" +#undef MLD_CONFIG_PARAMETER_SET +#undef MLD_H + +/* API for MLDSA-65 */ +#define MLD_CONFIG_PARAMETER_SET 65 +#include "mldsa_native/mldsa_native.h" +#undef MLD_CONFIG_PARAMETER_SET +#undef MLD_H + +/* API for MLDSA-87 */ +#define MLD_CONFIG_PARAMETER_SET 87 +#include "mldsa_native/mldsa_native.h" +#undef MLD_CONFIG_PARAMETER_SET +#undef MLD_H + +#endif /* !MLD_ALL_H */ \ No newline at end of file diff --git a/config/mldsa/mldsa_native_config.h b/config/mldsa/mldsa_native_config.h new file mode 100644 index 0000000..4ef858a --- /dev/null +++ b/config/mldsa/mldsa_native_config.h @@ -0,0 +1,10 @@ +#pragma once + +/* Disable all native/asm backends */ +// #define MLD_CONFIG_USE_NATIVE_BACKEND_ARITH + +/* No SuperCop */ +#define MLD_CONFIG_NO_SUPERCOP + +/* No verification API */ +#define MLD_CONFIG_NO_VERIFY_API diff --git a/picokeys_sdk_import.cmake b/picokeys_sdk_import.cmake index be0c52d..0bacfeb 100644 --- a/picokeys_sdk_import.cmake +++ b/picokeys_sdk_import.cmake @@ -218,19 +218,63 @@ if(ENABLE_PQC) MLK_CONFIG_MULTILEVEL_NO_SHARED MLK_CONFIG_NAMESPACE_PREFIX=mlkem ) + + file(GLOB_RECURSE MLDSA_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa/src/*.c + ) + list(FILTER MLDSA_SOURCES EXCLUDE REGEX "/native/") + + add_library(mldsa44 STATIC ${MLDSA_SOURCES}) + target_include_directories(mldsa44 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa/src + ${CMAKE_CURRENT_LIST_DIR}/config/mldsa + ) + target_compile_definitions(mldsa44 PRIVATE + MLD_CONFIG_PARAMETER_SET=44 + MLD_CONFIG_MULTILEVEL_WITH_SHARED + MLD_CONFIG_NAMESPACE_PREFIX=mldsa + ) + + add_library(mldsa65 STATIC ${MLDSA_SOURCES}) + target_include_directories(mldsa65 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa/src + ${CMAKE_CURRENT_LIST_DIR}/config/mldsa + ) + target_compile_definitions(mldsa65 PRIVATE + MLD_CONFIG_PARAMETER_SET=65 + MLD_CONFIG_MULTILEVEL_NO_SHARED + MLD_CONFIG_NAMESPACE_PREFIX=mldsa + ) + + add_library(mldsa87 STATIC ${MLDSA_SOURCES}) + target_include_directories(mldsa87 PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa/src + ${CMAKE_CURRENT_LIST_DIR}/config/mldsa + ) + target_compile_definitions(mldsa87 PRIVATE + MLD_CONFIG_PARAMETER_SET=87 + MLD_CONFIG_MULTILEVEL_NO_SHARED + MLD_CONFIG_NAMESPACE_PREFIX=mldsa + ) endif() list(APPEND INCLUDES ${CMAKE_CURRENT_LIST_DIR}/third-party/mlkem/mlkem ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa + ${CMAKE_CURRENT_LIST_DIR}/config/mldsa ) list(APPEND SYSTEM_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/third-party/mlkem/mlkem ${CMAKE_CURRENT_LIST_DIR}/config/mlkem + ${CMAKE_CURRENT_LIST_DIR}/third-party/mldsa/mldsa + ${CMAKE_CURRENT_LIST_DIR}/config/mldsa ) add_compile_definitions( MLK_CONFIG_NAMESPACE_PREFIX=mlkem MLK_CONFIG_MULTILEVEL_BUILD=1 + MLD_CONFIG_NAMESPACE_PREFIX=mldsa + MLD_CONFIG_MULTILEVEL_BUILD=1 ) endif() @@ -452,6 +496,9 @@ if(ENABLE_PQC) mlkem768 mlkem1024 mlkem512 + mldsa44 + mldsa65 + mldsa87 ) endif() @@ -531,7 +578,7 @@ else() endif() if(MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5045 -wd4820") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5045 -wd4820 -wd5105") add_compile_definitions( _CRT_SECURE_NO_WARNINGS