pub trait FpConfig<const N: usize>: Send + Sync + 'static + Sized {
const MODULUS: BigInt<N>;
const GENERATOR: Fp<Self, N>;
const ZERO: Fp<Self, N>;
const ONE: Fp<Self, N>;
const TWO_ADICITY: u32;
const TWO_ADIC_ROOT_OF_UNITY: Fp<Self, N>;
const SQRT_PRECOMP: Option<SqrtPrecomputation<Fp<Self, N>>>;
const SMALL_SUBGROUP_BASE: Option<u32> = None;
const SMALL_SUBGROUP_BASE_ADICITY: Option<u32> = None;
const LARGE_SUBGROUP_ROOT_OF_UNITY: Option<Fp<Self, N>> = None;
// Required methods
fn add_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>);
fn sub_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>);
fn double_in_place(a: &mut Fp<Self, N>);
fn neg_in_place(a: &mut Fp<Self, N>);
fn mul_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>);
fn sum_of_products<const T: usize>(
a: &[Fp<Self, N>; T],
b: &[Fp<Self, N>; T]
) -> Fp<Self, N>;
fn square_in_place(a: &mut Fp<Self, N>);
fn inverse(a: &Fp<Self, N>) -> Option<Fp<Self, N>>;
fn from_bigint(other: BigInt<N>) -> Option<Fp<Self, N>>;
fn into_bigint(other: Fp<Self, N>) -> BigInt<N>;
}
Expand description
A trait that specifies the configuration of a prime field. Also specifies how to perform arithmetic on field elements.
Required Associated Constants§
sourceconst GENERATOR: Fp<Self, N>
const GENERATOR: Fp<Self, N>
A multiplicative generator of the field.
Self::GENERATOR
is an element having multiplicative order
Self::MODULUS - 1
.
sourceconst ZERO: Fp<Self, N>
const ZERO: Fp<Self, N>
Additive identity of the field, i.e. the element e
such that, for all elements f
of the field, e + f = f
.
sourceconst ONE: Fp<Self, N>
const ONE: Fp<Self, N>
Multiplicative identity of the field, i.e. the element e
such that, for all elements f
of the field, e * f = f
.
sourceconst TWO_ADICITY: u32
const TWO_ADICITY: u32
Let N
be the size of the multiplicative group defined by the field.
Then TWO_ADICITY
is the two-adicity of N
, i.e. the integer s
such that N = 2^s * t
for some odd integer t
.
sourceconst TWO_ADIC_ROOT_OF_UNITY: Fp<Self, N>
const TWO_ADIC_ROOT_OF_UNITY: Fp<Self, N>
2^s root of unity computed by GENERATOR^t
sourceconst SQRT_PRECOMP: Option<SqrtPrecomputation<Fp<Self, N>>>
const SQRT_PRECOMP: Option<SqrtPrecomputation<Fp<Self, N>>>
Precomputed material for use when computing square roots. Currently uses the generic Tonelli-Shanks, which works for every modulus.
Provided Associated Constants§
sourceconst SMALL_SUBGROUP_BASE: Option<u32> = None
const SMALL_SUBGROUP_BASE: Option<u32> = None
An integer b
such that there exists a multiplicative subgroup
of size b^k
for some integer k
.
sourceconst SMALL_SUBGROUP_BASE_ADICITY: Option<u32> = None
const SMALL_SUBGROUP_BASE_ADICITY: Option<u32> = None
The integer k
such that there exists a multiplicative subgroup
of size Self::SMALL_SUBGROUP_BASE^k
.
sourceconst LARGE_SUBGROUP_ROOT_OF_UNITY: Option<Fp<Self, N>> = None
const LARGE_SUBGROUP_ROOT_OF_UNITY: Option<Fp<Self, N>> = None
GENERATOR^((MODULUS-1) / (2^s * SMALL_SUBGROUP_BASE^SMALL_SUBGROUP_BASE_ADICITY)) Used for mixed-radix FFT.
Required Methods§
sourcefn add_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
fn add_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
Set a += b.
sourcefn sub_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
fn sub_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
Set a -= b.
sourcefn double_in_place(a: &mut Fp<Self, N>)
fn double_in_place(a: &mut Fp<Self, N>)
Set a = a + a.
sourcefn neg_in_place(a: &mut Fp<Self, N>)
fn neg_in_place(a: &mut Fp<Self, N>)
Set a = -a;
sourcefn mul_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
fn mul_assign(a: &mut Fp<Self, N>, b: &Fp<Self, N>)
Set a *= b.
sourcefn sum_of_products<const T: usize>(
a: &[Fp<Self, N>; T],
b: &[Fp<Self, N>; T]
) -> Fp<Self, N>
fn sum_of_products<const T: usize>( a: &[Fp<Self, N>; T], b: &[Fp<Self, N>; T] ) -> Fp<Self, N>
Compute the inner product <a, b>
.
sourcefn square_in_place(a: &mut Fp<Self, N>)
fn square_in_place(a: &mut Fp<Self, N>)
Set a *= b.
sourcefn from_bigint(other: BigInt<N>) -> Option<Fp<Self, N>>
fn from_bigint(other: BigInt<N>) -> Option<Fp<Self, N>>
Construct a field element from an integer in the range
0..(Self::MODULUS - 1)
. Returns None
if the integer is outside
this range.
sourcefn into_bigint(other: Fp<Self, N>) -> BigInt<N>
fn into_bigint(other: Fp<Self, N>) -> BigInt<N>
Convert a field element to an integer in the range 0..(Self::MODULUS - 1)
.