Skip to content

Commit edc4f48

Browse files
committed
Add M55 native implementations.
1 parent b498d66 commit edc4f48

File tree

15 files changed

+7202
-14
lines changed

15 files changed

+7202
-14
lines changed

Makefile

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
# Copyright (c) The mldsa-native project authors
33
# SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
44

5-
.PHONY: func kat acvp stack \
5+
.PHONY: func kat acvp stack keccak \
66
func_44 kat_44 acvp_44 stack_44 \
7-
func_65 kat_65 acvp_65 stack_65 \
8-
func_87 kat_87 acvp_87 stack_87 \
9-
run_func run_kat run_acvp run_stack \
10-
run_func_44 run_kat_44 run_stack_44 \
11-
run_func_65 run_kat_65 run_stack_65 \
12-
run_func_87 run_kat_87 run_stack_87 \
7+
func_65 kat_65 acvp_65 stack_65 keccak_65 \
8+
func_87 kat_87 acvp_87 stack_87 keccak_87 \
9+
run_func run_kat run_acvp run_stack run_keccak \
10+
run_func_44 run_kat_44 run_stack_44 run_keccak_44 \
11+
run_func_65 run_kat_65 run_stack_65 run_keccak_65 \
12+
run_func_87 run_kat_87 run_stack_87 run_keccak_87 \
1313
bench_44 bench_65 bench_87 bench \
1414
run_bench_44 run_bench_65 run_bench_87 run_bench \
1515
bench_components_44 bench_components_65 bench_components_87 bench_components \
@@ -108,6 +108,23 @@ run_stack_87: stack_87
108108
$(Q)python3 scripts/stack $(MLDSA87_DIR)/bin/test_stack87 --build-dir $(MLDSA87_DIR) $(STACK_ANALYSIS_FLAGS)
109109
run_stack: run_stack_44 run_stack_65 run_stack_87
110110

111+
# Keccak tests
112+
keccak_44: $(MLDSA44_DIR)/bin/test_keccak44
113+
$(Q)echo " KECCAK ML-DSA-44: $^"
114+
keccak_65: $(MLDSA65_DIR)/bin/test_keccak65
115+
$(Q)echo " KECCAK ML-DSA-65: $^"
116+
keccak_87: $(MLDSA87_DIR)/bin/test_keccak87
117+
$(Q)echo " KECCAK ML-DSA-87: $^"
118+
keccak: keccak_44 keccak_65 keccak_87
119+
120+
run_keccak_44: keccak_44
121+
$(W) $(MLDSA44_DIR)/bin/test_keccak44
122+
run_keccak_65: keccak_65
123+
$(W) $(MLDSA65_DIR)/bin/test_keccak65
124+
run_keccak_87: keccak_87
125+
$(W) $(MLDSA87_DIR)/bin/test_keccak87
126+
run_keccak: run_keccak_44 run_keccak_65 run_keccak_87
127+
111128
lib: $(BUILD_DIR)/libmldsa.a $(BUILD_DIR)/libmldsa44.a $(BUILD_DIR)/libmldsa65.a $(BUILD_DIR)/libmldsa87.a
112129

113130
# Enforce setting CYCLES make variable when

