You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update READMEs to reflect x86_64 assembly verification coverage
All x86_64 ML-KEM arithmetic intrinsics have been rewritten in
assembly and verified, so update the verification claims accordingly.
Note that the x86_64 FIPS-202 (Keccak) backend remains in C
intrinsics and is not yet covered by proof.
Signed-off-by: Matthias J. Kannwischer <matthias@kannwischer.eu>
Copy file name to clipboardExpand all lines: README.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,8 @@ mlkem-native is a secure, fast, and portable C90[^C90] implementation of ML-KEM[
17
17
It is a fork of the ML-KEM reference implementation[^REF].
18
18
19
19
All C code in [mlkem/src/*](mlkem) and [mlkem/src/fips202/*](mlkem/src/fips202) is proved memory-safe (no memory overflow) and type-safe (no integer overflow)
20
-
using [CBMC](https://github.com/diffblue/cbmc). All AArch64 assembly is proved functionally correct at the object code level using
21
-
[HOL-Light](https://github.com/jrh13/hol-light).
20
+
using [CBMC](https://github.com/diffblue/cbmc). All AArch64 assembly and all x86_64 ML-KEM arithmetic assembly is proved functionally correct at the object code level using
21
+
[HOL-Light](https://github.com/jrh13/hol-light). The x86_64 FIPS-202 (Keccak) backend is still in C intrinsics and not yet covered by proof.
22
22
23
23
mlkem-native includes native backends for Arm (64-bit, Neon), Intel/AMD (64-bit, AVX2), and RISC-V (64-bit, RVV). See [benchmarks](https://pq-code-package.github.io/mlkem-native/dev/bench/) for performance data.
24
24
@@ -61,9 +61,10 @@ All C code in [mlkem/src/*](mlkem) and [mlkem/src/fips202/*](mlkem/src/fips202)
61
61
This uses the [C Bounded Model Checker (CBMC)](https://github.com/diffblue/cbmc) and builds on function contracts and loop invariant annotations
62
62
in the source code. See [proofs/cbmc](proofs/cbmc) for details.
63
63
64
-
All AArch64 assembly is proved functionally correct at the object-code level. This uses the [HOL-Light](https://github.com/jrh13/hol-light)
65
-
interactive theorem prover and the [s2n-bignum](https://github.com/awslabs/s2n-bignum/) verification infrastructure (which includes a model of the
66
-
relevant parts of the Arm architecture). See [proofs/hol_light/aarch64](proofs/hol_light/aarch64) for details.
64
+
All AArch64 assembly and all x86_64 ML-KEM arithmetic assembly is proved functionally correct at the object-code level. This uses the [HOL-Light](https://github.com/jrh13/hol-light)
65
+
interactive theorem prover and the [s2n-bignum](https://github.com/awslabs/s2n-bignum/) verification infrastructure (which includes models of the
66
+
relevant parts of the Arm and x86 architectures). See [proofs/hol_light](proofs/hol_light) for details.
67
+
The x86_64 FIPS-202 (Keccak) backend is still in C intrinsics and not yet covered by proof.
Copy file name to clipboardExpand all lines: proofs/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,4 +10,4 @@ We use the [C Bounded Model Checker (CBMC)](https://github.com/diffblue/cbmc) to
10
10
11
11
## Assembly verification: HOL-Light
12
12
13
-
We use the [HOL-Light](https://github.com/jrh13/hol-light) interactive theorem prover alongside the verification infrastructure from [s2n-bignum](https://github.com/awslabs/s2n-bignum) to show the functional correctness of various highly optimized assembly routines in mlkem-native at the object-code level. See [proofs/hol_light/aarch64](hol_light/aarch64).
13
+
We use the [HOL-Light](https://github.com/jrh13/hol-light) interactive theorem prover alongside the verification infrastructure from [s2n-bignum](https://github.com/awslabs/s2n-bignum) to show the functional correctness of all AArch64 assembly and all x86_64 ML-KEM arithmetic assembly in mlkem-native at the object-code level. See [proofs/hol_light](hol_light).
All AArch64 assembly routines used in mlkem-native are covered. Those are:
101
+
All AArch64 assembly routines and all x86_64 ML-KEM arithmetic assembly routines used in mlkem-native are covered. The x86_64 FIPS-202 (Keccak) backend is still in C intrinsics and not yet covered; see [above](#intrinsics).
* x86_64 base multiplications: [mlkem_poly_basemul_acc_montgomery_cached_k2.S](x86_64/mlkem/mlkem_poly_basemul_acc_montgomery_cached_k2.S)[mlkem_poly_basemul_acc_montgomery_cached_k3.S](x86_64/mlkem/mlkem_poly_basemul_acc_montgomery_cached_k3.S)[mlkem_poly_basemul_acc_montgomery_cached_k4.S](x86_64/mlkem/mlkem_poly_basemul_acc_montgomery_cached_k4.S)
Note again, though, that parts of the x86_64 backend are still in intrinsics; see [above](#intrinsics).
137
-
138
137
<!--- bibliography --->
139
138
[^HYBRID]: Becker, Kannwischer: Hybrid scalar/vector implementations of Keccak and SPHINCS+ on AArch64, [https://eprint.iacr.org/2022/1243](https://eprint.iacr.org/2022/1243)
0 commit comments