All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
trailing_ones[_vartime](),trailing_zeros_vartime(),leading_zeros_vartime()(#282)- Implement
ArrayEncodingforU832(#288)
- Make
Uint::random_mod()work identically on 32- and 64-bit targets (#285)
BoxedUint: heap-allocated fixed-precision integers (#221)extra-sizesfeature (#229)U4224andU4352(#233)- Zeroizing support for
DynResidue(#235) cmp_vartime,ct_cmp(#238)- Expose Montgomery form in
Residue/DynResidue(#239) - Make
Uint::powwork with different sized exponents (#251) - Expose
wrapping_neg(#252) - Make
concat,split, and multiply work with different sized operands (#253) U16384andU32768(#255)Uint::{inv_mod, inv_mod2k_vartime}(#263)const fnconstructors forNonZero<Uint>andNonZero<Limb>(#266)- Constant-time
Uint::shr()andUint::shl()(#267) - Subtle trait impls for
DynResidueandDynResidueParams(#269)
- Modular inversion improvements (#263)
serdectusage (#222)- Enforce valid modulus for
DynResidueParams(#240) - Enforce valid modulus for
Residueand associated macros (#243) - Make
Uint::{from_be_hex, from_le_hex}constant-time (#254) - Remove conditionals in
Uint::saturating_add()andsaturating_mul()(#256) - More logical checks in the
Uint::random_mod()test (#256) - Mark
sqrtfor renaming, to explicitly describe it as vartime (#256)
- Expose residue params and modulus in
DynResidue(#197) - Impl
DefaultIsZeroesforResidue(#210) div_by_2()method for integers in Montgomery form (#211, #212)
- Montgomery multiplication improvements (#203)
- Improve
Debugimpls onLimbandUint(#195)
const_residuemacro accessibility bug (#193)
Residue: modular arithmetic with static compile-time moduli (#130)DynResidue: modular arithmetic with dynamic runtime moduli (#134)- Constant-time division by a single
Limb(#141) - Windowed exponentiation for
(Dyn)Residue(#147) SubResiduetrait and impls forResidueandDynResidue(#149)Pow,InvertandSquare(#155)CtChoicetype (#159)BITS,BYTES, andLIMBStoIntegertrait (#161)- Impl
RandomforWrapping(#168) - Support to concat
U320andU640(#173) - Define
U224andU544on 32-bit platforms (#179, #180)
- Rename
UInt->Uint(#143) - Rename
Uintmethods (#144)limbs->as_limbslimbs_mut->as_limbs_mutinto_limbs->to_limbs
- Faster
random_mod(#146) - Constant-time
leading_zeros(),trailing_zeros(),bits(), andbit()forUint(#153) - Rename
BIT_SIZE->BITS,BYTE_SIZE->BYTES(#157) - More efficient squaring operation ([#133])
- Use
CryptoRngCore(#164) - Bump
serdectto 0.2 (#185) - Bump
derdependency to v0.7; MSRV 1.65 (#187)
UInt::from_wordand::from_wide_word(#105)UIntmodulo operations for special moduli (#108)- Non-const
UIntdecoding from an array (#110) const fnimpls ofconcatandsplit(#111)Limbleft/right bitshifts (#112)UInt::LIMBSconstant (#114)
- Optimize
UInt::neg_modby simply calling::sub_mod(#106) - Relax bounds for
UInt::add_modand::sub_mod(#104) - Always inline
Limb::bitand(#109) - Faster const decoding of UInt (#113)
- Optimize
UInt::neg_mod(#127) - Faster comparisons (#128)
UInt::resize(#129)UInt::bitaccessor methods (#122)
- Constant-time behaviour for
ct_reduce/ct_div_rem(#117)
Wordas a replacement forLimbUInt(#88)WideWordas a replacement forWideLimbUInt(#88)UInt::*_wordsas a replacement forUInt::*_uint_array(#88)
- Deprecated
*LimbUIntandUInt::*_uint_array(#88)
Encodingtests (#93)
- Use const generic impls of
*Modtraits (#98)
- Impl
ArrayEncodingforU576(#96)
UInt::as_uint_array(#91)
- Impl
AsRef/AsMut<[LimbUInt]>forUInt(#89)
UInt::inv_mod2k(#86)
- Wrong results for remainder (#84)
- Bug in
from_le_slice(#82)
NOTE: this release was yanked due to #82.
- Pad limbs with zeros when displaying hexadecimal representation (#74)
Output = Selfto all bitwise ops onIntegertrait (#53)
- Bitwise ops to
Integertrait (#51)
- Bitwise
Xor/Notoperations (#27) Zerotrait (#35)Checked*traits (#41)preludemodule (#45)saturating_*ops (#47)
- Rust 2021 edition upgrade; MSRV 1.56 (#33)
- Reverse ordering of
UInt::mul_widereturn tuple (#34) - Have
DivandRemimpls always takeNonZeroargs (#39) - Rename
limb::InnertoLimbUInt(#40) - Make
limbmodule private (#40) - Use
Zero/Integertraits foris_zero,is_odd, andis_even(#46)
- Deprecated
LIMB_BYTESconstant (#43)
UInt::sqrt(#9)
- Make
UIntdivision similar to other interfaces (#8)
- Implement constant-time division and modulo operations
- Moved from RustCrypto/utils to RustCrypto/crypto-bigint repo (#2)
UInt::shl_vartime
add_modoverflow handling
IntegertraitShrAssignimpl forUInt- Recursive Length Prefix (RLP) encoding support for
UInt
ConditionallySelectableimpl forUInt
- Expose
limbmodule [limb::Inner; LIMBS]conversions forUInt- Bitwise right shift support for
UInt([#586], [#590])
UInt::wrapping_mul
- Implement the
Hashtrait forUIntandLimb
Limb::is_oddandUInt::is_oddUInt::newrandfeature
- Deprecate
LIMB_BYTESconstant - Make
Limb'sInnervalue public
Limbnewtype- Target-specific rustdocs
ConstantTimeGreater/ConstantTimeLessimpls for UIntFromconversions betweenUIntand limb arrayszeroizefeature- Additional
ArrayEncoding::ByteSizebounds UInt::into_limbsEncodingtrait
NumBits/NumBytestraits; useEncodinginstead
- Initial release