lambdaworks_math/elliptic_curve/edwards/curves/bandersnatch/
field.rs

1//! Base field of bandersantch -- which is also the scalar field of BLS12-381 curve.
2
3use crate::{
4    field::{
5        element::FieldElement,
6        fields::montgomery_backed_prime_fields::{IsModulus, MontgomeryBackendPrimeField},
7    },
8    unsigned_integer::element::U256,
9};
10
11pub const BANDERSNATCH_PRIME_FIELD_ORDER: U256 =
12    U256::from_hex_unchecked("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001");
13
14#[derive(Clone, Debug)]
15pub struct FqConfig;
16
17impl IsModulus<U256> for FqConfig {
18    const MODULUS: U256 = BANDERSNATCH_PRIME_FIELD_ORDER;
19}
20
21pub type FqField = MontgomeryBackendPrimeField<FqConfig, 4>;
22
23impl FieldElement<FqField> {
24    pub fn new_base(a_hex: &str) -> Self {
25        Self::new(U256::from(a_hex))
26    }
27}
28pub type FqElement = FieldElement<FqField>;