Pure Rust implementation of multiprecision arithmetic primitives commonly needed for asymmetric cryptography.
rustdoc
comments are WIP.
[no_std]
- Rigorously constant-time throughout.
- Complete user control over buffers: cmpa does not allocate any own its own or places any on the stack. Whenever scratch space is needed for some computation, a buffer is provided as an additional argument to the API.
- Operates on multiprecision integers in big or little endian format (stored as byte slices) or more effeciently on native format multiprecision integers (stored as a slice of machine words).
- "Standard" airhtmetic: addition, subtraction, multiplication, division, shifts, comparisons etc.
- Modular arithmetic: Montogomery multiplication and related functionality, modular inversions etc.
- Primality testing.
zeroize
- implement traits from thezeroize
crate.enable_arch_math_asm
- Use (rather trivial) assembly implementations for certain basic sinlge-word arithmetic primitives. You most likely want to enable it for performance reason, but it does introduce someunsafe{}
blocks.