P256-CM4
A (mostly) rust re-implementation of Emill/P256-Cortex-M4.
Rust 1.88.0 stabilized the naked_asm macro which allows for this to be compiled without any additional tooling. No build.rs script or external assembler required.
Limitations
This is not yet complete, it lacks interoperability with other targets (via RustCrypto traits or compile-time switches). See ycrypto/p256-cortex-m4 for an interoperable solution.
This lacks the configurability of the original source because rust features are less powerful than C pre-processor macros. Use ycrypto/p256-cortex-m4-sys if you require configurability.
Comparisons
As measured on a STM32WLE5.
| Implementation | Signing Cycles (appx) | Verify Cycles (appx) | Flash Size (appx) |
|---|---|---|---|
| Hardware PKA | 5,211,859 | 10,516,860 | 1,582 B |
| RustCrypto | 7,856,436 | 14,303,277 | 49 kiB |
p256-cm4 |
442,754 | 1,225,746 | 10 kiB |
Maintainers Notes
Testing
Install probe-rs-tools.
Adjust .cargo/config.toml, memory.x, testsuite/Cargo.toml, and the clock setup for your target.
DEFMT_LOG=trace
ASM Generation
Send the GCC ASM from Emill/P256-Cortex-M4 through the pre-processor.