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
ArrayEncoding
forU832
(#288)
- Make
Uint::random_mod()
work identically on 32- and 64-bit targets (#285)
BoxedUint
: heap-allocated fixed-precision integers (#221)extra-sizes
feature (#229)U4224
andU4352
(#233)- Zeroizing support for
DynResidue
(#235) cmp_vartime
,ct_cmp
(#238)- Expose Montgomery form in
Residue
/DynResidue
(#239) - Make
Uint::pow
work with different sized exponents (#251) - Expose
wrapping_neg
(#252) - Make
concat
,split
, and multiply work with different sized operands (#253) U16384
andU32768
(#255)Uint::{inv_mod, inv_mod2k_vartime}
(#263)const fn
constructors forNonZero<Uint>
andNonZero<Limb>
(#266)- Constant-time
Uint::shr()
andUint::shl()
(#267) - Subtle trait impls for
DynResidue
andDynResidueParams
(#269)
- Modular inversion improvements (#263)
serdect
usage (#222)- Enforce valid modulus for
DynResidueParams
(#240) - Enforce valid modulus for
Residue
and 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
sqrt
for renaming, to explicitly describe it as vartime (#256)
- Expose residue params and modulus in
DynResidue
(#197) - Impl
DefaultIsZeroes
forResidue
(#210) div_by_2()
method for integers in Montgomery form (#211, #212)
- Montgomery multiplication improvements (#203)
- Improve
Debug
impls onLimb
andUint
(#195)
const_residue
macro 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) SubResidue
trait and impls forResidue
andDynResidue
(#149)Pow
,Invert
andSquare
(#155)CtChoice
type (#159)BITS
,BYTES
, andLIMBS
toInteger
trait (#161)- Impl
Random
forWrapping
(#168) - Support to concat
U320
andU640
(#173) - Define
U224
andU544
on 32-bit platforms (#179, #180)
- Rename
UInt
->Uint
(#143) - Rename
Uint
methods (#144)limbs
->as_limbs
limbs_mut
->as_limbs_mut
into_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
serdect
to 0.2 (#185) - Bump
der
dependency to v0.7; MSRV 1.65 (#187)
UInt::from_word
and::from_wide_word
(#105)UInt
modulo operations for special moduli (#108)- Non-const
UInt
decoding from an array (#110) const fn
impls ofconcat
andsplit
(#111)Limb
left/right bitshifts (#112)UInt::LIMBS
constant (#114)
- Optimize
UInt::neg_mod
by simply calling::sub_mod
(#106) - Relax bounds for
UInt::add_mod
and::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::bit
accessor methods (#122)
- Constant-time behaviour for
ct_reduce
/ct_div_rem
(#117)
Word
as a replacement forLimbUInt
(#88)WideWord
as a replacement forWideLimbUInt
(#88)UInt::*_words
as a replacement forUInt::*_uint_array
(#88)
- Deprecated
*LimbUInt
andUInt::*_uint_array
(#88)
Encoding
tests (#93)
- Use const generic impls of
*Mod
traits (#98)
- Impl
ArrayEncoding
forU576
(#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 = Self
to all bitwise ops onInteger
trait (#53)
- Bitwise ops to
Integer
trait (#51)
- Bitwise
Xor
/Not
operations (#27) Zero
trait (#35)Checked*
traits (#41)prelude
module (#45)saturating_*
ops (#47)
- Rust 2021 edition upgrade; MSRV 1.56 (#33)
- Reverse ordering of
UInt::mul_wide
return tuple (#34) - Have
Div
andRem
impls always takeNonZero
args (#39) - Rename
limb::Inner
toLimbUInt
(#40) - Make
limb
module private (#40) - Use
Zero
/Integer
traits foris_zero
,is_odd
, andis_even
(#46)
- Deprecated
LIMB_BYTES
constant (#43)
UInt::sqrt
(#9)
- Make
UInt
division 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_mod
overflow handling
Integer
traitShrAssign
impl forUInt
- Recursive Length Prefix (RLP) encoding support for
UInt
ConditionallySelectable
impl forUInt
- Expose
limb
module [limb::Inner; LIMBS]
conversions forUInt
- Bitwise right shift support for
UInt
([#586], [#590])
UInt::wrapping_mul
- Implement the
Hash
trait forUInt
andLimb
Limb::is_odd
andUInt::is_odd
UInt::new
rand
feature
- Deprecate
LIMB_BYTES
constant - Make
Limb
'sInner
value public
Limb
newtype- Target-specific rustdocs
ConstantTimeGreater
/ConstantTimeLess
impls for UIntFrom
conversions betweenUInt
and limb arrayszeroize
feature- Additional
ArrayEncoding::ByteSize
bounds UInt::into_limbs
Encoding
trait
NumBits
/NumBytes
traits; useEncoding
instead
- Initial release