Skip to content

Commit 65a31fa

Browse files
authored
Merge pull request #26 from itzmeanjan/conform-to-ascon-ipd
Conform to Ascon Draft Standard
2 parents 626cc91 + a568295 commit 65a31fa

File tree

97 files changed

+10225
-43432
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+10225
-43432
lines changed

.clang-format

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ BreakConstructorInitializersBeforeComma: false
7777
BreakConstructorInitializers: BeforeComma
7878
BreakAfterJavaFieldAnnotations: false
7979
BreakStringLiterals: true
80-
ColumnLimit: 120
80+
ColumnLimit: 160
8181
CommentPragmas: '^ IWYU pragma:'
8282
QualifierAlignment: Leave
8383
CompactNamespaces: false

.github/workflows/test_ci.yml

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
name: Test Ascon Cipher Suite on CI
1+
# Taken from https://github.com/itzmeanjan/ml-kem/blob/61cf680b1c0e2590bd7b650c07cd477e90cab46d/.github/workflows/test_ci.yml
2+
name: Test Ascon LwC Cipher Suite i.e. NIST SP 800-232
23

34
on:
45
push:
@@ -11,28 +12,53 @@ jobs:
1112
runs-on: ${{matrix.os}}
1213
strategy:
1314
matrix:
14-
os: [ubuntu-latest, # x86_64
15-
macos-14 # Apple Silicon
16-
]
15+
os: [ubuntu-latest, macos-latest]
16+
compiler: [g++, clang++]
17+
build_type: [debug, release]
18+
test_type: [standard, asan, ubsan]
19+
max-parallel: 4
1720

1821
steps:
19-
- uses: actions/checkout@v4
20-
- name: Setup Google-Test
21-
run: |
22-
pushd ~
23-
git clone https://github.com/google/googletest.git -b v1.14.0
24-
pushd googletest
25-
mkdir build
26-
pushd build
27-
cmake .. -DBUILD_GMOCK=OFF
28-
make
29-
sudo make install
30-
popd
31-
popd
32-
popd
33-
- name: Execute Tests on ${{matrix.os}}
34-
run: make -j
35-
- name: Execute Tests with AddressSanitizer on ${{matrix.os}}
36-
run: make asan_test -j
37-
- name: Execute Tests with UndefinedBehaviourSanitizer on ${{matrix.os}}
38-
run: make ubsan_test -j
22+
- uses: actions/checkout@v4
23+
24+
- name: Setup Google Test
25+
uses: Bacondish2023/setup-googletest@v1
26+
with:
27+
tag: v1.15.2
28+
29+
30+
- name: Build and Test (${{ matrix.compiler }}, ${{ matrix.build_type }}, ${{ matrix.test_type }})
31+
run: |
32+
CXX=${{ matrix.compiler }}
33+
if [[ ${{ matrix.test_type }} == "standard" ]]; then
34+
make test -j 2>&1 | tee build.log
35+
else
36+
make ${{ matrix.build_type }}_${{ matrix.test_type }}_test -j 2>&1 | tee build.log
37+
fi
38+
if [ $? -ne 0 ]; then
39+
echo "Build or Test Failed! See build.log for details."
40+
exit 1
41+
fi
42+
43+
- name: Upload Build Log
44+
uses: actions/upload-artifact@v3
45+
with:
46+
name: build-log-${{ matrix.compiler }}-${{ matrix.build_type }}-${{ matrix.test_type }}
47+
path: build.log
48+
49+
50+
- name: Run Examples
51+
if: ${{ matrix.test_type == 'standard' && matrix.build_type == 'release' }}
52+
run: |
53+
CXX=${{ matrix.compiler }} make example -j 2>&1 | tee example.log
54+
if [ $? -ne 0 ]; then
55+
echo "Example execution Failed! See example.log for details."
56+
exit 1
57+
fi
58+
59+
- name: Upload Example Log (if failed)
60+
if: ${{ steps.Run_Examples.outcome != 'success' && matrix.test_type == 'standard' && matrix.build_type == 'release' }}
61+
uses: actions/upload-artifact@v3
62+
with:
63+
name: example-log-${{ matrix.compiler }}
64+
path: example.log

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@
44
[submodule "gtest-parallel"]
55
path = gtest-parallel
66
url = https://github.com/google/gtest-parallel.git
7-
[submodule "dudect"]
8-
path = dudect
9-
url = https://github.com/oreparaz/dudect.git

