Skip to content

Commit d2ccc7e

Browse files
authored
v0.6.0 (#750)
1 parent 42dddd1 commit d2ccc7e

File tree

3 files changed

+225
-2
lines changed

3 files changed

+225
-2
lines changed

CHANGELOG.md

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,229 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## 0.6.0 (2025-01-22)
8+
### Added
9+
- `TryFrom<&[u8]>` bound on `Encoding::Repr` ([#261])
10+
- New `Uint` functionality:
11+
- New methods: `bitand_limb` ([#322]), `gcd` ([#472]), `from_str_radix_vartime` ([#603]),
12+
`to_string_radix_vartime` ([#659])
13+
- New trait impls: `MulMod` ([#313]), `Div`/`Rem` ([#720])
14+
- New `BoxedUint` functionality:
15+
- New methods: `sbb`/`wrapping_sub`/`checked_sub` ([#303]), `mul` ([#306]),
16+
`from_be_slice`/`from_le_slice` ([#307]), `to_be_bytes`/`to_le_bytes` ([#308]),
17+
`bits` ([#328]), `conditional_select` ([#329]), `shl_vartime` ([#330]), `shr_vartime` ([#331]),
18+
`rem_vartime` ([#332]), `inv_mod2k`/`bitor` ([#334]), `pow` ([#337]), `inv_mod` ([#341]),
19+
`random` ([#349]), `cond_map`/`cond_and_then` ([#352]), `map_limbs` ([#357]),
20+
`div_rem`/`rem` ([#398]), `new_with_arc` ([#407]), `gcd` ([#497]),
21+
`from_str_radix_vartime` ([#603]), `to_string_radix_vartime` ([#659])
22+
- New trait impls: `BitAnd*` ([#314]), `ConstantTimeGreater/Less`/`PartialOrd/Ord` ([#316]),
23+
`AddMod` ([#317]), `SubMod` ([#320]), `Hash`/`BoxedUint` ([#350]),
24+
`MulMod`/`BoxedUint` ([#343]), `RandomMod` ([#349]), `Rem` ([#356]), `BitNot`/`BitXor` ([#358]),
25+
`CheckedMul`/`Mul` ([#361]), `NegMod` ([#362]), `Div` ([#366]), `Integer` ([#367])
26+
- Montgomery multiplication support ([#323])
27+
- New traits: `FixedInteger` ([#363]), `CheckedDiv` ([#369]), `WideningMul` ([#371]),
28+
`ConstantTimeSelect` ([#454]), `SquareAssign` ([#431]), `Gcd` ([#499]),
29+
`DivRemLimb`/`RemLimb` ([#496]), `InvMod` ([#505], [#741]), `SquareRoot` ([#508]),
30+
`BitOperations` ([#507]), `ShrVartime`/`ShlVartime` ([#509]), `RandomBits` ([#510]),
31+
`RemMixed` ([#746])
32+
- `num-traits` impls: `Wrapping*` ([#425]), `Zero`/`One` ([#433]), `ConstZero` ([#573]),
33+
`Num` ([#720])
34+
- safegcd (Bernstein-Yang) GCD + inv mod algorithm ([#372], [#493], [#632], [#635], [#655])
35+
- Constant-time square root and division ([#376])
36+
- Implement `Zeroize` for `NonZero` wrapper ([#406])
37+
- `Zero::set_zero` method ([#426])
38+
- `Inverter`/`PrecomputeInverter` traits ([#438], [#444])
39+
- Uint: `const fn` encoders ([#453])
40+
- Traits to connect integers and Montgomery form representations ([#431]):
41+
- `Integer::Monty` associated type
42+
- `Monty` trait with arithmetic bounds and an associated `Monty::Integer` type
43+
- `Odd` wrapper type ([#487])
44+
- `NonZero::new_unwrap` ([#602])
45+
- Implement Karatsuba multiplication for `Uint` and `BoxedUint` ([#649])
46+
- Efficient linear combination for Montgomery forms ([#666])
47+
- Doc comment support for `impl_modulus!` ([#676])
48+
- `core::error::Error` support ([#680])
49+
- `Int` type providing initial signed integer support using two's complement ([#695], [#730])
50+
- Variable-time modular inversion support ([#731])
51+
52+
### Changed
53+
- Toplevel `modular` module now contains all modular functionality ([#300], [#324])
54+
- `Integer` trait: expand bounds to include `*Mod` ([#318]), `Add`/`Sub`/`Mul` ([#435]),
55+
`RemAssign` ([#709]), `AddAssign`/`MulAssign`/`SubAssign` ([#716])
56+
- `Integer` trait: add new methods `bits(_vartime)`/`leading_zeros` ([#368]),
57+
`from_limb_like/`one_like`/`zero_like` ([#533])
58+
- Replace `BoxedUint::new` with `::zero_with_precision` ([#327])
59+
- Split `Zero` trait into `Zero` + `ZeroConstant` ([#335])
60+
- Refactor `Integer` trait; add `Constants`/`LimbsConstant` ([#355])
61+
- The existing `Bounded` trait subsumes `BITS`/`BYTES`
62+
- `Constants` provides `ONE` and `MAX`
63+
- `LimbsConstant` provides `LIMBS`
64+
- Rename `BoxedUint::mul_wide` to `mul` ([#359])
65+
- Round up `bits_precision` when creating `BoxedUint` ([#365])
66+
- Make bit ops use `u32` for shifts and bit counts ([#373])
67+
- Align with `core`/`std` on overflow behavior for bit shifts ([#395])
68+
- Make `inv_mod2k(_vartime)` return a `CtChoice` ([#416])
69+
- Rename `CtChoice` to `ConstChoice` ([#417])
70+
- Make division methods take `NonZero`-wrapped divisors ([#419])
71+
- Align with `core`/`std` on `overflowing_sh*` for functions which return an overflow flag ([#430])
72+
- `Uint`: rename `HLIMBS` to `RHS_LIMBS` ([#432])
73+
- Bring `Checked*` traits in line with `Wrapping*` ([#434])
74+
- Rename `*Residue*` types i.e. Montgomery form representations ([#485]):
75+
- `Residue` -> `ConstMontyForm`
76+
- `DynResidue` -> `MontyForm`
77+
- `BoxedResidue` -> `BoxedMontyForm`
78+
- `*ResidueParams` -> `*MontyParams`
79+
- `residue_params` -> `params`
80+
- `params.r` -> `params.one`
81+
- Make `Monty::new_params()` take an `Odd`-wrapped modulus ([#488])
82+
- Expand `Uint` support for `const fn`: `square` ([#514]), `widening_mul` ([#515]),
83+
`to_le_bytes` ([#555])
84+
- Have `(Boxed)MontyParams::modulus` return `&Odd<_>` ([#517])
85+
- Split `MontyParams::new` and `new_vartime` ([#516], [#518])
86+
- Reverse `Concat(Mixed)`/`Split(Mixed)` argument ordering ([#526])
87+
- Migrate from `generic-array` to `hybrid-array` ([#544])
88+
- Replace `ZeroConstant` with `ConstZero` trait from `num-traits` ([#546], [#573])
89+
- Change `Uint::concat_mixed` and `split_mixed` to accept `self`; make `pub` ([#556], [#558])
90+
- Make `Uint::concat` and `split` const generic over inputs ([#557], [#558])
91+
- Split `Uint::mul_mod` and `Uint::mul_mod_vartime` ([#623])
92+
- Faster constant-time division ([#643])
93+
- `BoxedMontyForm`: always use `Arc` for `params` ([#645])
94+
- Leverage `const_mut_refs`; MSRV 1.83 ([#667])
95+
- Bump `rlp` dependency from 0.5 to 0.6 ([#673])
96+
- Require `RngCore` instead of `CryptoRngCore` for various random methods ([#710])
97+
- Bump `serdect` dependency to v0.3 ([#719])
98+
- Have `rand` feature enable `rand_core/getrandom` instead of `rand_core/std` ([#745])
99+
100+
### Fixed
101+
- Argument ordering to `BoxedUint::chain` ([#315])
102+
- Modulus leading zeros calculation for `MontyForm`/`BoxedMontyForm` ([#713])
103+
104+
### Removed
105+
- `ct_*` prefixes from method names since we're constant-time by default ([#417])
106+
- `const_assert_*` macros ([#452], [#690])
107+
108+
[#261]: https://github.com/RustCrypto/crypto-bigint/pull/261
109+
[#300]: https://github.com/RustCrypto/crypto-bigint/pull/300
110+
[#303]: https://github.com/RustCrypto/crypto-bigint/pull/303
111+
[#306]: https://github.com/RustCrypto/crypto-bigint/pull/306
112+
[#307]: https://github.com/RustCrypto/crypto-bigint/pull/307
113+
[#308]: https://github.com/RustCrypto/crypto-bigint/pull/308
114+
[#313]: https://github.com/RustCrypto/crypto-bigint/pull/313
115+
[#314]: https://github.com/RustCrypto/crypto-bigint/pull/314
116+
[#315]: https://github.com/RustCrypto/crypto-bigint/pull/315
117+
[#316]: https://github.com/RustCrypto/crypto-bigint/pull/316
118+
[#317]: https://github.com/RustCrypto/crypto-bigint/pull/317
119+
[#318]: https://github.com/RustCrypto/crypto-bigint/pull/318
120+
[#320]: https://github.com/RustCrypto/crypto-bigint/pull/320
121+
[#322]: https://github.com/RustCrypto/crypto-bigint/pull/322
122+
[#323]: https://github.com/RustCrypto/crypto-bigint/pull/323
123+
[#324]: https://github.com/RustCrypto/crypto-bigint/pull/324
124+
[#327]: https://github.com/RustCrypto/crypto-bigint/pull/327
125+
[#328]: https://github.com/RustCrypto/crypto-bigint/pull/328
126+
[#329]: https://github.com/RustCrypto/crypto-bigint/pull/329
127+
[#330]: https://github.com/RustCrypto/crypto-bigint/pull/330
128+
[#331]: https://github.com/RustCrypto/crypto-bigint/pull/331
129+
[#332]: https://github.com/RustCrypto/crypto-bigint/pull/332
130+
[#334]: https://github.com/RustCrypto/crypto-bigint/pull/334
131+
[#335]: https://github.com/RustCrypto/crypto-bigint/pull/335
132+
[#337]: https://github.com/RustCrypto/crypto-bigint/pull/337
133+
[#341]: https://github.com/RustCrypto/crypto-bigint/pull/341
134+
[#343]: https://github.com/RustCrypto/crypto-bigint/pull/343
135+
[#349]: https://github.com/RustCrypto/crypto-bigint/pull/349
136+
[#350]: https://github.com/RustCrypto/crypto-bigint/pull/350
137+
[#352]: https://github.com/RustCrypto/crypto-bigint/pull/352
138+
[#355]: https://github.com/RustCrypto/crypto-bigint/pull/355
139+
[#356]: https://github.com/RustCrypto/crypto-bigint/pull/356
140+
[#357]: https://github.com/RustCrypto/crypto-bigint/pull/357
141+
[#358]: https://github.com/RustCrypto/crypto-bigint/pull/358
142+
[#359]: https://github.com/RustCrypto/crypto-bigint/pull/359
143+
[#361]: https://github.com/RustCrypto/crypto-bigint/pull/361
144+
[#362]: https://github.com/RustCrypto/crypto-bigint/pull/362
145+
[#363]: https://github.com/RustCrypto/crypto-bigint/pull/363
146+
[#365]: https://github.com/RustCrypto/crypto-bigint/pull/365
147+
[#366]: https://github.com/RustCrypto/crypto-bigint/pull/366
148+
[#367]: https://github.com/RustCrypto/crypto-bigint/pull/367
149+
[#368]: https://github.com/RustCrypto/crypto-bigint/pull/368
150+
[#369]: https://github.com/RustCrypto/crypto-bigint/pull/369
151+
[#371]: https://github.com/RustCrypto/crypto-bigint/pull/371
152+
[#372]: https://github.com/RustCrypto/crypto-bigint/pull/372
153+
[#373]: https://github.com/RustCrypto/crypto-bigint/pull/373
154+
[#376]: https://github.com/RustCrypto/crypto-bigint/pull/376
155+
[#395]: https://github.com/RustCrypto/crypto-bigint/pull/395
156+
[#398]: https://github.com/RustCrypto/crypto-bigint/pull/398
157+
[#406]: https://github.com/RustCrypto/crypto-bigint/pull/406
158+
[#407]: https://github.com/RustCrypto/crypto-bigint/pull/407
159+
[#416]: https://github.com/RustCrypto/crypto-bigint/pull/416
160+
[#417]: https://github.com/RustCrypto/crypto-bigint/pull/417
161+
[#419]: https://github.com/RustCrypto/crypto-bigint/pull/419
162+
[#425]: https://github.com/RustCrypto/crypto-bigint/pull/425
163+
[#426]: https://github.com/RustCrypto/crypto-bigint/pull/426
164+
[#430]: https://github.com/RustCrypto/crypto-bigint/pull/430
165+
[#431]: https://github.com/RustCrypto/crypto-bigint/pull/431
166+
[#432]: https://github.com/RustCrypto/crypto-bigint/pull/432
167+
[#433]: https://github.com/RustCrypto/crypto-bigint/pull/433
168+
[#434]: https://github.com/RustCrypto/crypto-bigint/pull/434
169+
[#435]: https://github.com/RustCrypto/crypto-bigint/pull/435
170+
[#438]: https://github.com/RustCrypto/crypto-bigint/pull/438
171+
[#444]: https://github.com/RustCrypto/crypto-bigint/pull/444
172+
[#452]: https://github.com/RustCrypto/crypto-bigint/pull/452
173+
[#453]: https://github.com/RustCrypto/crypto-bigint/pull/453
174+
[#454]: https://github.com/RustCrypto/crypto-bigint/pull/454
175+
[#472]: https://github.com/RustCrypto/crypto-bigint/pull/472
176+
[#485]: https://github.com/RustCrypto/crypto-bigint/pull/485
177+
[#487]: https://github.com/RustCrypto/crypto-bigint/pull/487
178+
[#488]: https://github.com/RustCrypto/crypto-bigint/pull/488
179+
[#493]: https://github.com/RustCrypto/crypto-bigint/pull/493
180+
[#496]: https://github.com/RustCrypto/crypto-bigint/pull/496
181+
[#497]: https://github.com/RustCrypto/crypto-bigint/pull/497
182+
[#499]: https://github.com/RustCrypto/crypto-bigint/pull/499
183+
[#505]: https://github.com/RustCrypto/crypto-bigint/pull/505
184+
[#507]: https://github.com/RustCrypto/crypto-bigint/pull/507
185+
[#508]: https://github.com/RustCrypto/crypto-bigint/pull/508
186+
[#509]: https://github.com/RustCrypto/crypto-bigint/pull/509
187+
[#510]: https://github.com/RustCrypto/crypto-bigint/pull/510
188+
[#514]: https://github.com/RustCrypto/crypto-bigint/pull/514
189+
[#515]: https://github.com/RustCrypto/crypto-bigint/pull/515
190+
[#517]: https://github.com/RustCrypto/crypto-bigint/pull/517
191+
[#518]: https://github.com/RustCrypto/crypto-bigint/pull/518
192+
[#526]: https://github.com/RustCrypto/crypto-bigint/pull/526
193+
[#533]: https://github.com/RustCrypto/crypto-bigint/pull/533
194+
[#544]: https://github.com/RustCrypto/crypto-bigint/pull/544
195+
[#546]: https://github.com/RustCrypto/crypto-bigint/pull/546
196+
[#555]: https://github.com/RustCrypto/crypto-bigint/pull/555
197+
[#556]: https://github.com/RustCrypto/crypto-bigint/pull/556
198+
[#557]: https://github.com/RustCrypto/crypto-bigint/pull/557
199+
[#558]: https://github.com/RustCrypto/crypto-bigint/pull/558
200+
[#573]: https://github.com/RustCrypto/crypto-bigint/pull/573
201+
[#602]: https://github.com/RustCrypto/crypto-bigint/pull/602
202+
[#603]: https://github.com/RustCrypto/crypto-bigint/pull/603
203+
[#623]: https://github.com/RustCrypto/crypto-bigint/pull/623
204+
[#632]: https://github.com/RustCrypto/crypto-bigint/pull/632
205+
[#635]: https://github.com/RustCrypto/crypto-bigint/pull/635
206+
[#643]: https://github.com/RustCrypto/crypto-bigint/pull/643
207+
[#645]: https://github.com/RustCrypto/crypto-bigint/pull/645
208+
[#649]: https://github.com/RustCrypto/crypto-bigint/pull/649
209+
[#655]: https://github.com/RustCrypto/crypto-bigint/pull/655
210+
[#659]: https://github.com/RustCrypto/crypto-bigint/pull/659
211+
[#666]: https://github.com/RustCrypto/crypto-bigint/pull/666
212+
[#667]: https://github.com/RustCrypto/crypto-bigint/pull/667
213+
[#673]: https://github.com/RustCrypto/crypto-bigint/pull/673
214+
[#676]: https://github.com/RustCrypto/crypto-bigint/pull/676
215+
[#680]: https://github.com/RustCrypto/crypto-bigint/pull/680
216+
[#690]: https://github.com/RustCrypto/crypto-bigint/pull/690
217+
[#695]: https://github.com/RustCrypto/crypto-bigint/pull/695
218+
[#709]: https://github.com/RustCrypto/crypto-bigint/pull/709
219+
[#710]: https://github.com/RustCrypto/crypto-bigint/pull/710
220+
[#713]: https://github.com/RustCrypto/crypto-bigint/pull/713
221+
[#716]: https://github.com/RustCrypto/crypto-bigint/pull/716
222+
[#719]: https://github.com/RustCrypto/crypto-bigint/pull/719
223+
[#720]: https://github.com/RustCrypto/crypto-bigint/pull/720
224+
[#730]: https://github.com/RustCrypto/crypto-bigint/pull/730
225+
[#731]: https://github.com/RustCrypto/crypto-bigint/pull/731
226+
[#741]: https://github.com/RustCrypto/crypto-bigint/pull/741
227+
[#745]: https://github.com/RustCrypto/crypto-bigint/pull/745
228+
[#746]: https://github.com/RustCrypto/crypto-bigint/pull/746
229+
7230
## 0.5.5 (2023-11-18)
8231
### Added
9232
- Multi-exponentiation ([#248])

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "crypto-bigint"
3-
version = "0.6.0-rc.8"
3+
version = "0.6.0"
44
description = """
55
Pure Rust implementation of a big integer library which has been designed from
66
the ground-up for use in cryptographic applications. Provides constant-time,

0 commit comments

Comments
 (0)