From 0fc4889ad5043593c3174e6d259b7ffb4c55632f Mon Sep 17 00:00:00 2001 From: "Matthias J. Kannwischer" Date: Sun, 18 Oct 2026 02:58:04 +0800 Subject: [PATCH] sys.h: Do not depend on configuration options sys.h evaluated MLD_CONFIG_NO_ASM, MLD_CONFIG_CT_TESTING_ENABLED and MLD_CONFIG_CUSTOM_CAPABILITY_FUNC when it was first included. Configuration hooks such as MLD_CONFIG_CUSTOM_ZEROIZE include sys.h, and its include guard prevents re-evaluation, so an option defined after such a hook was silently ignored or, for the capability function, caused a redefinition error. This affects the order of the config template and test/configs/no_asm_config.h: the "No ASM" configuration kept the inline-assembly value barrier and never built the volatile opt-blocker, and a late CT_TESTING_ENABLED made constant-time tests vacuous. Move the inline-assembly decision and the CT-testing macros to common.h, after the whole configuration has been read. Move the default mld_sys_check_capability() to a new shared header capability.h, included from common.h, so that multilevel builds still define it only once. Document in sys.h that it must not depend on configuration options. Add capability.h to the Pavona Bazel build via a patch. - Ports pq-code-package/mlkem-native#1938. - Resolves #1469. Signed-off-by: Matthias J. Kannwischer --- .../mldsa_native/src/capability.h | 1 + .../mldsa_native/src/capability.h | 1 + .../mldsa_native/src/capability.h | 1 + integration/liboqs/ML-DSA-44_META.yml | 38 ++++++++-------- integration/liboqs/ML-DSA-65_META.yml | 38 ++++++++-------- integration/liboqs/ML-DSA-87_META.yml | 38 ++++++++-------- integration/pavona/capability-header.patch | 17 ++++++++ mldsa/mldsa_native.c | 8 ++-- mldsa/mldsa_native_asm.S | 8 ++-- mldsa/src/capability.h | 31 +++++++++++++ mldsa/src/common.h | 22 ++++++++++ mldsa/src/sys.h | 43 ++----------------- .../sys_check_capability_harness.c | 2 +- test/abicheck/abicheck_common.h | 7 +-- 14 files changed, 151 insertions(+), 104 deletions(-) create mode 120000 examples/bring_your_own_fips202/mldsa_native/src/capability.h create mode 120000 examples/bring_your_own_fips202_static/mldsa_native/src/capability.h create mode 120000 examples/custom_backend/mldsa_native/src/capability.h create mode 100644 integration/pavona/capability-header.patch create mode 100644 mldsa/src/capability.h diff --git a/examples/bring_your_own_fips202/mldsa_native/src/capability.h b/examples/bring_your_own_fips202/mldsa_native/src/capability.h new file mode 120000 index 0000000000..b257226c12 --- /dev/null +++ b/examples/bring_your_own_fips202/mldsa_native/src/capability.h @@ -0,0 +1 @@ +../../../../mldsa/src/capability.h \ No newline at end of file diff --git a/examples/bring_your_own_fips202_static/mldsa_native/src/capability.h b/examples/bring_your_own_fips202_static/mldsa_native/src/capability.h new file mode 120000 index 0000000000..b257226c12 --- /dev/null +++ b/examples/bring_your_own_fips202_static/mldsa_native/src/capability.h @@ -0,0 +1 @@ +../../../../mldsa/src/capability.h \ No newline at end of file diff --git a/examples/custom_backend/mldsa_native/src/capability.h b/examples/custom_backend/mldsa_native/src/capability.h new file mode 120000 index 0000000000..b257226c12 --- /dev/null +++ b/examples/custom_backend/mldsa_native/src/capability.h @@ -0,0 +1 @@ +../../../../mldsa/src/capability.h \ No newline at end of file diff --git a/integration/liboqs/ML-DSA-44_META.yml b/integration/liboqs/ML-DSA-44_META.yml index 5fa75b5d3c..88d534eed8 100644 --- a/integration/liboqs/ML-DSA-44_META.yml +++ b/integration/liboqs/ML-DSA-44_META.yml @@ -32,10 +32,10 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA44_C_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_c.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h - mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c + mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc @@ -50,13 +50,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA44_X86_64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_x86_64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/x86_64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/x86_64 supported_platforms: - architecture: x86_64 operating_systems: @@ -77,13 +78,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA44_AARCH64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_aarch64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/aarch64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/aarch64 supported_platforms: - architecture: arm_8 operating_systems: diff --git a/integration/liboqs/ML-DSA-65_META.yml b/integration/liboqs/ML-DSA-65_META.yml index fa57ebd49e..95c3d523c8 100644 --- a/integration/liboqs/ML-DSA-65_META.yml +++ b/integration/liboqs/ML-DSA-65_META.yml @@ -32,10 +32,10 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA65_C_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_c.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h - mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c + mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc @@ -50,13 +50,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA65_X86_64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_x86_64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/x86_64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/x86_64 supported_platforms: - architecture: x86_64 operating_systems: @@ -77,13 +78,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA65_AARCH64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_aarch64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/aarch64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/aarch64 supported_platforms: - architecture: arm_8 operating_systems: diff --git a/integration/liboqs/ML-DSA-87_META.yml b/integration/liboqs/ML-DSA-87_META.yml index 1ae51c803d..94163d7fab 100644 --- a/integration/liboqs/ML-DSA-87_META.yml +++ b/integration/liboqs/ML-DSA-87_META.yml @@ -32,10 +32,10 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA87_C_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_c.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h - mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/packing.c mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c + mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc @@ -50,13 +50,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA87_X86_64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_x86_64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/x86_64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/x86_64 supported_platforms: - architecture: x86_64 operating_systems: @@ -77,13 +78,14 @@ implementations: signature_verify_extmu: PQCP_MLDSA_NATIVE_MLDSA87_AARCH64_verify_extmu_oqs api-with-context-string: true sources: integration/liboqs/config_aarch64.h integration/liboqs/fips202_glue.h integration/liboqs/fips202x4_glue.h - integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/cbmc.h mldsa/src/common.h - mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c mldsa/src/debug.h - mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c mldsa/src/packing.h - mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c mldsa/src/poly_kl.h - mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c mldsa/src/polyvec_lazy.h - mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h mldsa/src/sign.c - mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc mldsa/src/native/aarch64 + integration/liboqs/sig_glue.c mldsa/mldsa_native.h mldsa/src/capability.h mldsa/src/cbmc.h + mldsa/src/common.h mldsa/src/context.h mldsa/src/ct.c mldsa/src/ct.h mldsa/src/debug.c + mldsa/src/debug.h mldsa/src/native/api.h mldsa/src/native/meta.h mldsa/src/packing.c + mldsa/src/packing.h mldsa/src/params.h mldsa/src/poly.c mldsa/src/poly.h mldsa/src/poly_kl.c + mldsa/src/poly_kl.h mldsa/src/polyvec.c mldsa/src/polyvec.h mldsa/src/polyvec_lazy.c + mldsa/src/polyvec_lazy.h mldsa/src/randombytes.h mldsa/src/reduce.h mldsa/src/rounding.h + mldsa/src/sign.c mldsa/src/sign.h mldsa/src/symmetric.h mldsa/src/sys.h mldsa/src/zetas.inc + mldsa/src/native/aarch64 supported_platforms: - architecture: arm_8 operating_systems: diff --git a/integration/pavona/capability-header.patch b/integration/pavona/capability-header.patch new file mode 100644 index 0000000000..c0a75c695f --- /dev/null +++ b/integration/pavona/capability-header.patch @@ -0,0 +1,17 @@ +# Copyright (c) The mldsa-native project authors +# SPDX-License-Identifier: Apache-2.0 +# +# List the capability.h header in the Bazel build of mldsa-native. + +diff --git a/third_party/mldsa_native/BUILD.mldsa_native.bazel b/third_party/mldsa_native/BUILD.mldsa_native.bazel +index 0218bf5..7ce5e6a 100644 +--- a/third_party/mldsa_native/BUILD.mldsa_native.bazel ++++ b/third_party/mldsa_native/BUILD.mldsa_native.bazel +@@ -13,6 +13,7 @@ cc_library( + "mldsa/src/cbmc.h", + "mldsa/src/common.h", + "mldsa/src/context.h", ++ "mldsa/src/capability.h", + "mldsa/src/randombytes.h", + "mldsa/src/debug.h", + "mldsa/src/debug.c", diff --git a/mldsa/mldsa_native.c b/mldsa/mldsa_native.c index 49810928db..cc938cd420 100644 --- a/mldsa/mldsa_native.c +++ b/mldsa/mldsa_native.c @@ -214,6 +214,8 @@ #undef MLD_COMMON_H #undef MLD_CONCAT #undef MLD_CONCAT_ +#undef MLD_CT_TESTING_DECLASSIFY +#undef MLD_CT_TESTING_SECRET #undef MLD_EMPTY_CU #undef MLD_ERR_FAIL #undef MLD_ERR_INVALID_ARG @@ -228,6 +230,7 @@ #undef MLD_FIPS202X4_HEADER_FILE #undef MLD_FIPS202_HEADER_FILE #undef MLD_FREE +#undef MLD_HAVE_INLINE_ASM #undef MLD_INTERNAL_API #undef MLD_INTERNAL_DATA_DECLARATION #undef MLD_INTERNAL_DATA_DEFINITION @@ -441,6 +444,8 @@ /* * Undefine macros from MLD_CONFIG_PARAMETER_SET-generic files */ +/* mldsa/src/capability.h */ +#undef MLD_CAPABILITY_H /* mldsa/src/context.h */ #undef MLD_CONTEXT_H #undef MLD_CONTEXT_PARAMETERS_0 @@ -811,10 +816,7 @@ #undef MLD_ALIGN_UP #undef MLD_ALWAYS_INLINE #undef MLD_CET_ENDBR -#undef MLD_CT_TESTING_DECLASSIFY -#undef MLD_CT_TESTING_SECRET #undef MLD_DEFAULT_ALIGN -#undef MLD_HAVE_INLINE_ASM #undef MLD_INLINE #undef MLD_MUST_CHECK_RETURN_VALUE #undef MLD_NOINLINE diff --git a/mldsa/mldsa_native_asm.S b/mldsa/mldsa_native_asm.S index 8c416d5eb3..ac0424794d 100644 --- a/mldsa/mldsa_native_asm.S +++ b/mldsa/mldsa_native_asm.S @@ -252,6 +252,8 @@ #undef MLD_COMMON_H #undef MLD_CONCAT #undef MLD_CONCAT_ +#undef MLD_CT_TESTING_DECLASSIFY +#undef MLD_CT_TESTING_SECRET #undef MLD_EMPTY_CU #undef MLD_ERR_FAIL #undef MLD_ERR_INVALID_ARG @@ -266,6 +268,7 @@ #undef MLD_FIPS202X4_HEADER_FILE #undef MLD_FIPS202_HEADER_FILE #undef MLD_FREE +#undef MLD_HAVE_INLINE_ASM #undef MLD_INTERNAL_API #undef MLD_INTERNAL_DATA_DECLARATION #undef MLD_INTERNAL_DATA_DEFINITION @@ -479,6 +482,8 @@ /* * Undefine macros from MLD_CONFIG_PARAMETER_SET-generic files */ +/* mldsa/src/capability.h */ +#undef MLD_CAPABILITY_H /* mldsa/src/context.h */ #undef MLD_CONTEXT_H #undef MLD_CONTEXT_PARAMETERS_0 @@ -849,10 +854,7 @@ #undef MLD_ALIGN_UP #undef MLD_ALWAYS_INLINE #undef MLD_CET_ENDBR -#undef MLD_CT_TESTING_DECLASSIFY -#undef MLD_CT_TESTING_SECRET #undef MLD_DEFAULT_ALIGN -#undef MLD_HAVE_INLINE_ASM #undef MLD_INLINE #undef MLD_MUST_CHECK_RETURN_VALUE #undef MLD_NOINLINE diff --git a/mldsa/src/capability.h b/mldsa/src/capability.h new file mode 100644 index 0000000000..c6cbb21031 --- /dev/null +++ b/mldsa/src/capability.h @@ -0,0 +1,31 @@ +/* + * 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_CAPABILITY_H +#define MLD_CAPABILITY_H + +#include "sys.h" + +#if !defined(MLD_CONFIG_CUSTOM_CAPABILITY_FUNC) && !defined(__ASSEMBLER__) +#include "cbmc.h" + +MLD_MUST_CHECK_RETURN_VALUE +static MLD_INLINE int mld_sys_check_capability(mld_sys_cap cap) +__contract__( + ensures(return_value == 0 || return_value == 1) +) +{ + /* By default, we rely on compile-time feature detection/specification: + * If a feature is enabled at compile-time, we assume it is supported by + * the host that the resulting library/binary will be built on. + * If this assumption is not true, you MUST overwrite this function. + * See the documentation of MLD_CONFIG_CUSTOM_CAPABILITY_FUNC in + * mldsa_native_config.h for more information. */ + (void)cap; + return 1; +} +#endif /* !MLD_CONFIG_CUSTOM_CAPABILITY_FUNC && !__ASSEMBLER__ */ + +#endif /* !MLD_CAPABILITY_H */ diff --git a/mldsa/src/common.h b/mldsa/src/common.h index 2ef753b7ee..d9191f39b2 100644 --- a/mldsa/src/common.h +++ b/mldsa/src/common.h @@ -20,9 +20,31 @@ #include "mldsa_native_config.h" #endif +#include "capability.h" #include "params.h" #include "sys.h" +#if !defined(MLD_CONFIG_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +#define MLD_HAVE_INLINE_ASM +#endif + +#if defined(MLD_CONFIG_CT_TESTING_ENABLED) && !defined(__ASSEMBLER__) +#include +#define MLD_CT_TESTING_SECRET(ptr, len) \ + VALGRIND_MAKE_MEM_UNDEFINED((ptr), (len)) +#define MLD_CT_TESTING_DECLASSIFY(ptr, len) \ + VALGRIND_MAKE_MEM_DEFINED((ptr), (len)) +#else /* MLD_CONFIG_CT_TESTING_ENABLED && !__ASSEMBLER__ */ +#define MLD_CT_TESTING_SECRET(ptr, len) \ + do \ + { \ + } while (0) +#define MLD_CT_TESTING_DECLASSIFY(ptr, len) \ + do \ + { \ + } while (0) +#endif /* !(MLD_CONFIG_CT_TESTING_ENABLED && !__ASSEMBLER__) */ + /* Internal and public API have external linkage by default, but * this can be overwritten by the user, e.g. for single-CU builds. */ #if !defined(MLD_CONFIG_INTERNAL_API_QUALIFIER) diff --git a/mldsa/src/sys.h b/mldsa/src/sys.h index ae8335ecf0..0af74a2aac 100644 --- a/mldsa/src/sys.h +++ b/mldsa/src/sys.h @@ -7,9 +7,9 @@ #ifndef MLD_SYS_H #define MLD_SYS_H -#if !defined(MLD_CONFIG_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) -#define MLD_HAVE_INLINE_ASM -#endif +/* This header must not depend on configuration options: configuration + * hooks may include it before all options are defined, and its include + * guard prevents re-evaluation. Evaluate options in common.h instead. */ /* Try to find endianness, if not forced through CFLAGS already */ #if !defined(MLD_SYS_LITTLE_ENDIAN) && !defined(MLD_SYS_BIG_ENDIAN) @@ -245,23 +245,6 @@ #endif #endif /* MLD_SYS_X86_64 */ -#if defined(MLD_CONFIG_CT_TESTING_ENABLED) && !defined(__ASSEMBLER__) -#include -#define MLD_CT_TESTING_SECRET(ptr, len) \ - VALGRIND_MAKE_MEM_UNDEFINED((ptr), (len)) -#define MLD_CT_TESTING_DECLASSIFY(ptr, len) \ - VALGRIND_MAKE_MEM_DEFINED((ptr), (len)) -#else /* MLD_CONFIG_CT_TESTING_ENABLED && !__ASSEMBLER__ */ -#define MLD_CT_TESTING_SECRET(ptr, len) \ - do \ - { \ - } while (0) -#define MLD_CT_TESTING_DECLASSIFY(ptr, len) \ - do \ - { \ - } while (0) -#endif /* !(MLD_CONFIG_CT_TESTING_ENABLED && !__ASSEMBLER__) */ - #if defined(__GNUC__) || defined(__clang__) #define MLD_MUST_CHECK_RETURN_VALUE __attribute__((warn_unused_result)) #else @@ -305,26 +288,6 @@ typedef enum /* Armv8.1-M */ MLD_SYS_CAP_ARMV81M_MVE } mld_sys_cap; - -#if !defined(MLD_CONFIG_CUSTOM_CAPABILITY_FUNC) -#include "cbmc.h" - -MLD_MUST_CHECK_RETURN_VALUE -static MLD_INLINE int mld_sys_check_capability(mld_sys_cap cap) -__contract__( - ensures(return_value == 0 || return_value == 1) -) -{ - /* By default, we rely on compile-time feature detection/specification: - * If a feature is enabled at compile-time, we assume it is supported by - * the host that the resulting library/binary will be built on. - * If this assumption is not true, you MUST overwrite this function. - * See the documentation of MLD_CONFIG_CUSTOM_CAPABILITY_FUNC in - * mldsa_native_config.h for more information. */ - (void)cap; - return 1; -} -#endif /* !MLD_CONFIG_CUSTOM_CAPABILITY_FUNC */ #endif /* !__ASSEMBLER__ */ #endif /* !MLD_SYS_H */ diff --git a/proofs/cbmc/sys_check_capability/sys_check_capability_harness.c b/proofs/cbmc/sys_check_capability/sys_check_capability_harness.c index e0a50e6f4f..151958b90f 100644 --- a/proofs/cbmc/sys_check_capability/sys_check_capability_harness.c +++ b/proofs/cbmc/sys_check_capability/sys_check_capability_harness.c @@ -2,7 +2,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 -#include "sys.h" +#include "capability.h" void harness(void) { diff --git a/test/abicheck/abicheck_common.h b/test/abicheck/abicheck_common.h index 68bac0da21..9aa9218556 100644 --- a/test/abicheck/abicheck_common.h +++ b/test/abicheck/abicheck_common.h @@ -10,9 +10,9 @@ #include /* - * Resolve the build config and sys.h. We don't include common.h: it would - * drag in backend constant tables that older compilers do not drop, forcing - * them into the abicheck link. + * Resolve the build config, sys.h and capability.h. We don't include + * common.h: it would drag in backend constant tables that older compilers do + * not drop, forcing them into the abicheck link. * * Paths use the project's -Imldsa search path (set in test/mk/components.mk) * so this header is includable from any depth under test/abicheck/. @@ -23,6 +23,7 @@ #else #include "mldsa_native_config.h" #endif +#include "src/capability.h" #include "src/sys.h" /* Return codes for check_(), shared with abicheck.c. */