Skip to content

Commit 909f339

Browse files
committed
Unit-test: add consistency tests for mld_poly_uniform*_x1/x4
In mldsa-native, there are three functions that have both scalar and 4-way batched variants: - mld_poly_uniform_gamma1 / mld_poly_uniform_gamma1_4x - mld_poly_uniform_eta / mld_poly_uniform_eta_4x - mld_poly_uniform / mld_poly_uniform_4x For each of the above pairs, this commit implements consistency test functions in test_unit.c that compare the outputs of the scalar and 4-way batched variants. For mld_poly_uniform_eta and mld_poly_uniform_eta_4x, the two variants are not defined under the same compilation conditions in poly_kl.h. To enable testing both variants, this commit introduces a new macro: MLD_UNIT_TEST which is made available in test_unit.c to override the conditional compilation and allow both implementations to be exercised in the unit tests. Signed-off-by: willieyz <willie.zhao@chelpis.com>
1 parent a949f77 commit 909f339

8 files changed

Lines changed: 145 additions & 29 deletions

File tree

mldsa/src/poly.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,9 @@ void mld_poly_uniform(mld_poly *a, const uint8_t seed[MLDSA_SEEDBYTES + 2])
657657
mld_zeroize(buf, sizeof(buf));
658658
}
659659

660-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && !defined(MLD_CONFIG_REDUCE_RAM)
660+
#if (!defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && \
661+
!defined(MLD_CONFIG_REDUCE_RAM)) || \
662+
defined(MLD_UNIT_TEST)
661663
MLD_INTERNAL_API
662664
void mld_poly_uniform_4x(mld_poly *vec0, mld_poly *vec1, mld_poly *vec2,
663665
mld_poly *vec3,
@@ -722,7 +724,8 @@ void mld_poly_uniform_4x(mld_poly *vec0, mld_poly *vec1, mld_poly *vec2,
722724
mld_zeroize(buf, sizeof(buf));
723725
}
724726

725-
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */
727+
#endif /* (!MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM) || \
728+
MLD_UNIT_TEST */
726729

727730
MLD_INTERNAL_API
728731
void mld_polyt1_pack(uint8_t r[MLDSA_POLYT1_PACKEDBYTES], const mld_poly *a)

mldsa/src/poly.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,9 @@ __contract__(
243243
ensures(array_bound(a->coeffs, 0, MLDSA_N, 0, MLDSA_Q))
244244
);
245245

246-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && !defined(MLD_CONFIG_REDUCE_RAM)
246+
#if (!defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) && \
247+
!defined(MLD_CONFIG_REDUCE_RAM)) || \
248+
defined(MLD_UNIT_TEST)
247249
#define mld_poly_uniform_4x MLD_NAMESPACE(poly_uniform_4x)
248250
/*************************************************
249251
* Name: mld_poly_uniform_x4
@@ -277,7 +279,8 @@ __contract__(
277279
ensures(array_bound(vec2->coeffs, 0, MLDSA_N, 0, MLDSA_Q))
278280
ensures(array_bound(vec3->coeffs, 0, MLDSA_N, 0, MLDSA_Q))
279281
);
280-
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM */
282+
#endif /* (!MLD_CONFIG_SERIAL_FIPS202_ONLY && !MLD_CONFIG_REDUCE_RAM) || \
283+
MLD_UNIT_TEST */
281284

282285
#define mld_polyt1_pack MLD_NAMESPACE(polyt1_pack)
283286
/*************************************************

mldsa/src/poly_kl.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ __contract__(
341341
return mld_rej_eta_c(a, target, offset, buf, buflen);
342342
}
343343

344-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
344+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
345345
MLD_INTERNAL_API
346346
void mld_poly_uniform_eta_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
347347
mld_poly *r3, const uint8_t seed[MLDSA_CRHBYTES],
@@ -425,8 +425,9 @@ void mld_poly_uniform_eta_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
425425
mld_zeroize(buf, sizeof(buf));
426426
mld_zeroize(extseed, sizeof(extseed));
427427
}
428-
#else /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
428+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
429429

430+
#if defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
430431
MLD_INTERNAL_API
431432
void mld_poly_uniform_eta(mld_poly *r, const uint8_t seed[MLDSA_CRHBYTES],
432433
uint8_t nonce)
@@ -482,13 +483,14 @@ void mld_poly_uniform_eta(mld_poly *r, const uint8_t seed[MLDSA_CRHBYTES],
482483
mld_zeroize(buf, sizeof(buf));
483484
mld_zeroize(extseed, sizeof(extseed));
484485
}
485-
#endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY */
486+
#endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
486487

487488
#define MLD_POLY_UNIFORM_GAMMA1_NBLOCKS \
488489
((MLDSA_POLYZ_PACKEDBYTES + MLD_STREAM256_BLOCKBYTES - 1) / \
489490
MLD_STREAM256_BLOCKBYTES)
490491

491-
#if MLD_CONFIG_PARAMETER_SET == 65 || defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
492+
#if MLD_CONFIG_PARAMETER_SET == 65 || \
493+
defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
492494
MLD_INTERNAL_API
493495
void mld_poly_uniform_gamma1(mld_poly *a, const uint8_t seed[MLDSA_CRHBYTES],
494496
uint16_t nonce)
@@ -516,10 +518,11 @@ void mld_poly_uniform_gamma1(mld_poly *a, const uint8_t seed[MLDSA_CRHBYTES],
516518
mld_zeroize(buf, sizeof(buf));
517519
mld_zeroize(extseed, sizeof(extseed));
518520
}
519-
#endif /* MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_SERIAL_FIPS202_ONLY */
521+
#endif /* MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_SERIAL_FIPS202_ONLY || \
522+
MLD_UNIT_TEST */
520523

521524

522-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
525+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
523526
MLD_INTERNAL_API
524527
void mld_poly_uniform_gamma1_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
525528
mld_poly *r3,
@@ -568,7 +571,7 @@ void mld_poly_uniform_gamma1_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
568571
mld_zeroize(buf, sizeof(buf));
569572
mld_zeroize(extseed, sizeof(extseed));
570573
}
571-
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
574+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
572575

573576
MLD_INTERNAL_API
574577
void mld_poly_challenge(mld_poly *c, const uint8_t seed[MLDSA_CTILDEBYTES])

mldsa/src/poly_kl.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ __contract__(
9292
ensures(array_bound(b->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))
9393
);
9494

95-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
95+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
9696
#define mld_poly_uniform_eta_4x MLD_NAMESPACE_KL(poly_uniform_eta_4x)
9797
/*************************************************
9898
* Name: mld_poly_uniform_eta
@@ -132,9 +132,9 @@ __contract__(
132132
ensures(array_abs_bound(r2->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
133133
ensures(array_abs_bound(r3->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
134134
);
135-
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
135+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
136136

137-
#if defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
137+
#if defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
138138
#define mld_poly_uniform_eta MLD_NAMESPACE_KL(poly_uniform_eta)
139139
/*************************************************
140140
* Name: mld_poly_uniform_eta
@@ -157,9 +157,10 @@ __contract__(
157157
assigns(memory_slice(r, sizeof(mld_poly)))
158158
ensures(array_abs_bound(r->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
159159
);
160-
#endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY */
160+
#endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
161161

162-
#if MLD_CONFIG_PARAMETER_SET == 65 || defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
162+
#if MLD_CONFIG_PARAMETER_SET == 65 || \
163+
defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
163164
#define mld_poly_uniform_gamma1 MLD_NAMESPACE_KL(poly_uniform_gamma1)
164165
/*************************************************
165166
* Name: mld_poly_uniform_gamma1
@@ -182,9 +183,10 @@ __contract__(
182183
assigns(memory_slice(a, sizeof(mld_poly)))
183184
ensures(array_bound(a->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
184185
);
185-
#endif /* MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_SERIAL_FIPS202_ONLY */
186+
#endif /* MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_SERIAL_FIPS202_ONLY || \
187+
MLD_UNIT_TEST */
186188

187-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
189+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
188190
#define mld_poly_uniform_gamma1_4x MLD_NAMESPACE_KL(poly_uniform_gamma1_4x)
189191
/*************************************************
190192
* Name: mld_poly_uniform_gamma1_4x
@@ -219,7 +221,7 @@ __contract__(
219221
ensures(array_bound(r2->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
220222
ensures(array_bound(r3->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
221223
);
222-
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
224+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY || MLD_UNIT_TEST */
223225

224226
#define mld_poly_challenge MLD_NAMESPACE_KL(poly_challenge)
225227
/*************************************************

mldsa/src/symmetric.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "common.h"
1111

1212
#include MLD_FIPS202_HEADER_FILE
13-
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
13+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY) || defined(MLD_UNIT_TEST)
1414
#include MLD_FIPS202X4_HEADER_FILE
1515
#endif
1616

scripts/autogen

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,6 +1817,7 @@ def get_config_options():
18171817
"MLD_CONFIG_XXX",
18181818
"MLD_CONFIG_API_CONSTANTS_ONLY",
18191819
"MLD_PREHASH_",
1820+
"MLD_UNIT_TEST",
18201821
]
18211822

18221823
return configs

test/mk/components.mk

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ $(MLDSA87_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87
3535

3636
# Unit test object files - same sources but with MLD_STATIC_TESTABLE=
3737
MLDSA44_UNIT_OBJS = $(call MAKE_OBJS,$(MLDSA44_DIR)/unit,$(SOURCES) $(FIPS202_SRCS))
38-
$(MLDSA44_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
38+
$(MLDSA44_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=44 -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
3939
MLDSA65_UNIT_OBJS = $(call MAKE_OBJS,$(MLDSA65_DIR)/unit,$(SOURCES) $(FIPS202_SRCS))
40-
$(MLDSA65_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
40+
$(MLDSA65_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=65 -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
4141
MLDSA87_UNIT_OBJS = $(call MAKE_OBJS,$(MLDSA87_DIR)/unit,$(SOURCES) $(FIPS202_SRCS))
42-
$(MLDSA87_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
42+
$(MLDSA87_UNIT_OBJS): CFLAGS += -DMLD_CONFIG_PARAMETER_SET=87 -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
4343

4444
# Alloc test object files - same sources but with custom alloc config
4545
MLDSA44_ALLOC_OBJS = $(call MAKE_OBJS,$(MLDSA44_DIR)/alloc,$(SOURCES) $(FIPS202_SRCS))
@@ -82,14 +82,14 @@ $(MLDSA44_DIR)/test/src/test_alloc.c.o: CFLAGS += -DMLD_CONFIG_FILE=\"../test/co
8282
$(MLDSA65_DIR)/test/src/test_alloc.c.o: CFLAGS += -DMLD_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
8383
$(MLDSA87_DIR)/test/src/test_alloc.c.o: CFLAGS += -DMLD_CONFIG_FILE=\"../test/configs/test_alloc_config.h\"
8484

85-
$(MLDSA44_DIR)/bin/test_unit44: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
86-
$(MLDSA65_DIR)/bin/test_unit65: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
87-
$(MLDSA87_DIR)/bin/test_unit87: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
85+
$(MLDSA44_DIR)/bin/test_unit44: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
86+
$(MLDSA65_DIR)/bin/test_unit65: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
87+
$(MLDSA87_DIR)/bin/test_unit87: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
8888

8989
# Unit library object files compiled with MLD_STATIC_TESTABLE=
90-
$(MLDSA44_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
91-
$(MLDSA65_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
92-
$(MLDSA87_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -Wno-missing-prototypes
90+
$(MLDSA44_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
91+
$(MLDSA65_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
92+
$(MLDSA87_DIR)/unit_%: CFLAGS += -DMLD_STATIC_TESTABLE= -DMLD_UNIT_TEST -Wno-missing-prototypes
9393

9494

9595
$(MLDSA44_DIR)/bin/bench_mldsa44: $(MLDSA44_DIR)/test/hal/hal.c.o

test/src/test_unit.c

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
#endif
2121
#endif /* !NUM_RANDOM_TESTS */
2222

