fixed-bigint 0.6.1

Fixed-size big integer implementation for Rust
Documentation

Fixed BigInt

crate documentation minimum rustc 1.86 build status Coverage Status Crates.io MSRV

Unsigned BigInt implementation, backed by a fixed-size array.

FixedUInt<u8,4>,FixedUInt<u16,2> or FixedUInt<u32,1> all create a 32-bit unsigned integer, that behaves mostly the same as builtin u32. FixedUInt<u32, 64> creates a 2048-bit value, that uses native 32-bit math. If running on 8-bit CPU, FixedUInt<u8, 2048> would work the same, just very much slower.

When the width isn't known until runtime, HeaplessBigInt<T, CAP> keeps a runtime length in the same fixed-size storage: the CAP-word buffer holds any value up to that width, and at each width it behaves like the equivalent FixedUInt. That lets a single buffer be sized for the largest case while smaller values still work.

The crate is written for no_std and no_alloc environments with option for panic-free operation, i.e. embedded MCUs. At least for now, focus is on correctness first and then generated code size, performance comes last. The aim is not to bring in 64-bit math dependencies on 32-bit CPU, to save code space.

The arithmetic operands ( +, -, .add() ) panic on overflow, just like native integer types. Panic-free alternatives like overflowing_add and wrapping_add are supported.

In addition to basic arithmetic, two main traits are implemented: num_traits::PrimInt and num_integer::Integer.

An optional zeroize feature implements the Zeroize trait, so sensitive values can be cleared explicitly with .zeroize(), or wiped on scope exit by wrapping them in zeroize::Zeroizing. (The integer types are Copy, so they do not wipe on drop by themselves.)

Const Support

Most arithmetic operations are const-compatible via the c0nst crate. On nightly Rust with --features nightly, operations can be used in const contexts. On stable Rust, the same code compiles but without const evaluation.

Constant time

Constant-time execution is implemented for a subset of core operations. Ct mode is selected by a type parameter, allowing individual calling contexts to use either mode. This is purely experimental, not audited or thoroughly verified.

Contributing

See CONTRIBUTING.md for details.

License

Apache 2.0; see LICENSE for details.