1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
`rscrypto` uses a three-tier dispatch model. The same source builds with a
portable Rust path on every supported target and uses hardware backends only
when the target and CPU support them.
1. 2.3.
In `no_std` builds, only the compile-time tier runs.
With `std` enabled, the `portable-only` feature makes `platform::caps()` report
no runtime SIMD/ASM capabilities, so dispatchers that consult runtime caps fall
through to portable backends. It does not remove SIMD code from the binary or
override compile-time `target_feature` selection. See
[`features.md`](features.md#portable-only).
Backend availability depends on what the target CPU advertises and what
`target-feature` permits. The portable Rust fallback is present on every target
listed below.
ECDSA P-256/P-384 always has a portable Rust path. x86_64 and aarch64 targets
also use assembly helpers for selected scalar, field, and basepoint operations
when those helpers are compiled for the target. Other target families use the
portable implementation.
ML-KEM-512/768/1024 always have a portable Rust path. On s390x, secret-fed
ML-KEM arithmetic uses fixed-work z/Vector kernels where those kernels are
compiled and selected. The implementation does not replace constant-time
hardening with native scalar multiply or divide on secret-fed arithmetic.
The following `no_std` targets are built in CI:
- -----
Other `no_std` targets in the same families, such as `thumbv7em-*` and larger
RISC-V profiles, generally work. Open an issue if a target you care about is
missing.
Current geomean speedups by platform live in
[`benchmark_results/OVERVIEW.md`](../benchmark_results/OVERVIEW.md#coverage-matrix).
The current public set includes the 2026-06-22 nine-runner Linux CI matrix.