-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathMakefile
More file actions
112 lines (93 loc) · 4.02 KB
/
Makefile
File metadata and controls
112 lines (93 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
ARCHITECTURE ?= arm-m4
PARAMETER_SET ?= 65
IMPLEMENTATION_TYPE ?= ref
COMMON = $(ARCHITECTURE)/$(IMPLEMENTATION_TYPE)/common
IMPLEMENTATION = $(ARCHITECTURE)/$(IMPLEMENTATION_TYPE)/ml_dsa_$(PARAMETER_SET)
JASMINC ?= jasminc
JASMINCT ?= jasmin-ct
# --------------------------------------------------------------------
# Assembly generation
# --------------------------------------------------------------------
IMPLEMENTATION_SOURCES = $(shell find $(IMPLEMENTATION)/ -type f -name '*.jinc') \
$(shell find $(COMMON)/ -type f -name '*.jinc')
OUTPUT_FILE_NAME = ml_dsa_$(PARAMETER_SET)_$(IMPLEMENTATION_TYPE)_$(ARCHITECTURE)
$(OUTPUT_FILE_NAME).s: $(IMPLEMENTATION)/ml_dsa.jazz $(IMPLEMENTATION_SOURCES)
env JASMINPATH="Common=$(COMMON)" $(JASMINC) -arch=$(ARCHITECTURE) $(JASMINC_FLAGS) -o $@ $<
# --------------------------------------------------------------------
# KAT testing and safety checking
# --------------------------------------------------------------------
# For x86-64: Generate a shared-library to pass to ctypes.
$(OUTPUT_FILE_NAME).so: $(OUTPUT_FILE_NAME).s
$(CC) $^ -fPIC -shared -o $@
# For ARM-M4: Generate a cross-compiled executable to be called by python.
CROSS_COMPILER ?= arm-none-linux-gnueabihf-gcc
$(OUTPUT_FILE_NAME).o: arm-m4/kat_test_wrapper.c $(OUTPUT_FILE_NAME).s
$(CROSS_COMPILER) \
-DKEYGEN=ml_dsa_$(PARAMETER_SET)_keygen \
-DSIGN=ml_dsa_$(PARAMETER_SET)_sign \
-DVERIFY=ml_dsa_$(PARAMETER_SET)_verify \
-Wall -I$(IMPLEMENTATION) $^ -o $@ -no-pie
TESTING_WRAPPER :=
ifeq ($(ARCHITECTURE), x86-64)
TESTING_WRAPPER = $(OUTPUT_FILE_NAME).so
else
TESTING_WRAPPER = $(OUTPUT_FILE_NAME).o
endif
.PHONY: test
test: $(TESTING_WRAPPER)
python3 -m pytest \
--parameter-set=$(PARAMETER_SET) \
--architecture=$(ARCHITECTURE) \
--implementation-type=$(IMPLEMENTATION_TYPE) \
tests/
.PHONY: nist-drbg-kat-test
nist-drbg-kat-test: $(TESTING_WRAPPER)
python3 -m pytest \
--parameter-set=$(PARAMETER_SET) \
--architecture=$(ARCHITECTURE) \
--implementation-type=$(IMPLEMENTATION_TYPE) \
tests/test_nist_drbg_kats.py
.PHONY: nist-drbg-kat-test
random-nist-drbg-kat-test: $(TESTING_WRAPPER)
python3 -m pytest \
--parameter-set=$(PARAMETER_SET) \
--architecture=$(ARCHITECTURE) \
--implementation-type=$(IMPLEMENTATION_TYPE) \
tests/test_random_nist_drbg_kat.py
.PHONY: wycheproof-test
wycheproof-test: $(TESTING_WRAPPER)
python3 -m pytest \
--parameter-set=$(PARAMETER_SET) \
--architecture=$(ARCHITECTURE) \
--implementation-type=$(IMPLEMENTATION_TYPE) \
tests/test_wycheproof.py
.PHONY: run-interpreter
run-interpreter: $(IMPLEMENTATION)/example.jazz $(IMPLEMENTATION)/ml_dsa.jazz
env JASMINPATH="Common=$(COMMON)" $(JASMINC) -arch=$(ARCHITECTURE) $< | grep 'true'
# --------------------------------------------------------------------
# CT and SCT checking
# --------------------------------------------------------------------
.PHONY: check-ct
check-ct: $(IMPLEMENTATION)/ml_dsa.jazz
env JASMINPATH="Common=$(COMMON)" $(JASMINCT) --arch=$(ARCHITECTURE) --doit $(JASMINCT_FLAGS) $^
.PHONY: check-sct
check-sct: $(IMPLEMENTATION)/ml_dsa.jazz
env JASMINPATH="Common=$(COMMON)" $(JASMINCT) $(JASMINCT_FLAGS) --speculative $^
# --------------------------------------------------------------------
# Benchmarking
# --------------------------------------------------------------------
bench_jasmin.o: $(OUTPUT_FILE_NAME).s bench/bench_jasmin.c bench/notrandombytes.c $(IMPLEMENTATION)/api.h
$(CC) -Wall -Werror \
-DIMPLEMENTATION_TYPE=$(IMPLEMENTATION_TYPE) \
-DKEYGEN=ml_dsa_$(PARAMETER_SET)_keygen \
-DSIGN=ml_dsa_$(PARAMETER_SET)_sign \
-DVERIFY=ml_dsa_$(PARAMETER_SET)_verify \
$^ -I $(IMPLEMENTATION) -o $@
bench_pqclean_65_avx2.o: bench/bench_pqclean_65_avx2.c bench/notrandombytes.c bench/pqclean_ml_dsa_65_avx2/libml-dsa-65_avx2.a
$(CC) -Wall -Werror $^ -o $@
bench/pqclean_ml_dsa_65_avx2/libml-dsa-65_avx2.a:
$(MAKE) -C bench/pqclean_ml_dsa_65_avx2
# --------------------------------------------------------------------
.PHONY: clean
clean:
rm -fr *.s *.so *.o *.core