23+
#ifndef NUM_RANDOM_TESTS_REJ_UNIFORM
24+
#ifdef MLDSA_DEBUG
25+
#define NUM_RANDOM_TESTS_REJ_UNIFORM 100
26+
#else
27+
#define NUM_RANDOM_TESTS_REJ_UNIFORM 1000
28+
#endif
29+
#endif /* !NUM_RANDOM_TESTS_REJ_UNIFORM */
30+
2331
#define CHECK(x) \
2432
do \
2533
{ \
@@ -581,6 +589,99 @@ static int test_backend_units(void)
581589
MLD_USE_NATIVE_POLYVECL_POINTWISE_ACC_MONTGOMERY_L7 || \
582590
MLD_USE_NATIVE_POLYZ_UNPACK_17 || MLD_USE_NATIVE_POLYZ_UNPACK_19 */
583591

592+
static int test_poly_uniform_gamma1_consistency(void)
593+
{
594+
mld_poly r0_x4, r1_x4, r2_x4, r3_x4, r0_x1, r1_x1, r2_x1, r3_x1;
595+
MLD_ALIGN uint8_t seed[MLDSA_CRHBYTES];
596+
uint16_t nonce0, nonce1, nonce2, nonce3;
597+
int i;
598+
for (i = 0; i < NUM_RANDOM_TESTS_REJ_UNIFORM; i++)
599+
{
600+
randombytes(seed, MLDSA_CRHBYTES);
601+
randombytes((uint8_t *)&nonce0, sizeof(uint16_t));
602+
randombytes((uint8_t *)&nonce1, sizeof(uint16_t));
603+
randombytes((uint8_t *)&nonce2, sizeof(uint16_t));
604+
randombytes((uint8_t *)&nonce3, sizeof(uint16_t));
605+
/* Call 4x version */
606+
mld_poly_uniform_gamma1_4x(&r0_x4, &r1_x4, &r2_x4, &r3_x4, seed, nonce0,
607+
nonce1, nonce2, nonce3);
608+
/* Call scalar version 4 times */
609+
mld_poly_uniform_gamma1(&r0_x1, seed, nonce0);
610+
mld_poly_uniform_gamma1(&r1_x1, seed, nonce1);
611+
mld_poly_uniform_gamma1(&r2_x1, seed, nonce2);
612+
mld_poly_uniform_gamma1(&r3_x1, seed, nonce3);
613+
614+
CHECK(memcmp(r0_x4.coeffs, r0_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
615+
CHECK(memcmp(r1_x4.coeffs, r1_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
616+
CHECK(memcmp(r2_x4.coeffs, r2_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
617+
CHECK(memcmp(r3_x4.coeffs, r3_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
618+
}
619+
return 0;
620+
}
621+
622+
static int test_poly_uniform_consistency(void)
623+
{
624+
mld_poly r0_x4, r1_x4, r2_x4, r3_x4, r0_x1, r1_x1, r2_x1, r3_x1;
625+
MLD_ALIGN uint8_t seed[4][MLD_ALIGN_UP(MLDSA_SEEDBYTES + 2)];
626+
int i, j;
627+
628+
for (i = 0; i < NUM_RANDOM_TESTS_REJ_UNIFORM; i++)
629+
{
630+
for (j = 0; j < 4; j++)
631+
{
632+
randombytes(seed[j], MLDSA_SEEDBYTES + 2);
633+
}
634+
635+
/* Call 4x version */
636+
mld_poly_uniform_4x(&r0_x4, &r1_x4, &r2_x4, &r3_x4, seed);
637+
638+
/* Call scalar version 4 times */
639+
mld_poly_uniform(&r0_x1, seed[0]);
640+
mld_poly_uniform(&r1_x1, seed[1]);
641+
mld_poly_uniform(&r2_x1, seed[2]);
642+
mld_poly_uniform(&r3_x1, seed[3]);
643+
644+
CHECK(memcmp(r0_x4.coeffs, r0_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
645+
CHECK(memcmp(r1_x4.coeffs, r1_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
646+
CHECK(memcmp(r2_x4.coeffs, r2_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
647+
CHECK(memcmp(r3_x4.coeffs, r3_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
648+
}
649+
return 0;
650+
}
651+
652+
static int test_poly_uniform_eta_consistency(void)
653+
{
654+
mld_poly r0_x4, r1_x4, r2_x4, r3_x4, r0_x1, r1_x1, r2_x1, r3_x1;
655+
MLD_ALIGN uint8_t seed[MLDSA_CRHBYTES];
656+
uint8_t nonce0, nonce1, nonce2, nonce3;
657+
int i;
658+
659+
for (i = 0; i < NUM_RANDOM_TESTS_REJ_UNIFORM; i++)
660+
{
661+
randombytes(seed, MLDSA_CRHBYTES);
662+
randombytes(&nonce0, sizeof(uint8_t));
663+
randombytes(&nonce1, sizeof(uint8_t));
664+
randombytes(&nonce2, sizeof(uint8_t));
665+
randombytes(&nonce3, sizeof(uint8_t));
666+
667+
/* Call 4x version */
668+
mld_poly_uniform_eta_4x(&r0_x4, &r1_x4, &r2_x4, &r3_x4, seed, nonce0,
669+
nonce1, nonce2, nonce3);
670+
671+
/* Call scalar version 4 times */
672+
mld_poly_uniform_eta(&r0_x1, seed, nonce0);
673+
mld_poly_uniform_eta(&r1_x1, seed, nonce1);
674+
mld_poly_uniform_eta(&r2_x1, seed, nonce2);
675+
mld_poly_uniform_eta(&r3_x1, seed, nonce3);
676+
677+
CHECK(memcmp(r0_x4.coeffs, r0_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
678+
CHECK(memcmp(r1_x4.coeffs, r1_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
679+
CHECK(memcmp(r2_x4.coeffs, r2_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
680+
CHECK(memcmp(r3_x4.coeffs, r3_x1.coeffs, MLDSA_N * sizeof(int32_t)) == 0);
681+
}
682+
return 0;
683+
}
684+
584685
int main(void)
585686
{
586687
/* WARNING: Test-only
@@ -612,6 +713,9 @@ int main(void)
612713
MLD_USE_NATIVE_POLYVECL_POINTWISE_ACC_MONTGOMERY_L7 || \
613714
MLD_USE_NATIVE_POLYZ_UNPACK_17 || MLD_USE_NATIVE_POLYZ_UNPACK_19 */
614715

716+
CHECK(test_poly_uniform_gamma1_consistency() == 0);
717+
CHECK(test_poly_uniform_eta_consistency() == 0);
718+
CHECK(test_poly_uniform_consistency() == 0);
615719

616720
return 0;
617721
}

0 commit comments

Comments
 (0)