The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Renamed
Sieve
toSmallPrimesSieve
. (#64) - Bumped
crypto-bigint
to 0.6.0-rc.7 and MSRV to 1.83. (#67) - Bumped
crypto-bigint
to 0.6. (#68)
- Parallel prime finding methods and a "multicore" feature (#60)
- Generalized sieving:
SieveFactory
trait,SieveIterator
, and the convenience functionssieve_and_find()
andpar_sieve_and_find()
. (#64)
- Bumped
crypto-bigint
to 0.6.0-rc.6 and MSRV to 1.81. (#55) - Switch to binary GCD for improved performance (#54)
- Remove bit precision from the public API (#46)
0.6.0-pre.1 - 2024-10-03
- Bumped
crypto-bigint
to 0.6.0-rc.2 (and pinned, since there is a bug introduced in rc.3). (#48)
0.6.0-pre.0 - 2023-12-29
- Bumped
crypto-bigint
to 0.6.0-pre.7. (#40) - Bumped MSRV to 1.73. (#36)
MillerRabin::new()
takes anOdd
-wrapped integer by value.random_odd_uint()
returns anOdd
-wrapped integer.LucasBase::generate()
takes anOdd
-wrapped integer.lucas_test
takes anOdd
-wrapped integer. (#36)random_odd_uint()
is renamed torandom_odd_integer()
, takes aNonZeroU32
forbit_length
. (#38)- All bit length-type parameters take
u32
instead ofusize
. (#36) - All the API is based on the
Integer
trait instead ofUint
specifically. (#38) - High-level generation/checking functions take an additional
bits_precision
argument. (#40)
0.5.0 - 2023-08-20
- Set and explicit MSRV 1.65 in
Cargo.toml
. (#31) - Set lower bound
openssl = 0.10.39
. (#31) - Set lower bound
rand_core = 0.6.4
. (#31)
0.4.1 - 2023-07-11
subtle
version requirement relaxed to the (implicit) 2.4, instead of technically requiring 2.5 to compile. (#30)
0.4.0 - 2023-06-28
- The crate is relicensed as Apache-2.0 or MIT, instead of AGPL-v3. (#29)
getrandom
is not an explicit dependency anymore. This may break builds with thewasm32-unknown-unknown
target which relied oncrypto-primes
enabling thegetrandom/js
feature. These builds are advised to do it themselves. (#28)
Sieve::new()
now panics whenmax_bit_length == 0
(which would lead to incorrect results anyway, so it is not considered a breaking change). (#26)- Default preset now uses A* instead of A base selection method for the Lucas test. This does not change the outcomes, but is implemented as a security recommendation. (#26)
0.3.0 - 2023-05-05
sieve_once()
was removed (#22).MillerRabin::new()
andtest_random_base()
will panic if the input is invalid. (#22)MillerRabin::check()
renamed totest()
. (#22)- Prime-generating function take
Option<usize>
instead ofusize
, whereNone
means the full size of theUint
. (#19) - Renamed
prime()
togenerate_prime()
,safe_prime()
togenerate_safe_prime()
,prime_with_rng()
togenerate_prime_with_rng()
,safe_prime_with_rng()
togenerate_safe_prime_with_rng()
. (#24)
- An alternative propagation method for Lucas sequences improving the performance of
lucas_test()
. (#20)
- Some mistakes in the description of Lucas checks (the logic itself was fine). (#20)
- Major performance increase across the board due to better sieving (especially for random safe prime finding). (#22)
- Performance increase for the cases when the bit size of the generated prime is smaller than that of the containing
Uint
. (#19)
0.2.0 - 2023-03-06
- Bumped MSRV to 1.65 (
crypto-bigint
requirement). (#18) - Bumped
crypto-bigint
to 0.5 with the corresponding changes in the API. (#13, #18) Sieve::new()
now does not panic; if the parameters imply an empty output, that's what the iterator generates. (#14)
RandomPrimeWithRng
trait for use in generic code. (#12)
- Added a
gcd(Q, n) == 1
check to the Lucas test. (#11) - Added a simple 3 mod 4 check for safe primes, speeding up their generation. (#14)
- Fixed multiple corner cases in
Sieve
for small ranges. (#14)
0.1.0 - 2023-01-20
Initial release.