Added ML-DSA.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2026-05-15 11:16:45 +02:00
parent 24dd4b2e69
commit e83f0b6b52
8 changed files with 168 additions and 1 deletions

View File

@@ -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}")

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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()

View File

@@ -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 */

View File

@@ -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

View File

@@ -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