From ac3b42f8e0f10fb4bc194bfcf570dea95b007828 Mon Sep 17 00:00:00 2001 From: willieyz Date: Mon, 8 Jun 2026 15:36:31 +0800 Subject: [PATCH 1/3] Add rng_fail test support for Windows MSVC mlkem-native already runs tests on Windows via Mingw-w64, but the MSVC/nmake build has no rng_fail test coverage. This commit adds the link rules to Makefile.Microsoft_nmake to enable rng_fail tests against the portable C backend under MSVC. Signed-off-by: willieyz --- Makefile.Microsoft_nmake | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Makefile.Microsoft_nmake b/Makefile.Microsoft_nmake index 4c1a6b549..3aef485bf 100644 --- a/Makefile.Microsoft_nmake +++ b/Makefile.Microsoft_nmake @@ -125,6 +125,21 @@ gen_KAT1024: $(OBJ_FILES_1024) $(MLKEM1024_BUILD_DIR)\test\gen_KAT.obj $(BUILD_D @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\gen_KAT1024 $** /link +# compile RNG fail test for mlkem512 +test_rng_fail512: $(OBJ_FILES_512) $(MLKEM512_BUILD_DIR)\test\test_rng_fail.obj + @if NOT EXIST $(MLKEM512_BUILD_DIR)\bin mkdir $(MLKEM512_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /Fe$(MLKEM512_BUILD_DIR)\bin\test_rng_fail512 $** /link + +# compile RNG fail test for mlkem768 +test_rng_fail768: $(OBJ_FILES_768) $(MLKEM768_BUILD_DIR)\test\test_rng_fail.obj + @if NOT EXIST $(MLKEM768_BUILD_DIR)\bin mkdir $(MLKEM768_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /Fe$(MLKEM768_BUILD_DIR)\bin\test_rng_fail768 $** /link + +# compile RNG fail test for mlkem1024 +test_rng_fail1024: $(OBJ_FILES_1024) $(MLKEM1024_BUILD_DIR)\test\test_rng_fail.obj + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\test_rng_fail1024 $** /link + acvp: acvp_mlkem512 acvp_mlkem768 acvp_mlkem1024 gen_KAT: gen_KAT512 gen_KAT768 gen_KAT1024 @@ -142,7 +157,12 @@ run_func: test_mlkem512 test_mlkem768 test_mlkem1024 $(MLKEM768_BUILD_DIR)\bin\test_mlkem768.exe $(MLKEM1024_BUILD_DIR)\bin\test_mlkem1024.exe -test: run_func run_acvp run_kat +run_rng_fail: test_rng_fail512 test_rng_fail768 test_rng_fail1024 + $(MLKEM512_BUILD_DIR)\bin\test_rng_fail512.exe + $(MLKEM768_BUILD_DIR)\bin\test_rng_fail768.exe + $(MLKEM1024_BUILD_DIR)\bin\test_rng_fail1024.exe + +test: run_func run_rng_fail run_acvp run_kat @echo Everything checks fine! quickcheck: test From 7ce2b43dfadf73342eeeeb677333cef38f196828 Mon Sep 17 00:00:00 2001 From: willieyz Date: Tue, 16 Jun 2026 01:27:40 +0800 Subject: [PATCH 2/3] Add alloc test support for Windows MSVC mlkem-native already runs tests on Windows via Mingw-w64, but the MSVC/nmake build has no alloc test coverage. This commit adds the compile and link rules to Makefile.Microsoft_nmake to enable alloc tests against the portable C backend under MSVC. Signed-off-by: willieyz --- Makefile.Microsoft_nmake | 72 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/Makefile.Microsoft_nmake b/Makefile.Microsoft_nmake index 3aef485bf..96833d6ce 100644 --- a/Makefile.Microsoft_nmake +++ b/Makefile.Microsoft_nmake @@ -2,6 +2,10 @@ CFLAGS = /nologo /O2 /Imlkem /Imlkem/src /Imlkem/src/fips202 /Imlkem/src/fips202/native /Imlkem/src/sys /Imlkem/src/native +ALLOC_CFLAGS = \ + $(CFLAGS) \ + /D MLK_CONFIG_FILE="\"../test/configs/test_alloc_config.h\"" + OBJ_FILES = .\mlkem\*.obj \ .\mlkem\fips202\*.obj @@ -17,6 +21,13 @@ OBJ_FILES_768 = $(MLKEM768_BUILD_DIR)\mlkem\*.obj \ OBJ_FILES_1024 = $(MLKEM1024_BUILD_DIR)\mlkem\*.obj \ $(MLKEM1024_BUILD_DIR)\mlkem\fips202\*.obj +OBJ_FILES_512_ALLOC = $(MLKEM512_BUILD_DIR)\alloc\mlkem\*.obj \ + $(MLKEM512_BUILD_DIR)\alloc\mlkem\fips202\*.obj +OBJ_FILES_768_ALLOC = $(MLKEM768_BUILD_DIR)\alloc\mlkem\*.obj \ + $(MLKEM768_BUILD_DIR)\alloc\mlkem\fips202\*.obj +OBJ_FILES_1024_ALLOC = $(MLKEM1024_BUILD_DIR)\alloc\mlkem\*.obj \ + $(MLKEM1024_BUILD_DIR)\alloc\mlkem\fips202\*.obj + # NOTE: We currently only build code for non-opt code, as we haven't yet made the assembly compatible on Windows !IFNDEF OPT OPT = 0 @@ -65,6 +76,45 @@ OPT = 0 @if NOT EXIST $(MLKEM1024_BUILD_DIR)\test mkdir $(MLKEM1024_BUILD_DIR)\test $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\test\ $< +# compilation for mlkem512 alloc test +{mlkem\src}.c{$(MLKEM512_BUILD_DIR)\alloc\mlkem}.obj:: + @if NOT EXIST $(MLKEM512_BUILD_DIR)\alloc\mlkem mkdir $(MLKEM512_BUILD_DIR)\alloc\mlkem + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /c /Fo$(MLKEM512_BUILD_DIR)\alloc\mlkem\ $< + +{mlkem\src\fips202}.c{$(MLKEM512_BUILD_DIR)\alloc\mlkem\fips202}.obj:: + @if NOT EXIST $(MLKEM512_BUILD_DIR)\alloc\mlkem\fips202 mkdir $(MLKEM512_BUILD_DIR)\alloc\mlkem\fips202 + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /c /Fo$(MLKEM512_BUILD_DIR)\alloc\mlkem\fips202\ $< + +{test\src}.c{$(MLKEM512_BUILD_DIR)\test\alloc}.obj:: + @if NOT EXIST $(MLKEM512_BUILD_DIR)\test\alloc mkdir $(MLKEM512_BUILD_DIR)\test\alloc + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /c /Fo$(MLKEM512_BUILD_DIR)\test\alloc\ $< + +# compilation for mlkem768 alloc test +{mlkem\src}.c{$(MLKEM768_BUILD_DIR)\alloc\mlkem}.obj:: + @if NOT EXIST $(MLKEM768_BUILD_DIR)\alloc\mlkem mkdir $(MLKEM768_BUILD_DIR)\alloc\mlkem + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /c /Fo$(MLKEM768_BUILD_DIR)\alloc\mlkem\ $< + +{mlkem\src\fips202}.c{$(MLKEM768_BUILD_DIR)\alloc\mlkem\fips202}.obj:: + @if NOT EXIST $(MLKEM768_BUILD_DIR)\alloc\mlkem\fips202 mkdir $(MLKEM768_BUILD_DIR)\alloc\mlkem\fips202 + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /c /Fo$(MLKEM768_BUILD_DIR)\alloc\mlkem\fips202\ $< + +{test\src}.c{$(MLKEM768_BUILD_DIR)\test\alloc}.obj:: + @if NOT EXIST $(MLKEM768_BUILD_DIR)\test\alloc mkdir $(MLKEM768_BUILD_DIR)\test\alloc + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /c /Fo$(MLKEM768_BUILD_DIR)\test\alloc\ $< + +# compilation for mlkem1024 alloc test +{mlkem\src}.c{$(MLKEM1024_BUILD_DIR)\alloc\mlkem}.obj:: + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\alloc\mlkem mkdir $(MLKEM1024_BUILD_DIR)\alloc\mlkem + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\alloc\mlkem\ $< + +{mlkem\src\fips202}.c{$(MLKEM1024_BUILD_DIR)\alloc\mlkem\fips202}.obj:: + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\alloc\mlkem\fips202 mkdir $(MLKEM1024_BUILD_DIR)\alloc\mlkem\fips202 + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\alloc\mlkem\fips202\ $< + +{test\src}.c{$(MLKEM1024_BUILD_DIR)\test\alloc}.obj:: + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\test\alloc mkdir $(MLKEM1024_BUILD_DIR)\test\alloc + $(CC) $(ALLOC_CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\test\alloc\ $< + # compilation of acvp test for mlkem512 {test\acvp}.c{$(MLKEM512_BUILD_DIR)\test\acvp}.obj:: @if NOT EXIST $(MLKEM512_BUILD_DIR)\test\acvp mkdir $(MLKEM512_BUILD_DIR)\test\acvp @@ -140,6 +190,21 @@ test_rng_fail1024: $(OBJ_FILES_1024) $(MLKEM1024_BUILD_DIR)\test\test_rng_fail.o @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\test_rng_fail1024 $** /link +# compile alloc test for mlkem512 +test_alloc512: $(OBJ_FILES_512_ALLOC) $(MLKEM512_BUILD_DIR)\test\alloc\test_alloc.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM512_BUILD_DIR)\bin mkdir $(MLKEM512_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /Fe$(MLKEM512_BUILD_DIR)\bin\test_alloc512 $** /link + +# compile alloc test for mlkem768 +test_alloc768: $(OBJ_FILES_768_ALLOC) $(MLKEM768_BUILD_DIR)\test\alloc\test_alloc.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM768_BUILD_DIR)\bin mkdir $(MLKEM768_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /Fe$(MLKEM768_BUILD_DIR)\bin\test_alloc768 $** /link + +# compile alloc test for mlkem1024 +test_alloc1024: $(OBJ_FILES_1024_ALLOC) $(MLKEM1024_BUILD_DIR)\test\alloc\test_alloc.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\test_alloc1024 $** /link + acvp: acvp_mlkem512 acvp_mlkem768 acvp_mlkem1024 gen_KAT: gen_KAT512 gen_KAT768 gen_KAT1024 @@ -162,7 +227,12 @@ run_rng_fail: test_rng_fail512 test_rng_fail768 test_rng_fail1024 $(MLKEM768_BUILD_DIR)\bin\test_rng_fail768.exe $(MLKEM1024_BUILD_DIR)\bin\test_rng_fail1024.exe -test: run_func run_rng_fail run_acvp run_kat +run_alloc: test_alloc512 test_alloc768 test_alloc1024 + $(MLKEM512_BUILD_DIR)\bin\test_alloc512.exe + $(MLKEM768_BUILD_DIR)\bin\test_alloc768.exe + $(MLKEM1024_BUILD_DIR)\bin\test_alloc1024.exe + +test: run_func run_rng_fail run_alloc run_acvp run_kat @echo Everything checks fine! quickcheck: test From 4b219189577cccfcd947e82632fe57ac07620160 Mon Sep 17 00:00:00 2001 From: willieyz Date: Wed, 17 Jun 2026 01:43:47 +0800 Subject: [PATCH 3/3] Add wycheproof test support for Windows MSVC mlkem-native already runs tests on Windows via Mingw-w64, but the MSVC/nmake build has no wycheproof test coverage. This commit adds the compile and link rules to Makefile.Microsoft_nmake, also add the run_wycheproof target, to enable wycheproof tests against the portable C backend under MSVC. Signed-off-by: willieyz --- Makefile.Microsoft_nmake | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/Makefile.Microsoft_nmake b/Makefile.Microsoft_nmake index 96833d6ce..44dd1eeb3 100644 --- a/Makefile.Microsoft_nmake +++ b/Makefile.Microsoft_nmake @@ -130,6 +130,21 @@ OPT = 0 @if NOT EXIST $(MLKEM1024_BUILD_DIR)\test\acvp mkdir $(MLKEM1024_BUILD_DIR)\test\acvp $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\test\acvp\ $< +# compilation of wycheproof test for mlkem512 +{test\wycheproof}.c{$(MLKEM512_BUILD_DIR)\test\wycheproof}.obj:: + @if NOT EXIST $(MLKEM512_BUILD_DIR)\test\wycheproof mkdir $(MLKEM512_BUILD_DIR)\test\wycheproof + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /c /Fo$(MLKEM512_BUILD_DIR)\test\wycheproof\ $< + +# compilation of wycheproof test for mlkem768 +{test\wycheproof}.c{$(MLKEM768_BUILD_DIR)\test\wycheproof}.obj:: + @if NOT EXIST $(MLKEM768_BUILD_DIR)\test\wycheproof mkdir $(MLKEM768_BUILD_DIR)\test\wycheproof + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /c /Fo$(MLKEM768_BUILD_DIR)\test\wycheproof\ $< + +# compilation of wycheproof test for mlkem1024 +{test\wycheproof}.c{$(MLKEM1024_BUILD_DIR)\test\wycheproof}.obj:: + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\test\wycheproof mkdir $(MLKEM1024_BUILD_DIR)\test\wycheproof + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /c /Fo$(MLKEM1024_BUILD_DIR)\test\wycheproof\ $< + # compile functional test for mlkem512 test_mlkem512: $(OBJ_FILES_512) $(MLKEM512_BUILD_DIR)\test\test_mlkem.obj $(BUILD_DIR)\randombytes\notrandombytes.obj @if NOT EXIST $(MLKEM512_BUILD_DIR)\bin mkdir $(MLKEM512_BUILD_DIR)\bin @@ -205,8 +220,25 @@ test_alloc1024: $(OBJ_FILES_1024_ALLOC) $(MLKEM1024_BUILD_DIR)\test\alloc\test_a @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\test_alloc1024 $** /link +# compile wycheproof test for mlkem512 +wycheproof_mlkem512: $(OBJ_FILES_512) $(MLKEM512_BUILD_DIR)\test\wycheproof\wycheproof_mlkem.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM512_BUILD_DIR)\bin mkdir $(MLKEM512_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=512 /Fe$(MLKEM512_BUILD_DIR)\bin\wycheproof_mlkem512 $** /link + +# compile wycheproof test for mlkem768 +wycheproof_mlkem768: $(OBJ_FILES_768) $(MLKEM768_BUILD_DIR)\test\wycheproof\wycheproof_mlkem.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM768_BUILD_DIR)\bin mkdir $(MLKEM768_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=768 /Fe$(MLKEM768_BUILD_DIR)\bin\wycheproof_mlkem768 $** /link + +# compile wycheproof test for mlkem1024 +wycheproof_mlkem1024: $(OBJ_FILES_1024) $(MLKEM1024_BUILD_DIR)\test\wycheproof\wycheproof_mlkem.obj $(BUILD_DIR)\randombytes\notrandombytes.obj + @if NOT EXIST $(MLKEM1024_BUILD_DIR)\bin mkdir $(MLKEM1024_BUILD_DIR)\bin + $(CC) $(CFLAGS) /D MLK_CONFIG_PARAMETER_SET=1024 /Fe$(MLKEM1024_BUILD_DIR)\bin\wycheproof_mlkem1024 $** /link + acvp: acvp_mlkem512 acvp_mlkem768 acvp_mlkem1024 +wycheproof: wycheproof_mlkem512 wycheproof_mlkem768 wycheproof_mlkem1024 + gen_KAT: gen_KAT512 gen_KAT768 gen_KAT1024 run_kat: gen_KAT @@ -217,6 +249,9 @@ run_kat: gen_KAT run_acvp: acvp python test/acvp/acvp_client.py +run_wycheproof: wycheproof + python test/wycheproof/wycheproof_client.py + run_func: test_mlkem512 test_mlkem768 test_mlkem1024 $(MLKEM512_BUILD_DIR)\bin\test_mlkem512.exe $(MLKEM768_BUILD_DIR)\bin\test_mlkem768.exe @@ -232,7 +267,7 @@ run_alloc: test_alloc512 test_alloc768 test_alloc1024 $(MLKEM768_BUILD_DIR)\bin\test_alloc768.exe $(MLKEM1024_BUILD_DIR)\bin\test_alloc1024.exe -test: run_func run_rng_fail run_alloc run_acvp run_kat +test: run_func run_rng_fail run_alloc run_acvp run_kat run_wycheproof @echo Everything checks fine! quickcheck: test