halo2curves/bls12381/
fr.rs

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