use ark_ec::models::{ModelParameters, SWModelParameters}; use ark_ff::{biginteger::BigInteger256, field_new, Zero}; use crate::{Fq, Fr}; #[derive(Clone, Default, PartialEq, Eq)] pub struct Parameters; impl ModelParameters for Parameters { type BaseField = Fq; type ScalarField = Fr; } impl SWModelParameters for Parameters { /// COEFF_A = 0 const COEFF_A: Fq = field_new!(Fq, BigInteger256([0x0, 0x0, 0x0, 0x0])); /// COEFF_B = 3 #[rustfmt::skip] const COEFF_B: Fq = field_new!(Fq, BigInteger256([ 0x7a17caa950ad28d7, 0x1f6ac17ae15521b9, 0x334bea4e696bd284, 0x2a1f6744ce179d8e, ])); /// COFACTOR = 1 const COFACTOR: &'static [u64] = &[0x1]; /// COFACTOR_INV = COFACTOR^{-1} mod r = 1 #[rustfmt::skip] const COFACTOR_INV: Fr = field_new!(Fr, BigInteger256([ 0xac96341c4ffffffb, 0x36fc76959f60cd29, 0x666ea36f7879462e, 0xe0a77c19a07df2f, ])); /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) const AFFINE_GENERATOR_COEFFS: (Self::BaseField, Self::BaseField) = (G1_GENERATOR_X, G1_GENERATOR_Y); #[inline(always)] fn mul_by_a(_: &Self::BaseField) -> Self::BaseField { Self::BaseField::zero() } } /// G1_GENERATOR_X = /// 1 #[rustfmt::skip] pub const G1_GENERATOR_X: Fq = field_new!(Fq, BigInteger256([ 0xd35d438dc58f0d9d, 0x0a78eb28f5c70b3d, 0x666ea36f7879462c, 0x0e0a77c19a07df2f, ])); /// G1_GENERATOR_Y = /// 2 #[rustfmt::skip] pub const G1_GENERATOR_Y: Fq = field_new!(Fq, BigInteger256([ 0xa6ba871b8b1e1b3a, 0x14f1d651eb8e167b, 0xccdd46def0f28c58, 0x1c14ef83340fbe5e, ]));