Skip to content

Commit a054903

Browse files
committed
Merge branch 'main' into jakemas/rej-uniform-asm
Resolves conflicts in: - BIBLIOGRAPHY.md: combine HOL-Light asm file references - mldsa/mldsa_native_asm.S: include both poly_caddq and rej_uniform - proofs/hol_light/x86_64/Makefile: OBJ list combines both - proofs/hol_light/x86_64/proofs/dump_bytecode.ml: dump both bytecodes - test/bench/bench_components_mldsa.c: include both benchmarks Signed-off-by: Jake Massimo <jakemas@amazon.com>
2 parents 6539a79 + 45ba4b3 commit a054903

523 files changed

Lines changed: 63533 additions & 26507 deletions

File tree

Some content is hidden

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

.github/actions/cbmc/action.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ inputs:
2121
mldsa_parameter_set:
2222
description: "Security level for ML-DSA (2,3,5)"
2323
default: "2"
24+
reduce_ram:
25+
description: "Run CBMC proofs with MLD_CONFIG_REDUCE_RAM enabled"
26+
default: "false"
2427
gh_token:
2528
description: Github access token to use
2629
required: true
@@ -47,22 +50,30 @@ runs:
4750
- $(nix --version)
4851
- $(cbmc --version)
4952
- litani Version $(litani --version)
50-
- Cadical Version $(cadical --version)
5153
- $(bash --version | grep -m1 "")
5254
EOF
53-
- name: Run CBMC proofs (MLD_CONFIG_PARAMETER_SET=${{ inputs.mldsa_parameter_set }})
55+
- name: Run CBMC proofs (MLD_CONFIG_PARAMETER_SET=${{ inputs.mldsa_parameter_set }}, reduce_ram=${{ inputs.reduce_ram }})
5456
shell: ${{ env.SHELL }}
5557
env:
5658
GH_TOKEN: ${{ inputs.gh_token }}
5759
run: |
5860
echo "::group::cbmc_${{ inputs.mldsa_parameter_set }}"
59-
tests cbmc --mldsa-parameter-set ${{ inputs.mldsa_parameter_set }} --per-proof-timeout 1800 --output-result-json ${{ github.workspace }}/cbmc_result_${{ inputs.mldsa_parameter_set }}.json || cbmc_failed=true
61+
reduce_ram_flag=""
62+
data_dir="dev/cbmc"
63+
variant=""
64+
if [ "${{ inputs.reduce_ram }}" = "true" ]; then
65+
reduce_ram_flag="--reduce-ram"
66+
data_dir="dev/cbmc-reduce-ram"
67+
variant="reduce-ram"
68+
fi
69+
tests cbmc --mldsa-parameter-set ${{ inputs.mldsa_parameter_set }} --per-proof-timeout 1800 --output-result-json ${{ github.workspace }}/cbmc_result_${{ inputs.mldsa_parameter_set }}.json $reduce_ram_flag || cbmc_failed=true
6070
echo "::endgroup::"
6171
python3 ${{ github.action_path }}/report.py \
6272
--results-json "${{ github.workspace }}/cbmc_result_${{ inputs.mldsa_parameter_set }}.json" \
6373
--mldsa-parameter-set "${{ inputs.mldsa_parameter_set }}" \
6474
--min-runtime 20 \
6575
--regression-threshold 1.5 \
6676
--gh-pages-branch gh-pages \
67-
--data-dir dev/cbmc
77+
--data-dir "$data_dir" \
78+
--variant "$variant"
6879
if [ "$cbmc_failed" = "true" ]; then exit 1; fi

.github/actions/cbmc/report.py

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
OK = "✅"
2424
WARN = "⚠️"
2525
FAIL = "❌"
26+
SKIP = "⏭️"
2627

