Skip to content

Commit 449b48e

Browse files
committed
Add ct tooling logic
Signed-off-by: Pablo Gutiérrez <pablogf@uma.es>
1 parent 5a8d047 commit 449b48e

17 files changed

Lines changed: 4958 additions & 0 deletions

.github/workflows/ct-tooling.yml

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
name: ct-tooling
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
workflow_dispatch:
8+
9+
jobs:
10+
interactive-inputs:
11+
runs-on: ubuntu-latest
12+
permissions:
13+
contents: write
14+
actions: write
15+
steps:
16+
- name: Example Interactive Inputs Step
17+
id: interactive-inputs
18+
uses: boasiHQ/interactive-inputs@v2
19+
with:
20+
timeout: 300
21+
title: Select algorithm(s) Valgrind-Varlat CT Testing'
22+
interactive: |
23+
fields:
24+
- label: runtime-options
25+
properties:
26+
description: Choose one or more algorithms to execute valgrind-varlat constant-time testing on
27+
display: Select the algorithm(s) to execute valgrind-varlat constant-time testing on
28+
type: multiselect
29+
choices:
30+
- "BIKE-L1"
31+
- "BIKE-L3"
32+
- "BIKE-L5"
33+
- "Classic-McEliece-348864"
34+
- "Classic-McEliece-348864f"
35+
- "Classic-McEliece-460896"
36+
- "Classic-McEliece-460896f"
37+
- "Classic-McEliece-6688128"
38+
- "Classic-McEliece-6688128f"
39+
- "Classic-McEliece-6960119"
40+
- "Classic-McEliece-6960119f"
41+
- "Classic-McEliece-8192128"
42+
- "Classic-McEliece-8192128f"
43+
- "Kyber512"
44+
- "Kyber768"
45+
- "Kyber1024"
46+
- "ML-KEM-512"
47+
- "ML-KEM-768"
48+
- "ML-KEM-1024"
49+
- "sntrup761"
50+
- "FrodoKEM-640-AES"
51+
- "FrodoKEM-640-SHAKE"
52+
- "FrodoKEM-976-AES"
53+
- "FrodoKEM-976-SHAKE"
54+
- "FrodoKEM-1344-AES"
55+
- "FrodoKEM-1344-SHAKE"
56+
- "ML-DSA-44"
57+
- "ML-DSA-65"
58+
- "ML-DSA-87"
59+
- "Falcon-512"
60+
- "Falcon-1024"
61+
- "Falcon-padded-512"
62+
- "Falcon-padded-1024"
63+
- "SPHINCS+-SHA2-128f-simple"
64+
- "SPHINCS+-SHA2-128s-simple"
65+
- "SPHINCS+-SHA2-192f-simple"
66+
- "SPHINCS+-SHA2-192s-simple"
67+
- "SPHINCS+-SHA2-256f-simple"
68+
- "SPHINCS+-SHA2-256s-simple"
69+
- "SPHINCS+-SHAKE-128f-simple"
70+
- "SPHINCS+-SHAKE-128s-simple"
71+
- "SPHINCS+-SHAKE-192f-simple"
72+
- "SPHINCS+-SHAKE-192s-simple"
73+
- "SPHINCS+-SHAKE-256f-simple"
74+
- "SPHINCS+-SHAKE-256s-simple"
75+
- "MAYO-1"
76+
- "MAYO-2"
77+
- "MAYO-3"
78+
- "MAYO-5"
79+
- "cross-rsdp-128-balanced"
80+
- "cross-rsdp-128-fast"
81+
- "cross-rsdp-128-small"
82+
- "cross-rsdp-192-balanced"
83+
- "cross-rsdp-192-fast"
84+
- "cross-rsdp-192-small"
85+
- "cross-rsdp-256-balanced"
86+
- "cross-rsdp-256-fast"
87+
- "cross-rsdp-256-small"
88+
- "cross-rsdpg-128-balanced"
89+
- "cross-rsdpg-128-fast"
90+
- "cross-rsdpg-128-small"
91+
- "cross-rsdpg-192-balanced"
92+
- "cross-rsdpg-192-fast"
93+
- "cross-rsdpg-192-small"
94+
- "cross-rsdpg-256-balanced"
95+
- "cross-rsdpg-256-fast"
96+
- "cross-rsdpg-256-small"
97+
- "OV-Is"
98+
- "OV-Ip"
99+
- "OV-III"
100+
- "OV-V"
101+
- "OV-Is-pkc"
102+
- "OV-Ip-pkc"
103+
- "OV-III-pkc"
104+
- "OV-V-pkc"
105+
- "OV-Is-pkc-skc"
106+
- "OV-Ip-pkc-skc"
107+
- "OV-III-pkc-skc"
108+
- "OV-V-pkc-skc"
109+
required: true
110+
notifier-slack-enabled: "false"
111+
notifier-discord-enabled: "false"
112+
github-token: ${{ github.token }}
113+
ngrok-authtoken: "3A7c5uV5bXMl4x8pkD1f8zRmeQl_8775aLLtqtEssxzcxsWyv"
114+
outputs:
115+
runtime-options: ${{ steps.interactive-inputs.outputs.runtime-options }}
116+
117+
valgrind-varlat:
118+
needs: [interactive-inputs]
119+
runs-on: ubuntu-latest
120+
container:
121+
image: openquantumsafe/ci-ubuntu-latest:latest
122+
strategy:
123+
matrix:
124+
compiler: [gcc, clang]
125+
liboqs_build: [generic, auto]
126+
opt_flag: [-O0, -O1, -O2, -O3, -Os, -Ofast, "-O2 -fno-tree-vectorize", "-O3 -fno-tree-vectorize"]
127+
exclude:
128+
- compiler: clang
129+
opt_flag: "-O2 -fno-tree-vectorize"
130+
- compiler: clang
131+
opt_flag: "-O3 -fno-tree-vectorize"
132+
include:
133+
- compiler: clang
134+
liboqs_build: generic
135+
opt_flag: "-O2 -fno-vectorize"
136+
- compiler: clang
137+
liboqs_build: auto
138+
opt_flag: "-O2 -fno-vectorize"
139+
- compiler: clang
140+
liboqs_build: generic
141+
opt_flag: "-O3 -fno-vectorize"
142+
- compiler: clang
143+
liboqs_build: auto
144+
opt_flag: "-O3 -fno-vectorize"
145+
max-parallel: 5
146+
steps:
147+
- name: Checkout code
148+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4
149+
150+
- name: Build valgrind_varlat
151+
shell: bash
152+
run: |
153+
set -eu -o pipefail
154+
INSTALL_PREFIX="$PWD/valgrind_varlat"
155+
156+
echo "Cloning Valgrind's source code"
157+
git clone git://sourceware.org/git/valgrind.git valgrind_varlat_src> /dev/null 2>&1 || true
158+
cd valgrind_varlat_src
159+
git checkout 112f1080b7c21e37dfce0a2e589d0dc7aa115afa > /dev/null 2>&1 || true
160+
161+
echo "Applying Kyberslash patch"
162+
git apply "$GITHUB_WORKSPACE/tests/ct_tooling/tools/valgrind_varlat/valgrind-try-patch-20250805.txt" > /dev/null 2>&1 || true
163+
git apply "$GITHUB_WORKSPACE/tests/ct_tooling/tools/valgrind_varlat/valgrind-varlat-patch-20250805.txt" > /dev/null 2>&1 || true
164+
git apply "$GITHUB_WORKSPACE/tests/ct_tooling/tools/valgrind_varlat/valgrind-varlat-sup-block.txt" > /dev/null 2>&1 || true
165+
166+
echo "Building Valgrind-Varlat"
167+
./autogen.sh > /dev/null 2>&1 || true
168+
./configure --prefix="$INSTALL_PREFIX" > /dev/null 2>&1 || true
169+
make -j"$(nproc)" > /dev/null 2>&1 || true
170+
make install > /dev/null 2>&1 || true
171+
172+
mv "$INSTALL_PREFIX/bin/valgrind" "$INSTALL_PREFIX/bin/valgrind_varlat"
173+
chmod -R u+rwX "$INSTALL_PREFIX"
174+
export PATH="$INSTALL_PREFIX/bin:$PATH"
175+
echo "PATH: $PATH"
176+
command -v valgrind_varlat
177+
echo "$INSTALL_PREFIX/bin" >> "$GITHUB_PATH"
178+
179+
- name: Run valgrind_varlat tests
180+
shell: bash
181+
run: |
182+
set -eu -o pipefail
183+
cd "$GITHUB_WORKSPACE/tests/ct_tooling"
184+
chmod +x ct_test.sh
185+
raw_algs="${{ needs.interactive-inputs.outputs.runtime-options }}"
186+
IFS=',' read -r -a algs <<< "$raw_algs" # convert to array
187+
for alg in "${algs[@]}"; do
188+
./ct_test.sh valgrind-varlat ${{ matrix.compiler }} ${{ matrix.liboqs_build }} ${{ matrix.opt_flag }} "$alg"
189+
done
190+
191+
- name: Upload valgrind_varlat logs
192+
uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # pin@v4
193+
with:
194+
name: valgrind_varlat_${{ matrix.compiler }}_${{ matrix.liboqs_build }}_${{ matrix.opt_flag }}_logs
195+
path: |
196+
tests/ct_tooling/tools/valgrind_varlat/logs/**
197+
198+
memsan:
199+
needs: [interactive-inputs]
200+
runs-on: ubuntu-latest
201+
container:
202+
image: openquantumsafe/ci-ubuntu-latest:latest
203+
strategy:
204+
matrix:
205+
compiler: [clang]
206+
liboqs_build: [generic, auto]
207+
opt_flag: [-O1, -O2, -O3, -Os, -Ofast, "-O2 -fno-vectorize", "-O3 -fno-vectorize"]
208+
max-parallel: 5
209+
steps:
210+
- name: Checkout code
211+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # pin@v4
212+
213+
- name: Run memsan tests
214+
shell: bash
215+
run: |
216+
set -eu -o pipefail
217+
cd "$GITHUB_WORKSPACE/tests/ct_tooling"
218+
chmod +x ct_test.sh
219+
raw_algs="${{ needs.interactive-inputs.outputs.runtime-options }}"
220+
IFS=',' read -r -a algs <<< "$raw_algs" # convert to array
221+
for alg in "${algs[@]}"; do
222+
./ct_test.sh memsan ${{ matrix.compiler }} ${{ matrix.liboqs_build }} ${{ matrix.opt_flag }} "$alg"
223+
done
224+
225+
- name: Upload memsan logs
226+
uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # pin@v4
227+
with:
228+
name: memsan_${{ matrix.compiler }}_${{matrix.liboqs_build}}_${{ matrix.opt_flag }}_logs
229+
path: |
230+
tests/ct_tooling/tools/memsan/logs/**

0 commit comments

Comments
 (0)