Skip to content

Commit 7ec1162

Browse files
committed
v0.7.0
1 parent 49d5ef2 commit 7ec1162

5 files changed

Lines changed: 244 additions & 12 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-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

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,

LICENSE-MIT

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2021-2025 The RustCrypto Project Developers
1+
Copyright (c) 2021-2026 The RustCrypto Project Developers
22

33
Permission is hereby granted, free of charge, to any
44
person obtaining a copy of this software and associated

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,24 @@ using const generics.
2929

3030
This crate has been [audited by NCC Group] with no significant
3131
findings. We would like to thank [Entropy] for funding the audit.
32+
Note that the implementation has diverged significantly since the last audit.
3233

3334
All functions contained in the crate are designed to execute in constant
3435
time unless explicitly specified otherwise (via a `*_vartime` name suffix).
3536

36-
This library is not suitable for use on processors with a variable-time
37+
This library is NOT suitable for use on processors with a variable-time
3738
multiplication operation (e.g. short circuit on multiply-by-zero /
3839
multiply-by-one, such as certain 32-bit PowerPC CPUs and some non-ARM
3940
microcontrollers).
4041

42+
## Minimum Supported Rust Version (MSRV) Policy
43+
44+
MSRV increases are not considered breaking changes and can happen in patch
45+
releases.
46+
47+
The crate MSRV accounts for all supported targets and crate feature
48+
combinations, excluding explicitly unstable features.
49+
4150
## License
4251

4352
Licensed under either of:

0 commit comments

Comments
 (0)