@@ -4,17 +4,240 @@ All notable changes to this project will be documented in this file.
44The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
55and 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-08)
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
0 commit comments