Makefile

Lines changed: 30 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,45 @@
1-
CXX ?= clang++
2-
CXX_FLAGS = -std=c++20
3-
WARN_FLAGS = -Wall -Wextra -pedantic
4-
OPT_FLAGS = -O3 -march=native
5-
LINK_FLAGS = -flto
6-
PERF_DEFS = -DCYCLES_PER_BYTE
7-
ASAN_FLAGS = -g -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address # From https://clang.llvm.org/docs/AddressSanitizer.html
8-
UBSAN_FLAGS = -g -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=undefined # From https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
9-
10-
SRC_DIR = include
11-
SUBTLE_INC_DIR = ./subtle/include
12-
DUDECT_INC_DIR = ./dudect/src
13-
I_FLAGS = -I $(SRC_DIR)
14-
DEP_IFLAGS = -I $(SUBTLE_INC_DIR)
15-
DUDECT_DEP_IFLAGS = $(DEP_IFLAGS) -I $(DUDECT_INC_DIR)
16-
ASCON_SOURCES := $(wildcard $(SRC_DIR)/*.hpp)
17-
BUILD_DIR = build
18-
19-
TEST_DIR = tests
20-
DUDECT_TEST_DIR = $(TEST_DIR)/dudect
21-
TEST_BUILD_DIR := $(BUILD_DIR)/$(TEST_DIR)
22-
ASAN_BUILD_DIR = $(TEST_BUILD_DIR)/asan
23-
UBSAN_BUILD_DIR = $(TEST_BUILD_DIR)/ubsan
24-
DUDECT_BUILD_DIR = $(BUILD_DIR)/dudect
25-
TEST_SOURCES := $(wildcard $(TEST_DIR)/*.cpp)
26-
TEST_HEADERS := $(wildcard $(TEST_DIR)/*.hpp)
27-
DUDECT_TEST_SOURCES := $(wildcard $(DUDECT_TEST_DIR)/*.cpp)
28-
TEST_OBJECTS := $(addprefix $(TEST_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.o,$(TEST_SOURCES))))
29-
ASAN_TEST_OBJECTS := $(addprefix $(ASAN_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.o,$(TEST_SOURCES))))
30-
UBSAN_TEST_OBJECTS := $(addprefix $(UBSAN_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.o,$(TEST_SOURCES))))
31-
TEST_LINK_FLAGS = -lgtest -lgtest_main
32-
TEST_BINARY = $(TEST_BUILD_DIR)/test.out
33-
ASAN_TEST_BINARY = $(ASAN_BUILD_DIR)/test.out
34-
UBSAN_TEST_BINARY = $(UBSAN_BUILD_DIR)/test.out
35-
DUDECT_TEST_BINARIES := $(addprefix $(DUDECT_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.out,$(DUDECT_TEST_SOURCES))))
36-
GTEST_PARALLEL = ./gtest-parallel/gtest-parallel
37-
38-
BENCHMARK_DIR = benchmarks
39-
BENCHMARK_SOURCES := $(wildcard $(BENCHMARK_DIR)/*.cpp)
40-
BENCHMARK_HEADERS := $(wildcard $(BENCHMARK_DIR)/*.hpp)
41-
BENCHMARK_BUILD_DIR := $(BUILD_DIR)/$(BENCHMARK_DIR)
42-
PERF_BUILD_DIR := $(BUILD_DIR)/perfs
43-
BENCHMARK_OBJECTS := $(addprefix $(BENCHMARK_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.o,$(BENCHMARK_SOURCES))))
44-
PERF_OBJECTS := $(addprefix $(PERF_BUILD_DIR)/, $(notdir $(patsubst %.cpp,%.o,$(BENCHMARK_SOURCES))))
45-
BENCHMARK_LINK_FLAGS = -lbenchmark -lbenchmark_main
46-
BENCHMARK_BINARY = $(BENCHMARK_BUILD_DIR)/bench.out
47-
PERF_LINK_FLAGS = -lbenchmark -lbenchmark_main -lpthread -lpfm
48-
PERF_BINARY = $(PERF_BUILD_DIR)/perf.out
49-
50-
all: test
51-
52-
$(BUILD_DIR):
53-
mkdir -p $@
1+
.DEFAULT_GOAL := help
542

55-
$(TEST_BUILD_DIR): $(BUILD_DIR)
56-
mkdir -p $@
3+
# Collects inspiration from https://github.com/0xPolygonMiden/crypto/blob/3909b0199368b13fdfa934a324f984572d521e39/Makefile#L1-L5
4+
# and https://github.com/gtramontina/sourcing/blob/853252ee184c16bc69dd53e8457107d718aca04f/Makefile#L68-L72
5+
.PHONY: help
6+
help:
7+
@for file in $(MAKEFILE_LIST); do \
8+
grep -E '^[a-zA-Z_-]+:.*?## .*$$' $${file} | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}';\
9+
done
5710

58-
$(ASAN_BUILD_DIR): $(TEST_BUILD_DIR)
59-
mkdir -p $@
6011

61-
$(UBSAN_BUILD_DIR): $(TEST_BUILD_DIR)
62-
mkdir -p $@
63-
64-
$(DUDECT_BUILD_DIR): $(TEST_BUILD_DIR)
65-
mkdir -p $@
12+
CXX ?= clang++
13+
CXX_DEFS +=
14+
CXX_FLAGS := -std=c++20
15+
WARN_FLAGS := -Wall -Wextra -Wpedantic
16+
DEBUG_FLAGS := -O1 -g
17+
RELEASE_FLAGS := -O3 -march=native
18+
LINK_OPT_FLAGS := -flto
19+
20+
I_FLAGS := -I ./include
21+
SUBTLE_INC_DIR = ./subtle/include
22+
DEP_IFLAGS := -I $(SUBTLE_INC_DIR)
23+
PERF_DEFS = -DCYCLES_PER_BYTE
6624

67-
$(BENCHMARK_BUILD_DIR): $(BUILD_DIR)
68-
mkdir -p $@
25+
SRC_DIR := include
26+
ASCON_SOURCES := $(shell find $(SRC_DIR) -name '*.hpp')
27+
BUILD_DIR := build
6928

70-
$(PERF_BUILD_DIR): $(BUILD_DIR)
71-
mkdir -p $@
29+
include tests/test.mk
30+
include benches/bench.mk
31+
include examples/example.mk
7232

7333
$(SUBTLE_INC_DIR):
7434
git submodule update --init subtle
7535

7636
$(GTEST_PARALLEL): $(SUBTLE_INC_DIR)
7737
git submodule update --init gtest-parallel
7838

79-
$(DUDECT_INC_DIR): $(GTEST_PARALLEL)
80-
git submodule update --init dudect
81-
82-
$(TEST_BUILD_DIR)/%.o: $(TEST_DIR)/%.cpp $(TEST_BUILD_DIR) $(SUBTLE_INC_DIR)
83-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $(DEP_IFLAGS) -c $< -o $@
84-
85-
$(ASAN_BUILD_DIR)/%.o: $(TEST_DIR)/%.cpp $(ASAN_BUILD_DIR) $(SUBTLE_INC_DIR)
86-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(ASAN_FLAGS) $(I_FLAGS) $(DEP_IFLAGS) -c $< -o $@
87-
88-
$(UBSAN_BUILD_DIR)/%.o: $(TEST_DIR)/%.cpp $(UBSAN_BUILD_DIR) $(SUBTLE_INC_DIR)
89-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(UBSAN_FLAGS) $(I_FLAGS) $(DEP_IFLAGS) -c $< -o $@
90-
91-
$(TEST_BINARY): $(TEST_OBJECTS)
92-
$(CXX) $(OPT_FLAGS) $(LINK_FLAGS) $^ $(TEST_LINK_FLAGS) -o $@
93-
94-
$(ASAN_TEST_BINARY): $(ASAN_TEST_OBJECTS)
95-
$(CXX) $(ASAN_FLAGS) $^ $(TEST_LINK_FLAGS) -o $@
96-
97-
$(UBSAN_TEST_BINARY): $(UBSAN_TEST_OBJECTS)
98-
$(CXX) $(UBSAN_FLAGS) $^ $(TEST_LINK_FLAGS) -o $@
99-
100-
$(DUDECT_BUILD_DIR)/%.out: $(DUDECT_TEST_DIR)/%.cpp $(DUDECT_BUILD_DIR) $(SUBTLE_INC_DIR) $(DUDECT_INC_DIR)
101-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $(DUDECT_DEP_IFLAGS) -lm $(LINK_FLAGS) $< -o $@
102-
103-
test: $(TEST_BINARY) $(GTEST_PARALLEL)
104-
$(GTEST_PARALLEL) $< --print_test_times
105-
106-
asan_test: $(ASAN_TEST_BINARY) $(GTEST_PARALLEL)
107-
$(GTEST_PARALLEL) $< --print_test_times
108-
109-
ubsan_test: $(UBSAN_TEST_BINARY) $(GTEST_PARALLEL)
110-
$(GTEST_PARALLEL) $< --print_test_times
111-
112-
dudect_test_build: $(DUDECT_TEST_BINARIES)
113-
114-
$(BENCHMARK_BUILD_DIR)/%.o: $(BENCHMARK_DIR)/%.cpp $(BENCHMARK_BUILD_DIR)
115-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(I_FLAGS) $(DEP_IFLAGS) -c $< -o $@
116-
117-
$(PERF_BUILD_DIR)/%.o: $(BENCHMARK_DIR)/%.cpp $(PERF_BUILD_DIR)
118-
$(CXX) $(CXX_FLAGS) $(WARN_FLAGS) $(OPT_FLAGS) $(PERF_DEFS) $(I_FLAGS) $(DEP_IFLAGS) -c $< -o $@
119-
120-
$(BENCHMARK_BINARY): $(BENCHMARK_OBJECTS)
121-
$(CXX) $(OPT_FLAGS) $(LINK_FLAGS) $^ $(BENCHMARK_LINK_FLAGS) -o $@
122-
123-
benchmark: $(BENCHMARK_BINARY)
124-
# Must *not* build google-benchmark with libPFM
125-
./$< --benchmark_min_warmup_time=.1 --benchmark_enable_random_interleaving=true --benchmark_repetitions=10 --benchmark_min_time=0.1s --benchmark_counters_tabular=true --benchmark_display_aggregates_only=true
126-
127-
$(PERF_BINARY): $(PERF_OBJECTS)
128-
$(CXX) $(OPT_FLAGS) $(LINK_FLAGS) $^ $(PERF_LINK_FLAGS) -o $@
129-
130-
perf: $(PERF_BINARY)
131-
# Must build google-benchmark with libPFM, follow https://gist.github.com/itzmeanjan/05dc3e946f635d00c5e0b21aae6203a7
132-
./$< --benchmark_min_warmup_time=.1 --benchmark_enable_random_interleaving=true --benchmark_repetitions=10 --benchmark_min_time=0.1s --benchmark_counters_tabular=true --benchmark_display_aggregates_only=true --benchmark_perf_counters=CYCLES
133-
134-
.PHONY: format clean
135-
136-
clean:
39+
.PHONY: clean
40+
clean: ## Remove build directory
13741
rm -rf $(BUILD_DIR)
13842

139-
format: $(ASCON_SOURCES) $(TEST_SOURCES) $(TEST_HEADERS) $(DUDECT_TEST_SOURCES) $(BENCHMARK_SOURCES) $(BENCHMARK_HEADERS)
43+
.PHONY: format
44+
format: $(ASCON_SOURCES) $(TEST_SOURCES) $(TEST_HEADERS) $(BENCHMARK_SOURCES) $(BENCHMARK_HEADERS) $(EXAMPLE_SOURCES) $(EXAMPLE_HEADERS) ## Format source code
14045
clang-format -i $^

0 commit comments

Comments
 (0)