p256-cm4 0.1.0

P256-Cortex-M4 re-written in rust
Documentation

P256-CM4

CI

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.

cargo test -p testsuite

ASM Generation

Send the GCC ASM from Emill/P256-Cortex-M4 through the pre-processor.

arm-none-eabi-gcc -O0 -ffunction-sections -fdata-sections -g -fno-omit-frame-pointer -mthumb -march=armv7e-m -Wall -Wextra -std=c11 -march=armv7e-m -c P256-Cortex-M4/p256-cortex-m4-asm-gcc.S -E > asm.s