use crate::{Field, FieldParameters};
use snarkvm_utilities::biginteger::BigInteger;
use std::str::FromStr;
#[allow(clippy::wrong_self_convention)]
pub trait PrimeField: Field + FromStr {
type Parameters: FieldParameters<BigInteger = Self::BigInteger>;
type BigInteger: BigInteger;
fn from_repr(repr: Self::BigInteger) -> Option<Self>;
fn into_repr(&self) -> Self::BigInteger;
fn from_repr_raw(repr: Self::BigInteger) -> Self;
fn into_repr_raw(&self) -> Self::BigInteger;
fn multiplicative_generator() -> Self;
fn root_of_unity() -> Self;
fn qnr_to_t() -> Self {
Self::root_of_unity()
}
fn size_in_bits() -> usize {
Self::Parameters::MODULUS_BITS as usize
}
fn trace() -> Self::BigInteger {
Self::Parameters::T
}
fn trace_minus_one_div_two() -> Self::BigInteger {
Self::Parameters::T_MINUS_ONE_DIV_TWO
}
fn modulus_minus_one_div_two() -> Self::BigInteger {
Self::Parameters::MODULUS_MINUS_ONE_DIV_TWO
}
}