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