Skip to content

ctutils: Thumb-1 constant-time hardening - #1580

Merged
tarcieri merged 1 commit into
masterfrom
ctutils/thumb1-ct-hardening
Oct 28, 2026
Merged

tarcieri merged 1 commit into
masterfrom
ctutils/thumb1-ct-hardening

Conversation

@tarcieri

Copy link
Copy Markdown
Member

Extends cargo checkct coverage to include comparisons and conditional negation, and corrects constant-time issues impacting Thumb-1 targets (e.g. Cortex-M0).

Extends `cargo checkct` coverage to include comparisons and conditional
negation, and corrects constant-time issues impacting Thumb-1 targets
(e.g. Cortex-M0).
@tarcieri
tarcieri merged commit 853fb0d into master Oct 28, 2026
16 checks passed
@tarcieri
tarcieri deleted the ctutils/thumb1-ct-hardening branch October 28, 2026 22:38
tarcieri added a commit that referenced this pull request Oct 29, 2026
## Security
- Thumb-1 (Cortex-M0) and RISCV32 constant-time hardening (#1580)
tarcieri added a commit to RustCrypto/KEMs that referenced this pull request Oct 29, 2026
Uses newly hardened `ctutils::{CtLt, CtSelect}` (RustCrypto/utils#1580)
for conditional subtraction in `small_reduce`, preventing
secret-dependent branches on Thumb-1 as well as avoiding the `psubusw`
instruction on `x86_64` which was blocking BINSEC analysis.

Making this fix pass `checkct` requires a bump to `ctutils` v0.4.7. It
also makes `ctutils` a hard dependency of `module-lattice`, though it's
currently a conditional feature and needs to remain so for backwards
compatibility. A TODO notes the next breaking release should remove the
legacy feature.

The issue as well as the fix were confirmed using `cargo checkct`
analysis of the `ml-kem` crate, including some newly expanded coverage
included in this PR.
tarcieri added a commit to RustCrypto/KEMs that referenced this pull request Oct 29, 2026
Uses newly hardened `ctutils::{CtLt, CtSelect}` (RustCrypto/utils#1580)
for conditional subtraction in `small_reduce`, preventing
secret-dependent branches on Thumb-1 as well as avoiding the `psubusw`
instruction on `x86_64` which was blocking BINSEC analysis.

Making this fix pass `checkct` requires a bump to `ctutils` v0.4.7. It
also makes `ctutils` a hard dependency of `module-lattice`, though it's
currently a conditional feature and needs to remain so for backwards
compatibility. A TODO notes the next breaking release should remove the
legacy feature.

The issue as well as the fix were confirmed using `cargo checkct`
analysis of the `ml-kem` crate, including some newly expanded coverage
included in this PR.
tarcieri added a commit to RustCrypto/KEMs that referenced this pull request Oct 29, 2026
Uses newly hardened `ctutils::{CtLt, CtSelect}` (RustCrypto/utils#1580)
for conditional subtraction in `small_reduce`, preventing
secret-dependent branches on Thumb-1 as well as avoiding the `psubusw`
instruction on `x86_64` which was blocking BINSEC analysis.

Making this fix pass `checkct` requires a bump to `ctutils` v0.4.7. It
also makes `ctutils` a hard dependency of `module-lattice`, though it's
currently a conditional feature and needs to remain so for backwards
compatibility. A TODO notes the next breaking release should remove the
legacy feature.

The issue as well as the fix were confirmed using `cargo checkct`
analysis of the `ml-kem` crate, including some newly expanded coverage
included in this PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant