P256-CM4
A (mostly) rust re-implementation of Emill/P256-Cortex-M4.
Rust 1.59.0 stabilized the global_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 safe wrappers for the unsafe functions. See ycrypto/p256-cortex-m4 for a safe implementation.
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-run.
Adjust .cargo/config.toml, memory.x, testsuite/Cargo.toml, and the clock setup for your target.
ASM Generation
Send the GCC ASM from Emill/P256-Cortex-M4 through the pre-processor.