Trait scuttlebutt::field::FiniteField  
source · [−]pub trait FiniteField: FiniteRing + DivAssign<Self> + Div<Self, Output = Self> {
    type PrimeField: PrimeFiniteField + IsSubFieldOf<Self>;
    type NumberOfBitsInBitDecomposition: ArrayLength<bool> + ArrayLength<F2>;
    const GENERATOR: Self;
    fn polynomial_modulus() -> Polynomial<Self::PrimeField>;
    fn bit_decomposition(
        &self
    ) -> GenericArray<bool, Self::NumberOfBitsInBitDecomposition>;
    fn inverse(&self) -> Self;
    fn decompose<T: FiniteField + IsSubFieldOf<Self>>(
        &self
    ) -> GenericArray<T, DegreeModulo<T, Self>> { ... }
    fn from_subfield<T: FiniteField + IsSubFieldOf<Self>>(
        arr: &GenericArray<T, DegreeModulo<T, Self>>
    ) -> Self { ... }
}Expand description
Types that implement this trait are finite fields.
Required Associated Types
sourcetype PrimeField: PrimeFiniteField + IsSubFieldOf<Self>
type PrimeField: PrimeFiniteField + IsSubFieldOf<Self>
The prime-order subfield of the finite field.
sourcetype NumberOfBitsInBitDecomposition: ArrayLength<bool> + ArrayLength<F2>
type NumberOfBitsInBitDecomposition: ArrayLength<bool> + ArrayLength<F2>
The number of bits in the bit decomposition of any element of this finite field.
This number should be equal to (for the field $\textsf{GF}(p^r)$):
\lceil\log_2(p)\rceil \cdot rSee Self::bit_decomposition for the exact meaning of bit decomposition
Required Associated Constants
Required Methods
sourcefn polynomial_modulus() -> Polynomial<Self::PrimeField>
fn polynomial_modulus() -> Polynomial<Self::PrimeField>
Multiplication over field elements should be reduced over this polynomial.
sourcefn bit_decomposition(
    &self
) -> GenericArray<bool, Self::NumberOfBitsInBitDecomposition>
fn bit_decomposition(
    &self
) -> GenericArray<bool, Self::NumberOfBitsInBitDecomposition>
Decompose the given field element into bits.
This bit decomposition should be done according to Weng et al., section 5.
Let $p$ be a positive prime. Let $r$ be a positive integer.
Let $m=\lceil\log_2 p\rceil$, the number of bits needed to represent $p$.
Let $F = \textsf{GF}(p^r)$ be the current field (the field represented by Self).
Let $v$ be a vector of $r \cdot m$ elements of $F$.
Let $v = (v_0, v_1, \ldots, v_{rm}) \in F^{rm}$.
We define (don’t worry about $g$, we’re just keeping the syntax of the paper)
$\langle g,v\rangle \in F$ using the polynomial representation of F, below:
\langle g, v \rangle(x) \coloneqq
\sum\limits_{i=0}^{r-1} \left( x^i \cdot \sum\limits_{j=1}^{m-1}
2^j \cdot v_{i \cdot m + j}
\right )Let $f \in F$.
Let $b \in \{0,1\}^{rm} \subseteq F^{rm}$ (that is, a 0/1 vector where 0/1 are field
elements of $F$), such that $\langle g, b \rangle = f$.
Invoking the bit_decomposition function on f should yield the vector $b$ where a 0
element of $b$ corresponds to false and a 1 element corresponds to true.
Provided Methods
sourcefn decompose<T: FiniteField + IsSubFieldOf<Self>>(
    &self
) -> GenericArray<T, DegreeModulo<T, Self>>
fn decompose<T: FiniteField + IsSubFieldOf<Self>>(
    &self
) -> GenericArray<T, DegreeModulo<T, Self>>
Decompose self into an array of T elements where T is a subfield of Self.
See IsSubFieldOf for more info.
sourcefn from_subfield<T: FiniteField + IsSubFieldOf<Self>>(
    arr: &GenericArray<T, DegreeModulo<T, Self>>
) -> Self
fn from_subfield<T: FiniteField + IsSubFieldOf<Self>>(
    arr: &GenericArray<T, DegreeModulo<T, Self>>
) -> Self
Create a field element from an array of subfield T elements.
See IsSubFieldOf for more info.