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.

bash cargo test -p testsuite

ASM Generation

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

bash 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