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
12impl_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}