p256-cm4

Crates.iop256-cm4
lib.rsp256-cm4
version0.3.0
sourcesrc
created_at2022-07-30 17:02:37.091233
updated_at2022-08-07 17:38:56.409413
descriptionP256-Cortex-M4 re-written in rust
homepage
repositoryhttps://github.com/newAM/p256-cm4
max_upload_size
id635636
size74,611
Alex Martens (newAM)

documentation

README

P256-CM4

CI crates.io docs

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 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-run.

Adjust .cargo/config.toml, memory.x, testsuite/Cargo.toml, and the clock setup for your target.

DEFMT_LOG=trace 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
Commit count: 16

cargo fmt