All notable changes to this library will be documented in this file.
The format is based on Keep a Changelog, and this library adheres to Rust's notion of Semantic Versioning.
ff_derivenow works with all odd primes, not just primes that are either3 (mod 4)or1 (mod 16).
- A type inference problem when
ff_deriveandhybrid-arrayare in the same dependency tree has been fixed.
ff::Field::{ZERO, ONE}ff::Field::powff::Field::{sqrt_ratio, sqrt_alt}core::iter::{Sum, Product}bounds onff::Fieldff::PrimeField::from_u128ff::PrimeField::{MODULUS, TWO_INV}- Constants related to multiplicative generators:
ff::PrimeField::MULTIPLICATIVE_GENERATORff::PrimeField::{ROOT_OF_UNITY, ROOT_OF_UNITY_INV}ff::PrimeField::DELTA
ff::WithSmallOrderMulGroupff::FromUniformBytesff::helpers:sqrt_tonelli_shankssqrt_ratio_generic
ff::Field::sqrtis now a provided method that uses theField::sqrt_ratiomethod. Implementors of theFieldtrait can choose to implementField::sqrt_ratioand use the providedff::Field::sqrtmethod, especially if it is more efficient in practice, or they can keep their own implementation ofField::sqrtand implementField::sqrt_ratioin terms of that implementation using theff::helpers::sqrt_ratio_generichelper function.ff::PrimeFieldis now documented as representing a non-binary field (i.e. its prime is not 2). This was always the intention, but is now a concrete requirement in order forPrimeField::TWO_INVto exist.
ff::Field::{zero, one}(useff::Field::{ZERO, ONE}instead).ff::PrimeField::{multiplicative_generator, root_of_unity}(useff::PrimeField::{MULTIPLICATIVE_GENERATOR, ROOT_OF_UNITY}instead).
ff_derivepreviously generated aField::randomimplementation that would overflow for fields that needed a full 64-bit spare limb.
- MSRV is now 1.56.0.
- Bumped
bitvecto 1.0.
ff_deriveprocedural macro can now be invoked within regular macros.- Previously,
ff_derive's procedural macro would generate implementations ofPrimeFieldBitseven when thebitscrate feature was disabled.ff_derivecan now be used without a dependency onbitvecby disabling feature features. The new crate featurederive_bitscan be used to force the generation ofPrimeFieldBitsimplementations. This new crate feature will be removed once our MSRV is at least 1.60 and we have access to weak dependency features.
subtle::ConstantTimeEqbound onff::FieldCopy + Send + Sync + 'staticbounds onff::PrimeField::Reprff::derivemodule behind thederivefeature flag, containing dependencies for thePrimeFieldderive macro:- Re-exports of required crates.
adc, mac, sbbconstant-time const helper functions.
ff::Field::is_zero_vartimeff::PrimeField::from_repr_vartime
ff::Field::is_zeronow returnssubtle::Choice.ff::PrimeField::{is_odd, is_even}now returnsubtle::Choice.ff::PrimeField::from_reprnow returnsubtle::CtOption<Self>.ff::PrimeField::from_strhas been renamed toPrimeField::from_str_vartime.
ff::{adc, mac_with_carry, sbb}(replaced byff::derive::{adc, mac, sbb}).
ff::BatchInvertextension trait, implemented for iterators over mutable field elements which allows those field elements to be inverted in a batch. This trait is behind the newallocfeature flag.ff::BatchInverterstruct, which provides methods for non-allocating batch inversion of field elements contained within slices.
ff::PrimeFieldBits: PrimeFieldtrait, behind abitsfeature flag.
- MSRV is now 1.51.0.
- Bumped
bitvecto 0.22 to enable fixing a performance regression inff 0.9. Thebitvec::view::BitViewre-export has been replaced bybitvec::view::BitViewSized. - The
bitvecdependency and its re-exports have been gated behind thebitsfeature flag.
ff::PrimeField::{ReprBits, char_le_bits, to_le_bits}(replaced byff::PrimeFieldBitstrait).
#[derive(PrimeField)]now works on small moduli (that fit in a singleu64limb).
- Re-export of
bitvec::view::BitView. ff::FieldBits<V>type alias for the return type offf::PrimeField::{char_le_bits, to_le_bits}.
- Bumped
bitvecto 0.20,rand_coreto 0.6.
From<Self>andFrom<&Self>bounds onff::PrimeField::Repr.
ff::PrimeField::{ReprBits, char_le_bits, to_le_bits}, and a public dependency onbitvec 0.18.ff::Field::cubemethod with provided implementation.Send + Syncbounds onff::PrimeField::ReprBits
- MSRV is now 1.44.0.
ff::Field::random<R: RngCore + ?Sized>(rng: &mut R) -> Selfhas been changed toField::random(rng: impl RngCore) -> Self, to align withgroup::Group::random.
fmt::Displaybound onff::Field.ff::PrimeField::char(replaced byff::PrimeField::char_le_bits).ff::{BitIterator, Endianness, PrimeField::ReprEndianness(replaced byff::PrimeField::to_le_bits).