mldsa/fips202/keccakf1600.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ void mld_keccakf1600_extract_bytes(uint64_t *state, unsigned char *data,
4040
unsigned offset, unsigned length)
4141
{
4242
unsigned i;
43-
#if defined(MLD_SYS_LITTLE_ENDIAN)
43+
#if defined(MLD_USE_FIPS202_X1_NATIVE)
44+
(void) i;
45+
mld_keccakf1600_extract_bytes_native(state, data, offset, length);
46+
#elif defined(MLD_SYS_LITTLE_ENDIAN)
4447
uint8_t *state_ptr = (uint8_t *)state + offset;
4548
for (i = 0; i < length; i++)
4649
__loop__(invariant(i <= length))
@@ -61,7 +64,10 @@ void mld_keccakf1600_xor_bytes(uint64_t *state, const unsigned char *data,
6164
unsigned offset, unsigned length)
6265
{
6366
unsigned i;
64-
#if defined(MLD_SYS_LITTLE_ENDIAN)
67+
#if defined(MLD_USE_FIPS202_X1_NATIVE)
68+
(void) i;
69+
mld_keccakf1600_xor_bytes_native(state, data, offset, length);
70+
#elif defined(MLD_SYS_LITTLE_ENDIAN)
6571
uint8_t *state_ptr = (uint8_t *)state + offset;
6672
for (i = 0; i < length; i++)
6773
__loop__(invariant(i <= length))
@@ -84,6 +90,12 @@ void mld_keccakf1600x4_extract_bytes(uint64_t *state, unsigned char *data0,
8490
unsigned char *data3, unsigned offset,
8591
unsigned length)
8692
{
93+
#if defined(MLD_USE_FIPS202_X4_XOR_NATIVE)
94+
mld_keccakf1600_extract_bytes_x4_native(state, data0,
95+
data1, data2,
96+
data3, offset,
97+
length);
98+
#else /* MLD_USE_FIPS202_X4_XOR_NATIVE */
8799
mld_keccakf1600_extract_bytes(state + MLD_KECCAK_LANES * 0, data0, offset,
88100
length);
89101
mld_keccakf1600_extract_bytes(state + MLD_KECCAK_LANES * 1, data1, offset,
@@ -92,6 +104,7 @@ void mld_keccakf1600x4_extract_bytes(uint64_t *state, unsigned char *data0,
92104
length);
93105
mld_keccakf1600_extract_bytes(state + MLD_KECCAK_LANES * 3, data3, offset,
94106
length);
107+
#endif /* !MLD_USE_FIPS202_X4_NATIVE && !MLD_USE_FIPS202_X2_NATIVE */
95108
}
96109

97110
void mld_keccakf1600x4_xor_bytes(uint64_t *state, const unsigned char *data0,
@@ -100,6 +113,13 @@ void mld_keccakf1600x4_xor_bytes(uint64_t *state, const unsigned char *data0,
100113
const unsigned char *data3, unsigned offset,
101114
unsigned length)
102115
{
116+
#if defined(MLD_USE_FIPS202_X4_XOR_NATIVE)
117+
mld_keccakf1600_xor_bytes_x4_native(state, data0,
118+
data1,
119+
data2,
120+
data3, offset,
121+
length);
122+
#else /* MLD_USE_FIPS202_X4_XOR_NATIVE */
103123
mld_keccakf1600_xor_bytes(state + MLD_KECCAK_LANES * 0, data0, offset,
104124
length);
105125
mld_keccakf1600_xor_bytes(state + MLD_KECCAK_LANES * 1, data1, offset,
@@ -108,6 +128,7 @@ void mld_keccakf1600x4_xor_bytes(uint64_t *state, const unsigned char *data0,
108128
length);
109129
mld_keccakf1600_xor_bytes(state + MLD_KECCAK_LANES * 3, data3, offset,
110130
length);
131+
#endif /* MLD_USE_FIPS202_X4_XOR_NATIVE */
111132
}
112133

113134
void mld_keccakf1600x4_permute(uint64_t *state)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright (c) The mlkem-native project authors
3+
* Copyright (c) The mldsa-native project authors
4+
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
5+
*/
6+
7+
#ifndef MLD_FIPS202_NATIVE_ARMV81M_AUTO_H
8+
#define MLD_FIPS202_NATIVE_ARMV81M_AUTO_H
9+
/* Default FIPS202 assembly profile for ARMV81M systems */
10+
11+
#include "x4_v8m_mve.h"
12+
13+
#endif /* !MLD_FIPS202_NATIVE_ARMV81M_AUTO_H */

0 commit comments

Comments
 (0)