halo2curves/secp256k1/
fp.rs

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