2728
ProofResult = namedtuple(
2829
"ProofResult", ["name", "status", "current", "previous", "change"]
@@ -39,6 +40,12 @@ def get_args():
3940
parser.add_argument("--regression-threshold", type=float, default=1.5)
4041
parser.add_argument("--gh-pages-branch", default="gh-pages")
4142
parser.add_argument("--data-dir", default="dev/cbmc")
43+
parser.add_argument(
44+
"--variant",
45+
default="",
46+
help="Optional label distinguishing a build variant (e.g. 'reduce-ram'). "
47+
"Used in PR comment tag/title so variants don't overwrite each other.",
48+
)
4249
return parser.parse_args()
4350

4451

@@ -128,8 +135,26 @@ def build_comment(current, baseline, cfg):
128135
if is_alert:
129136
alerts.append(result)
130137

138+
skipped = sorted(current.get("skipped", []))
139+
skipped_rows = []
140+
for name in skipped:
141+
base = baseline_runtimes.get(name, {})
142+
if base.get("status") == "failed":
143+
prev = "failed"
144+
elif base.get("value") is not None:
145+
prev = f"{base['value']}s"
146+
else:
147+
prev = "-"
148+
skipped_rows.append(ProofResult(name, SKIP, "skipped", prev, "-"))
149+
alerts.extend(skipped_rows)
150+
all_rows.extend(skipped_rows)
151+
131152
def sort_key(r):
132-
return -1 if r.current == "-" else -int(r.current.rstrip("s"))
153+
if r.current == "skipped":
154+
return 1 # skipped proofs sink below any timed row
155+
if r.current == "-":
156+
return -1
157+
return -int(r.current.rstrip("s"))
133158

134159
all_rows.sort(key=sort_key)
135160

@@ -155,15 +180,22 @@ def sort_key(r):
155180
alerts.insert(0, total_row)
156181

157182
lines = [
158-
f"<!-- {COMMENT_TAG}(start): mldsa-{cfg.param_set} -->",
159-
f"## CBMC Results (ML-DSA-{cfg.param_set})",
183+
f"<!-- {COMMENT_TAG}(start): mldsa-{cfg.param_set}{cfg.tag_suffix} -->",
184+
f"## CBMC Results (ML-DSA-{cfg.param_set}{cfg.title_suffix})",
160185
"",
161186
]
162187

188+
if skipped:
189+
lines += [
190+
f"{SKIP} **{len(skipped)} proof(s) skipped** "
191+
f"(see `proofs/cbmc/reduce_ram_skip.txt`)",
192+
"",
193+
]
194+
163195
if alerts:
164196
lines += [f"{WARN} **Attention Required**", ""] + render_table(alerts) + [""]
165197

166-
total = current.get("summary", {}).get("total", len(all_rows))
198+
total = current.get("summary", {}).get("total", len(all_rows)) + len(skipped)
167199
lines += (
168200
[
169201
"<details>",
@@ -175,15 +207,15 @@ def sort_key(r):
175207
"",
176208
"</details>",
177209
"",
178-
f"<!-- {COMMENT_TAG}(end): mldsa-{cfg.param_set} -->",
210+
f"<!-- {COMMENT_TAG}(end): mldsa-{cfg.param_set}{cfg.tag_suffix} -->",
179211
]
180212
)
181213
return "\n".join(lines)
182214

183215

184216
def post_or_update_comment(pr_number, body, cfg):
185217
"""Post or update PR comment."""
186-
tag = f"<!-- {COMMENT_TAG}(start): mldsa-{cfg.param_set} -->"
218+
tag = f"<!-- {COMMENT_TAG}(start): mldsa-{cfg.param_set}{cfg.tag_suffix} -->"
187219
result = subprocess.run(
188220
[
189221
"gh",
@@ -279,6 +311,8 @@ def push_to_gh_pages(current, cfg):
279311
def main():
280312
args = get_args()
281313
args.param_set = args.mldsa_parameter_set
314+
args.tag_suffix = f"-{args.variant}" if args.variant else ""
315+
args.title_suffix = f", {args.variant.upper()}" if args.variant else ""
282316

283317
with open(args.results_json) as f:
284318
current = json.load(f)

0 commit comments

Comments
 (0)