#big-integer #integer #const-generics #bignum #precision

no-std crypto-bigint

Pure Rust implementation of a big integer library which has been designed from the ground-up for use in cryptographic applications. Provides constant-time, no_std-friendly implementations of modern formulas using const generics.

49 releases

0.6.0-rc.6 Oct 5, 2024
0.6.0-rc.3 Aug 21, 2024
0.6.0-rc.2 Jul 26, 2024
0.6.0-pre.12 Jan 17, 2024
0.2.2 Jun 27, 2021

#7 in Algorithms

Download history 739358/week @ 2024-08-12 728201/week @ 2024-08-19 738053/week @ 2024-08-26 734811/week @ 2024-09-02 733602/week @ 2024-09-09 707438/week @ 2024-09-16 752766/week @ 2024-09-23 748729/week @ 2024-09-30 785926/week @ 2024-10-07 803599/week @ 2024-10-14 856664/week @ 2024-10-21 793946/week @ 2024-10-28 814812/week @ 2024-11-04 777122/week @ 2024-11-11 819288/week @ 2024-11-18 737859/week @ 2024-11-25

3,184,569 downloads per month
Used in 3,665 crates (55 directly)

Apache-2.0 OR MIT

740KB
17K SLoC

RustCrypto: Cryptographic Big Integers

crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

Pure Rust implementation of a big integer library which has been designed from the ground-up for use in cryptographic applications.

Provides constant-time, no_std-friendly implementations of modern formulas using const generics.

Documentation

Goals

  • Supports no_std-friendly const generic stack-allocated big integers.
  • Constant-time by default. Variable-time functions are explicitly marked as such.
  • Leverage what is possible today with const generics on stable rust.
  • Support const fn as much as possible, including decoding big integers from bytes/hex and performing arithmetic operations on them, with the goal of being able to compute values at compile-time.

Security Notes

This crate has been audited by NCC Group with no significant findings. We would like to thank Entropy for funding the audit.

All functions contained in the crate are designed to execute in constant time unless explicitly specified otherwise (via a *_vartime name suffix).

This library is not suitable for use on processors with a variable-time multiplication operation (e.g. short circuit on multiply-by-zero / multiply-by-one, such as certain 32-bit PowerPC CPUs and some non-ARM microcontrollers).

Minimum Supported Rust Version

This crate requires Rust 1.81 at a minimum.

We may change the MSRV in the future, but it will be accompanied by a minor version bump.

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~125–640KB
~12K SLoC