Skip to content

Commit 52df80d

Browse files
committed
v0.7.0
1 parent 6d99fcb commit 52df80d

3 files changed

Lines changed: 233 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 231 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,240 @@ 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.7.0-pre.5 (2025-06-16)
8-
_The below list is very much incomplete._
9-
7+
## 0.7.0 (2026-03-05)
108
### Added
11-
- `Reduce` trait for modular reduction with a constant modulus.
9+
- Binary GCD algorithm ([#755])
10+
- Provide `RandomMod::try_random_mod` and `Random::try_random` methods ([#770])
11+
- `Monty::div_by_2_assign()` ([#777])
12+
- `BoxedUint::inv_mod2k_vartime()` ([#777])
13+
- `BoxedUint::inv_mod2k()` ([#777])
14+
- `Monty::Multiplier` ([#777])
15+
- `serde` support for BoxedUint ([#789])
16+
- `Binary`, `LowerHex`, and `UpperHex` bounds for `Integer` ([#792])
17+
- `DivVartime` trait ([#800])
18+
- `PartialOrd<Uint>` impl for `BoxedUint` ([#803])
19+
- `UintRef` type ([#806], [#1114])
20+
- `Resize` trait ([#809])
21+
- `Invert::invert_vartime` method ([#814])
22+
- `From<Odd>` for `NonZero` impl ([#821])
23+
- `BoxedUint::{to_be_bytes_trimmed, to_le_bytes_trimmed}` ([#824])
24+
- `BoxedUint::{from_be_slice_vartime, from_le_slice_vartime}` ([#833])
25+
- `Int::to_uint` and `Uint::to_int` ([#837])
26+
- `NonZero` and `Odd` type aliases ([#844])
27+
- `NonZeroUint`/`OddUint`
28+
- `NonZeroBoxedUint`/`OddBoxedUint`
29+
- `NonZeroInt`/`OddInt` ([#845])
30+
- `NonZeroInt::new_unwrap` ([#857])
31+
- Classic Binary Extended GCD algorithm ([#854])
32+
- `Xgcd` trait ([#855])
33+
- `Uint::rem_wide` ([#896])
34+
- `Reduce` trait ([#887], [#906])
35+
- `SquareMod` trait ([#915])
36+
- `JacobiSymbol` calculation ([#927])
37+
- `NonZero::<Uint>::{from_be_hex, from_le_hex}` ([#928])
38+
- `Signed` and `Unsigned` marker traits ([#942])
39+
- `Int::wrapping_mul` ([#946])
40+
- `One` trait ala `Zero` ([#947])
41+
- `MontyParams::{one, r2}` accessor methods ([#948])
42+
- Optimized Binary Extended GCD a.k.a. binxgcd ([#945])
43+
- `ConstMontyForm::MODULUS` constant ([#982])
44+
- `Uint::lcm` method ([#1028])
45+
- `getrandom` feature with `Random` trait support ([#1057])
46+
- `NonZero::get_copy`/`Odd::get_copy` ([#1072])
47+
- Checked and wrapping exponentiation methods for `Uint` ([#1081])
48+
- `CheckedSquareRoot` trait ([#1083])
49+
- `BoxedUint::pow_mod` method ([#1084])
50+
- `BoxedUint::concatenating_add` method ([#1090])
51+
- `BoxedUint::overflowing_add` method ([#1091])
52+
- Extra sizes `U8320` and `U12288` ([#1101])
53+
- `Limb::array_as_(mut_)words`/`slice_as_(mut_)words` ([#1103])
54+
- `Uint::{floor_root_vartime, checked_root_vartime}` ([#1089])
55+
- `(Const)MontyForm::pow_vartime` ([#1118])
56+
- `(Const)MontyForm::square_repeat_vartime` method ([#1122])
57+
- `ToOwned<Owned = BoxedUint>` impl for `UintRef` ([#1128])
58+
- `BoxedUint` exponentiation methods: `wrapping_pow`, `wrapping_pow_bounded_exp`,
59+
`wrapped_pow_vartime` as well as `checked_*`/`saturating_*` equivalents ([#1159])
60+
- Division and remainder operations for `Limb` ([#1162])
61+
- Implement `Integer` and `Unsigned` for `Limb` ([#1174])
62+
- Mixed-size comparisons for `Integer` types ([#1184])
63+
- `MontyParams` getter methods ([#1188])
64+
- `Uint::resize_checked` method ([#1194])
65+
- `const_prime_monty_params!` macro and `PrimeParams` trait ([#1139])
66+
- `ConcatenatingSquare` trait ([#1208])
1267

1368
### Changed
14-
- Replace `Limb::mac` with `::carrying_mul_add` ([#817]).
15-
- Note: `::carrying_mul_add` requires a different parameter order than `::mac`.
69+
- Bump `der` to v0.8 ([#763], [#1206])
70+
- Bump edition to 2024; MSRV 1.85 ([#772])
71+
- Bound `Monty` on `Retrieve` ([#797])
72+
- `Uint::div`/`Int::div` now accept differently sized denominators ([#799])
73+
- Rename `as_(limbs|words)_mut` => `as_mut_(limbs|words)` ([#805])
74+
- Inversion method naming: ([#816])
75+
- `inv()` -> `invert()`,
76+
- `inv_mod()` -> `invert_mod()`,
77+
- `InvMod` -> `InvertMod`
78+
- `inv_odd_mod()` -> `invert_odd_mod()`
79+
- `inv_mod2k()` -> `invert_mod2k()`
80+
- Adopt `core` naming conventions for bigint methods ([#817])
81+
- Rename `WideningMul` -> `ConcatenatingMul`, `widening_mul()` -> `concatenating_mul()`
82+
- Rename `mul_wide()`/`split_mul()` -> `widening_mul()`
83+
- Rename `adc()` -> `carrying_add()`
84+
- Rename `sbb()` -> `borrowing_sub()`
85+
- Rename `mac()` -> `carrying_mul_add()` and change the order of arguments to match `core`
86+
- Rename `impl_modulus!` => `const_monty_params!` ([#861])
87+
- Unify `ConstMontyParams` and `MontyParams` ([#873])
88+
- `BoxedUint::div_rem` now accepts mixed sized inputs ([#902])
89+
- `const_monty_form!` now defines a type alias ([#909])
90+
- Modular operations now accept a `NonZero` modulus ([#914])
91+
- Simplify `Uint::add_mod`, `Uint::double_mod` ([#917])
92+
- `Uint::double_mod` now requires a `NonZero` modulus ([#917])
93+
- Bump `hybrid-array` to v0.4 ([#934])
94+
- Implement `Encoding` for all `Uint`s ([#1016], [#1064])
95+
- Rename `random_mod` -> `random_mod_vartime` ([#1030])
96+
- Replace `subtle` with `ctutils`:
97+
- Replace `ConstChoice` with `ctutils::Choice` ([#1035])
98+
- Replace `ConstCtOption` with `ctutils::CtOption` ([#1040])
99+
- Replace `ConstantTimeSelect` with `ctutils::CtSelect` ([#1043])
100+
- Replace `ConstantTimeEq` with `CtEq` in trait bounds ([#1048])
101+
- Bound `Integer` on `CtGt`/`CtLt` ([#1049])
102+
- Rename `rand` feature to `rand_core` ([#1058])
103+
- Have `BoxedMontyForm::new` auto-`Clone` its params ([#1087])
104+
- Rename `SquareRoot` trait to `FloorSquareRoot` ([#1083])
105+
- Use `core` convention for mixed-sign op names ([#1092])
106+
- `{unsigned}::*_signed` for ops that take `{signed}` RHS operand
107+
- `{signed}::*_unsigned` for ops that take `{unsigned}` RHS operand
108+
- Make vartime bit shifts return an `Option` instead of `CtOption` ([#1096])
109+
- Make vartime inversion return an `Option` instead of `CtOption` ([#1097])
110+
- Unified `MontyParams` ([#1107])
111+
- Have `Monty::zero` and `Monty::one` borrow params ([#1140])
112+
- Rename `MontyForm` -> `FixedMontyForm` ([#1145])
113+
- Split `UnsignedWithMontyForm` out of `Unsigned` ([#1156], [#1189])
114+
- Bump `rand_core` to v0.10 ([#1165])
115+
- Wrapping shifts renamed to unbounded shifts to follow `core` semantics ([#1160])
116+
- Replace `nlimbs!` macro with `const fn nlimbs()` ([#1169])
117+
- Use `cpubits` crate for 32-bit vs 64-bit selection ([#1170])
118+
- More flexible `BoxedUint` addition, subtraction, multiplication ([#1177])
119+
- Lighter-weight support for `Uint` concat/split operations ([#1191])
120+
- Deprecate `Uint:{square, square_wide}` in favor of `concatenating_square` ([#1207])
121+
- Deprecate `BoxedUint::{mul, square}` in favor of concatenating mul/square ([#1208])
122+
123+
### Fixed
124+
- Make `random_bits_core` platform independent ([#781], [#1010], [#1026])
125+
- `Default` impl for `Odd` ([#1071])
126+
- `NonZero::from_le_byte_array` ([#1211])
16127

128+
### Removed
129+
- `PrecomputedInverter` and `Inverter` traits ([#894])
130+
- `BoxedMontyFormInverter` ([#897])
131+
- `*SafeGcdInverter` ([#898])
132+
- `modular::montgomery_reduction` ([#900])
133+
- `ConstMontyParams::inverter` ([#907])
134+
- `ConstMontyFormInverter` ([#908])
135+
136+
[#755]: https://github.com/RustCrypto/crypto-bigint/pull/755
137+
[#763]: https://github.com/RustCrypto/crypto-bigint/pull/763
138+
[#770]: https://github.com/RustCrypto/crypto-bigint/pull/770
139+
[#772]: https://github.com/RustCrypto/crypto-bigint/pull/772
140+
[#777]: https://github.com/RustCrypto/crypto-bigint/pull/777
141+
[#781]: https://github.com/RustCrypto/crypto-bigint/pull/781
142+
[#789]: https://github.com/RustCrypto/crypto-bigint/pull/789
143+
[#792]: https://github.com/RustCrypto/crypto-bigint/pull/792
144+
[#797]: https://github.com/RustCrypto/crypto-bigint/pull/797
145+
[#799]: https://github.com/RustCrypto/crypto-bigint/pull/799
146+
[#800]: https://github.com/RustCrypto/crypto-bigint/pull/800
147+
[#803]: https://github.com/RustCrypto/crypto-bigint/pull/803
148+
[#805]: https://github.com/RustCrypto/crypto-bigint/pull/805
149+
[#806]: https://github.com/RustCrypto/crypto-bigint/pull/806
150+
[#809]: https://github.com/RustCrypto/crypto-bigint/pull/809
151+
[#814]: https://github.com/RustCrypto/crypto-bigint/pull/814
152+
[#816]: https://github.com/RustCrypto/crypto-bigint/pull/816
17153
[#817]: https://github.com/RustCrypto/crypto-bigint/pull/817
154+
[#821]: https://github.com/RustCrypto/crypto-bigint/pull/821
155+
[#824]: https://github.com/RustCrypto/crypto-bigint/pull/824
156+
[#833]: https://github.com/RustCrypto/crypto-bigint/pull/833
157+
[#837]: https://github.com/RustCrypto/crypto-bigint/pull/837
158+
[#844]: https://github.com/RustCrypto/crypto-bigint/pull/844
159+
[#845]: https://github.com/RustCrypto/crypto-bigint/pull/845
160+
[#854]: https://github.com/RustCrypto/crypto-bigint/pull/854
161+
[#855]: https://github.com/RustCrypto/crypto-bigint/pull/855
162+
[#857]: https://github.com/RustCrypto/crypto-bigint/pull/857
163+
[#861]: https://github.com/RustCrypto/crypto-bigint/pull/861
164+
[#873]: https://github.com/RustCrypto/crypto-bigint/pull/873
165+
[#887]: https://github.com/RustCrypto/crypto-bigint/pull/887
166+
[#894]: https://github.com/RustCrypto/crypto-bigint/pull/894
167+
[#896]: https://github.com/RustCrypto/crypto-bigint/pull/896
168+
[#897]: https://github.com/RustCrypto/crypto-bigint/pull/897
169+
[#898]: https://github.com/RustCrypto/crypto-bigint/pull/898
170+
[#900]: https://github.com/RustCrypto/crypto-bigint/pull/900
171+
[#902]: https://github.com/RustCrypto/crypto-bigint/pull/902
172+
[#906]: https://github.com/RustCrypto/crypto-bigint/pull/906
173+
[#907]: https://github.com/RustCrypto/crypto-bigint/pull/907
174+
[#908]: https://github.com/RustCrypto/crypto-bigint/pull/908
175+
[#909]: https://github.com/RustCrypto/crypto-bigint/pull/909
176+
[#914]: https://github.com/RustCrypto/crypto-bigint/pull/914
177+
[#915]: https://github.com/RustCrypto/crypto-bigint/pull/915
178+
[#917]: https://github.com/RustCrypto/crypto-bigint/pull/917
179+
[#927]: https://github.com/RustCrypto/crypto-bigint/pull/927
180+
[#928]: https://github.com/RustCrypto/crypto-bigint/pull/928
181+
[#934]: https://github.com/RustCrypto/crypto-bigint/pull/934
182+
[#942]: https://github.com/RustCrypto/crypto-bigint/pull/942
183+
[#945]: https://github.com/RustCrypto/crypto-bigint/pull/945
184+
[#946]: https://github.com/RustCrypto/crypto-bigint/pull/946
185+
[#947]: https://github.com/RustCrypto/crypto-bigint/pull/947
186+
[#948]: https://github.com/RustCrypto/crypto-bigint/pull/948
187+
[#982]: https://github.com/RustCrypto/crypto-bigint/pull/982
188+
[#1010]: https://github.com/RustCrypto/crypto-bigint/pull/1010
189+
[#1016]: https://github.com/RustCrypto/crypto-bigint/pull/1016
190+
[#1026]: https://github.com/RustCrypto/crypto-bigint/pull/1026
191+
[#1028]: https://github.com/RustCrypto/crypto-bigint/pull/1028
192+
[#1030]: https://github.com/RustCrypto/crypto-bigint/pull/1030
193+
[#1035]: https://github.com/RustCrypto/crypto-bigint/pull/1035
194+
[#1040]: https://github.com/RustCrypto/crypto-bigint/pull/1040
195+
[#1043]: https://github.com/RustCrypto/crypto-bigint/pull/1043
196+
[#1048]: https://github.com/RustCrypto/crypto-bigint/pull/1048
197+
[#1049]: https://github.com/RustCrypto/crypto-bigint/pull/1049
198+
[#1057]: https://github.com/RustCrypto/crypto-bigint/pull/1057
199+
[#1058]: https://github.com/RustCrypto/crypto-bigint/pull/1058
200+
[#1064]: https://github.com/RustCrypto/crypto-bigint/pull/1064
201+
[#1071]: https://github.com/RustCrypto/crypto-bigint/pull/1071
202+
[#1072]: https://github.com/RustCrypto/crypto-bigint/pull/1072
203+
[#1081]: https://github.com/RustCrypto/crypto-bigint/pull/1081
204+
[#1083]: https://github.com/RustCrypto/crypto-bigint/pull/1083
205+
[#1084]: https://github.com/RustCrypto/crypto-bigint/pull/1084
206+
[#1087]: https://github.com/RustCrypto/crypto-bigint/pull/1087
207+
[#1089]: https://github.com/RustCrypto/crypto-bigint/pull/1089
208+
[#1090]: https://github.com/RustCrypto/crypto-bigint/pull/1090
209+
[#1091]: https://github.com/RustCrypto/crypto-bigint/pull/1091
210+
[#1092]: https://github.com/RustCrypto/crypto-bigint/pull/1092
211+
[#1096]: https://github.com/RustCrypto/crypto-bigint/pull/1096
212+
[#1097]: https://github.com/RustCrypto/crypto-bigint/pull/1097
213+
[#1101]: https://github.com/RustCrypto/crypto-bigint/pull/1101
214+
[#1103]: https://github.com/RustCrypto/crypto-bigint/pull/1103
215+
[#1107]: https://github.com/RustCrypto/crypto-bigint/pull/1107
216+
[#1114]: https://github.com/RustCrypto/crypto-bigint/pull/1114
217+
[#1118]: https://github.com/RustCrypto/crypto-bigint/pull/1118
218+
[#1122]: https://github.com/RustCrypto/crypto-bigint/pull/1122
219+
[#1128]: https://github.com/RustCrypto/crypto-bigint/pull/1128
220+
[#1139]: https://github.com/RustCrypto/crypto-bigint/pull/1139
221+
[#1140]: https://github.com/RustCrypto/crypto-bigint/pull/1140
222+
[#1145]: https://github.com/RustCrypto/crypto-bigint/pull/1145
223+
[#1156]: https://github.com/RustCrypto/crypto-bigint/pull/1156
224+
[#1159]: https://github.com/RustCrypto/crypto-bigint/pull/1159
225+
[#1160]: https://github.com/RustCrypto/crypto-bigint/pull/1160
226+
[#1162]: https://github.com/RustCrypto/crypto-bigint/pull/1162
227+
[#1165]: https://github.com/RustCrypto/crypto-bigint/pull/1165
228+
[#1169]: https://github.com/RustCrypto/crypto-bigint/pull/1169
229+
[#1170]: https://github.com/RustCrypto/crypto-bigint/pull/1170
230+
[#1174]: https://github.com/RustCrypto/crypto-bigint/pull/1174
231+
[#1177]: https://github.com/RustCrypto/crypto-bigint/pull/1177
232+
[#1184]: https://github.com/RustCrypto/crypto-bigint/pull/1184
233+
[#1188]: https://github.com/RustCrypto/crypto-bigint/pull/1188
234+
[#1189]: https://github.com/RustCrypto/crypto-bigint/pull/1189
235+
[#1191]: https://github.com/RustCrypto/crypto-bigint/pull/1191
236+
[#1194]: https://github.com/RustCrypto/crypto-bigint/pull/1194
237+
[#1206]: https://github.com/RustCrypto/crypto-bigint/pull/1206
238+
[#1207]: https://github.com/RustCrypto/crypto-bigint/pull/1207
239+
[#1208]: https://github.com/RustCrypto/crypto-bigint/pull/1208
240+
[#1211]: https://github.com/RustCrypto/crypto-bigint/pull/1211
18241

19242
## 0.6.1 (2025-02-14)
20243
### Added
@@ -23,8 +246,8 @@ _The below list is very much incomplete._
23246
### Changed
24247
- Make `as_limbs_mut` const ([#757])
25248
- Impl `RemMixed` for even splits as well ([#791])
26-
- Make `Integer` be fmt::Binary, LowerHex and UpperHex ([#792])
27-
-
249+
- Make `Integer` be `fmt::Binary`, `LowerHex`, and `UpperHex` ([#792])
250+
28251
[#757]: https://github.com/RustCrypto/crypto-bigint/pull/757
29252
[#760]: https://github.com/RustCrypto/crypto-bigint/pull/760
30253
[#791]: https://github.com/RustCrypto/crypto-bigint/pull/791

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.7.0-rc.28"
3+
version = "0.7.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)