NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #410 most downloaded on crates.io
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.
Last release 3 months ago
22 Jun 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 26 of 26 stable releases
16 versions withdrawn
withdrawn after publishing
5 years old
106 releases · first in 2021
BoxedUint::{from_be_slice_truncated, from_le_slice_truncated}
BoxedUint::{from_be_slice_truncated, from_le_slice_truncated} (#1266)Encoding::{from_bytes, to_bytes} (#1297)Uint::{from_be_slice_truncated, from_le_slice_truncated} (#1299)Limb::{from_*_bytes, from_*_slice_truncated, to_*_bytes} asconst fns (#1300)Encoding::{from_be_slice_truncated, from_le_slice_truncated} traitArrayEncoding::{from_byte_array, to_byte_array} (#1302)One column per quarter.
BoxedUint::{from_be_slice_truncated, from_le_slice_truncated} (#1266)Encoding::{from_bytes, to_bytes} (#1297)Uint::{from_be_slice_truncated, from_le_slice_truncated} (#1299)Limb::{from_*_bytes, from_*_slice_truncated, to_*_bytes} as const fns (#1300)Encoding::{from_be_slice_truncated, from_le_slice_truncated} trait methods (#1301)ArrayEncoding::{from_byte_array, to_byte_array} (#1302)Extend LCM support to BoxedUint and add a supporting trait
BoxedUint and add a supporting trait (#1240)ConstantTimeGreater/ConstantTimeLess for ConstMontyForm (#1247)Encoding trait for Int serde support (#1286)ByteOrder enum (#1293)Int::div_rem_unsigned with large divisors (#1250)Odd<BoxedUint> in invert_mod2k (#1257)BoxedUint bitor-assign with wider rhs (#1270)UintRef slice length checks in release builds (#1272)CtEq impl for MontyParams to match PartialEq (#1278)nlimbs overflow near u32::MAX (#1283)UintRef byte precision [#1290)NOTE: yanked due to Karatsuba carry truncation bug fixed in [#1305].
BoxedUint and add a supporting trait (#1240)ConstantTimeGreater/ConstantTimeLess for ConstMontyForm (#1247)Encoding trait for Int serde support (#1286)ByteOrder enum (#1293)Int::div_rem_unsigned with large divisors (#1250)Odd<BoxedUint> in invert_mod2k (#1257)BoxedUint bitor-assign with wider rhs (#1270)UintRef slice length checks in release builds (#1272)CtEq impl for MontyParams to match PartialEq (#1278)nlimbs overflow near u32::MAX (#1283)UintRef byte precision (#1290)MontyForm::{is_zero, is_one} methods
NOTE: yanked due to Karatsuba carry truncation bug fixed in [#1305].
#[inline] attributes for shift and wrapping arithmetic ops (#1229)MontyForm::{is_zero, is_one} methods (#1230)Gcd supertrait bound to Unsigned/Signed traits (#1231)Invert to MontyForm supertraits
NOTE: yanked due to Karatsuba carry truncation bug fixed in [#1305].
Invert to MontyForm supertraits (#1226)Integer trait (#1227)NOTE: this release contains breaking changes versus v0.7.0, which will be yanked. The v0.7.0 release and the features involved in the change are new e…
NOTE: this release contains breaking changes versus v0.7.0, which will
be yanked. The v0.7.0 release and the features involved in the change
are new enough we don't think this will have an impact.
Uint::{concat_resize, concat_checked, split_resize, split_checked}NOTE: this release, like v0.7.0, was yanked due to last-minute breaking changes, namely sealing the
Integer trait ([#1227]), which is technically a breaking change but one we do not expect will
have any user-facing impact.
Uint::{concat_resize, concat_checked, split_resize, split_checked} methods (#1223)Deprecate Uint:{square, square_wide} in favor of concatenating_square
RandomMod::try_random_mod and Random::try_random methods (#770)Monty::div_by_2_assign() (#777)BoxedUint::inv_mod2k_vartime() (#777)BoxedUint::inv_mod2k() (#777)Monty::Multiplier (#777)serde support for BoxedUint (#789)Binary, LowerHex, and UpperHex bounds for Integer (#792)DivVartime trait (#800)PartialOrd<Uint> impl for BoxedUint (#803)UintRef type (#806, #1114)Resize trait (#809)Invert::invert_vartime method (#814)From<Odd> for NonZero impl (#821)BoxedUint::{to_be_bytes_trimmed, to_le_bytes_trimmed} (#824)BoxedUint::{from_be_slice_vartime, from_le_slice_vartime} (#833)Int::to_uint and Uint::to_int (#837)NonZero and Odd type aliases (#844)
NonZeroUint/OddUintNonZeroBoxedUint/OddBoxedUintNonZeroInt/OddInt (#845)NonZeroInt::new_unwrap (#857)Xgcd trait (#855)Uint::rem_wide (#896)Reduce trait (#887, #906)SquareMod trait (#915)JacobiSymbol calculation (#927)NonZero::<Uint>::{from_be_hex, from_le_hex} (#928)Signed and Unsigned marker traits (#942)Int::wrapping_mul (#946)One trait ala Zero (#947)MontyParams::{one, r2} accessor methods (#948)ConstMontyForm::MODULUS constant (#982)Uint::lcm method (#1028)getrandom feature with Random trait support (#1057)NonZero::get_copy/Odd::get_copy (#1072)Uint (#1081)CheckedSquareRoot trait (#1083)BoxedUint::pow_mod method (#1084)BoxedUint::concatenating_add method ([1090)BoxedUint::overflowing_add method (#1091)U8320 and U12288 (#1101)Limb::array_as_(mut_)words/slice_as_(mut_)words (#1103)Uint::{floor_root_vartime, checked_root_vartime} (#1089)(Const)MontyForm::pow_vartime (#1118)(Const)MontyForm::square_repeat_vartime method (#1122)ToOwned<Owned = BoxedUint> impl for UintRef (#1128)BoxedUint exponentiation methods: wrapping_pow,wrapping_pow_bounded_exp, wrapped_pow_vartime as well aschecked_*/saturating_* equivalents (#1159)Limb (#1162)Integer and Unsigned for Limb (#1174)Integer types (#1184)MontyParams getter methods (#1188)Uint::resize_checked method (#1194)const_prime_monty_params! macro and PrimeParams trait (#1139)ConcatenatingSquare trait (#1208)der to v0.8 (#763, #1206)Monty on Retrieve (#797)Uint::div/Int::div now accept differently sized denominators (#799)as_(limbs|words)_mut => as_mut_(limbs|words) (#805)inv() -> invert(),inv_mod() -> invert_mod(),InvMod -> InvertModinv_odd_mod() -> invert_odd_mod()inv_mod2k() -> invert_mod2k()core naming conventions for bigint methods (#817)WideningMul->ConcatenatingMul, widening_mul()->concatenating_mul()
mul_wide()/split_mul() -> widening_mul()adc() -> carrying_add()sbb() -> borrowing_sub()mac() -> carrying_mul_add() and change the order ofcoreimpl_modulus! => const_monty_params! (#861)ConstMontyParams and MontyParams (#873)BoxedUint::div_rem now accepts mixed sized inputs (#902)const_monty_form! now defines a type alias (#909)NonZero modulus (#914)Uint::add_mod, Uint::double_mod (#917)Uint::double_mod now requires a NonZero modulus (#917)hybrid-array to v0.4 (#934)Encoding for all Uints (#1016, #1064)random_mod -> random_mod_vartime (#1030)subtle with ctutils:
rand feature to rand_core (#1058)BoxedMontyForm::new auto-Clone its params (#1087)SquareRoot trait to FloorSquareRoot (#1083)core convention for mixed-sign op names (#1092)
{unsigned}::*_signed for ops that take {signed} RHS operand{signed}::*_unsigned for ops that take {unsigned} RHS operandOption instead of CtOption (#1096)Option instead of CtOption (#1097)MontyParams (#1107)Monty::zero and Monty::one borrow params (#1140)MontyForm -> FixedMontyForm (#1145)UnsignedWithMontyForm out of Unsigned (#1156, #1189)rand_core to v0.10 (#1165)core semantics (#1160)nlimbs! macro with const fn nlimbs() (#1169)cpubits crate for 32-bit vs 64-bit selection (#1170)BoxedUint addition, subtraction, multiplication (#1177)Uint concat/split operations (#1191)Uint:{square, square_wide} in favor of concatenating_square (#1207)BoxedUint::{mul, square} in favor of concatenatingrandom_bits_core platform independent (#781, #1010, #1026)Default impl for Odd (#1071)NonZero::from_le_byte_array (#1211)NOTE: this release was yanked due to some last minute breaking-changes introduced in v0.7.1,
namely an additional parameter added to const_prime_monty_params! / PrimeParams.
RandomMod::try_random_mod and Random::try_random methods (#770)Monty::div_by_2_assign() (#777)BoxedUint::inv_mod2k_vartime() (#777)BoxedUint::inv_mod2k() (#777)Monty::Multiplier (#777)serde support for BoxedUint (#789)Binary, LowerHex, and UpperHex bounds for Integer (#792)DivVartime trait (#800)PartialOrd<Uint> impl for BoxedUint (#803)UintRef type (#806, #1114)Resize trait (#809)Invert::invert_vartime method (#814)From<Odd> for NonZero impl (#821)BoxedUint::{to_be_bytes_trimmed, to_le_bytes_trimmed} (#824)BoxedUint::{from_be_slice_vartime, from_le_slice_vartime} (#833)Int::to_uint and Uint::to_int (#837)NonZero and Odd type aliases (#844)
NonZeroUint/OddUintNonZeroBoxedUint/OddBoxedUintNonZeroInt/OddInt (#845)NonZeroInt::new_unwrap (#857)Xgcd trait (#855)Uint::rem_wide (#896)Reduce trait (#887, #906)SquareMod trait (#915)JacobiSymbol calculation (#927)NonZero::<Uint>::{from_be_hex, from_le_hex} (#928)Signed and Unsigned marker traits (#942)Int::wrapping_mul (#946)One trait ala Zero (#947)MontyParams::{one, r2} accessor methods (#948)ConstMontyForm::MODULUS constant (#982)Uint::lcm method (#1028)getrandom feature with Random trait support (#1057)NonZero::get_copy/Odd::get_copy (#1072)Uint (#1081)CheckedSquareRoot trait (#1083)BoxedUint::pow_mod method (#1084)BoxedUint::concatenating_add method (#1090)BoxedUint::overflowing_add method (#1091)U8320 and U12288 (#1101)Limb::array_as_(mut_)words/slice_as_(mut_)words (#1103)Uint::{floor_root_vartime, checked_root_vartime} (#1089)(Const)MontyForm::pow_vartime (#1118)(Const)MontyForm::square_repeat_vartime method (#1122)ToOwned<Owned = BoxedUint> impl for UintRef (#1128)BoxedUint exponentiation methods: wrapping_pow, wrapping_pow_bounded_exp,
wrapped_pow_vartime as well as checked_*/saturating_* equivalents (#1159)Limb (#1162)Integer and Unsigned for Limb (#1174)Integer types (#1184)MontyParams getter methods (#1188)Uint::resize_checked method (#1194)const_prime_monty_params! macro and PrimeParams trait (#1139)ConcatenatingSquare trait (#1208)der to v0.8 (#763, #1206)Monty on Retrieve (#797)Uint::div/Int::div now accept differently sized denominators (#799)as_(limbs|words)_mut => as_mut_(limbs|words) (#805)inv() -> invert(),inv_mod() -> invert_mod(),InvMod -> InvertModinv_odd_mod() -> invert_odd_mod()inv_mod2k() -> invert_mod2k()core naming conventions for bigint methods (#817)
WideningMul -> ConcatenatingMul, widening_mul() -> concatenating_mul()mul_wide()/split_mul() -> widening_mul()adc() -> carrying_add()sbb() -> borrowing_sub()mac() -> carrying_mul_add() and change the order of arguments to match coreimpl_modulus! => const_monty_params! (#861)ConstMontyParams and MontyParams (#873)BoxedUint::div_rem now accepts mixed sized inputs (#902)const_monty_form! now defines a type alias (#909)NonZero modulus (#914)Uint::add_mod, Uint::double_mod (#917)Uint::double_mod now requires a NonZero modulus (#917)hybrid-array to v0.4 (#934)Encoding for all Uints (#1016, #1064)random_mod -> random_mod_vartime (#1030)subtle with ctutils:
rand feature to rand_core (#1058)BoxedMontyForm::new auto-Clone its params (#1087)SquareRoot trait to FloorSquareRoot (#1083)core convention for mixed-sign op names (#1092)
{unsigned}::*_signed for ops that take {signed} RHS operand{signed}::*_unsigned for ops that take {unsigned} RHS operandOption instead of CtOption (#1096)Option instead of CtOption (#1097)MontyParams (#1107)Monty::zero and Monty::one borrow params (#1140)MontyForm -> FixedMontyForm (#1145)UnsignedWithMontyForm out of Unsigned (#1156, #1189)rand_core to v0.10 (#1165)core semantics (#1160)nlimbs! macro with const fn nlimbs() (#1169)cpubits crate for 32-bit vs 64-bit selection (#1170)BoxedUint addition, subtraction, multiplication (#1177)Uint concat/split operations (#1191)Uint:{square, square_wide} in favor of concatenating_square (#1207)BoxedUint::{mul, square} in favor of concatenating mul/square (#1208)random_bits_core platform independent (#781, #1010, #1026)Default impl for Odd (#1071)NonZero::from_le_byte_array (#1211)v0.7.0-rc.28
v0.7.0-rc.28 (#1214)
v0.7.0-rc.27
v0.7.0-rc.27 (#1204)
v0.7.0-rc.26
v0.7.0-rc.26 (#1200)
Includes getrandom v0.4 upgrade
Includes getrandom v0.4 upgrade
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
?Sized to all RngCore bounds ([#760])
TryFrom<&[u8]> bound on Encoding::Repr ([#261])
TryFrom<&[u8]> bound on Encoding::Repr (#261)Uint functionality:
BoxedUint functionality:
sbb/wrapping_sub/checked_sub (#303), mul (#306),
from_be_slice/from_le_slice (#307), to_be_bytes/to_le_bytes (#308),
bits (#328), conditional_select (#329), shl_vartime (#330), shr_vartime (#331),
rem_vartime (#332), inv_mod2k/bitor (#334), pow (#337), inv_mod (#341),
random (#349), cond_map/cond_and_then (#352), map_limbs (#357),
div_rem/rem (#398), new_with_arc (#407), gcd (#497),
from_str_radix_vartime (#603), to_string_radix_vartime (#659)BitAnd* (#314), ConstantTimeGreater/Less/PartialOrd/Ord (#316),
AddMod (#317), SubMod (#320), Hash/BoxedUint (#350),
MulMod/BoxedUint (#343), RandomMod (#349), Rem (#356), BitNot/BitXor (#358),
CheckedMul/Mul (#361), NegMod (#362), Div (#366), Integer (#367)FixedInteger (#363), CheckedDiv (#369), WideningMul (#371),
ConstantTimeSelect (#454), SquareAssign (#431), Gcd (#499),
DivRemLimb/RemLimb (#496), InvMod (#505, #741), SquareRoot (#508),
BitOperations (#507), ShrVartime/ShlVartime (#509), RandomBits (#510),
RemMixed (#746)num-traits impls: Wrapping* (#425), Zero/One (#433), ConstZero (#573),
Num (#720)Zeroize for NonZero wrapper (#406)Zero::set_zero method (#426)Inverter/PrecomputeInverter traits (#438, #444)const fn encoders (#453)Integer::Monty associated typeMonty trait with arithmetic bounds and an associated Monty::Integer typeOdd wrapper type (#487)NonZero::new_unwrap (#602)Uint and BoxedUint (#649)impl_modulus! (#676)core::error::Error support (#680)Int type providing initial signed integer support using two's complement (#695, #730)modular module now contains all modular functionality (#300, #324)Integer trait: expand bounds to include *Mod (#318), Add/Sub/Mul (#435),
RemAssign (#709), AddAssign/MulAssign/SubAssign (#716)Integer trait: add new methods bits(_vartime)/leading_zeros (#368),
from_limb_like/one_like/zero_like` (#533)BoxedUint::new with ::zero_with_precision (#327)Zero trait into Zero + ZeroConstant (#335)Integer trait; add Constants/LimbsConstant (#355)
Bounded trait subsumes BITS/BYTESConstants provides ONE and MAXLimbsConstant provides LIMBSBoxedUint::mul_wide to mul (#359)bits_precision when creating BoxedUint (#365)u32 for shifts and bit counts (#373)core/std on overflow behavior for bit shifts (#395)inv_mod2k(_vartime) return a CtChoice (#416)CtChoice to ConstChoice (#417)NonZero-wrapped divisors (#419)core/std on overflowing_sh* for functions which return an overflow flag (#430)Uint: rename HLIMBS to RHS_LIMBS (#432)Checked* traits in line with Wrapping* (#434)*Residue* types i.e. Montgomery form representations (#485):
Residue -> ConstMontyFormDynResidue -> MontyFormBoxedResidue -> BoxedMontyForm*ResidueParams -> *MontyParamsresidue_params -> paramsparams.r -> params.oneMonty::new_params() take an Odd-wrapped modulus (#488)Uint support for const fn: square (#514), widening_mul (#515),
to_le_bytes (#555)(Boxed)MontyParams::modulus return &Odd<_> (#517)MontyParams::new and new_vartime ([#516], #518)Concat(Mixed)/Split(Mixed) argument ordering (#526)generic-array to hybrid-array (#544)ZeroConstant with ConstZero trait from num-traits (#546, #573)Uint::concat_mixed and split_mixed to accept self; make pub (#556, #558)Uint::concat and split const generic over inputs (#557, #558)Uint::mul_mod and Uint::mul_mod_vartime (#623)BoxedMontyForm: always use Arc for params (#645)const_mut_refs; MSRV 1.83 (#667)rlp dependency from 0.5 to 0.6 (#673)RngCore instead of CryptoRngCore for various random methods (#710)serdect dependency to v0.3 (#719)rand feature enable rand_core/getrandom instead of rand_core/std (#745)BoxedUint::chain (#315)MontyForm/BoxedMontyForm (#713)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →