halo2curves/pasta/
fp.rs

1use std::convert::TryInto;
2
3use halo2derive::impl_field;
4use rand::RngCore;
5use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption};
6
7use crate::{
8    extend_field_legendre, field_bits, impl_binops_additive, impl_binops_calls,
9    impl_binops_multiplicative, impl_from_bool, impl_from_u64, serialize_deserialize_primefield,
10};
11
12// Fp: Pasta base field and Vesta scalar field.
13impl_field!(
14    pasta_base,
15    Fp,
16    modulus = "40000000000000000000000000000000224698fc094cf91b992d30ed00000001",
17    mul_gen = "5",
18    zeta = "12ccca834acdba712caad5dc57aab1b01d1f8bd237ad31491dad5ebdfdfe4ab9",
19    from_uniform = [48, 64],
20    endian = "little",
21);
22
23extend_field_legendre!(Fp);
24impl_binops_calls!(Fp);
25impl_binops_additive!(Fp, Fp);
26impl_binops_multiplicative!(Fp, Fp);
27impl_from_u64!(Fp);
28impl_from_bool!(Fp);
29field_bits!(Fp);
30serialize_deserialize_primefield!(Fp);
31
32#[cfg(test)]
33mod test {
34
35    use super::Fp;
36    use crate::{
37        arith_test, constants_test, from_uniform_bytes_test, legendre_test, serde_test, test,
38    };
39
40    constants_test!(Fp);
41    arith_test!(Fp);
42    legendre_test!(Fp);
43    test!(arith, Fp, sqrt_test, 1000);
44    serde_test!(Fp PrimeFieldBits);
45    from_uniform_bytes_test!(Fp, 1000, L 64, L 48);
46}