Skip to main content

nova_snark/provider/
secp_secq.rs

1//! This module implements the Nova traits for `secp::Point`, `secp::Scalar`, `secq::Point`, `secq::Scalar`.
2use crate::{
3  impl_traits,
4  provider::{
5    msm::{msm, msm_small, msm_small_with_max_num_bits},
6    traits::{DlogGroup, DlogGroupExt},
7  },
8  traits::{Group, PrimeFieldExt, TranscriptReprTrait},
9};
10use digest::{ExtendableOutput, Update};
11use ff::FromUniformBytes;
12use halo2curves::{
13  group::{cofactor::CofactorCurveAffine, Curve, Group as AnotherGroup},
14  secp256k1::{Secp256k1, Secp256k1Affine},
15  secq256k1::{Secq256k1, Secq256k1Affine},
16  CurveAffine, CurveExt,
17};
18use num_bigint::BigInt;
19use num_integer::Integer;
20use num_traits::{Num, ToPrimitive};
21use rayon::prelude::*;
22use sha3::Shake256;
23
24/// Re-exports that give access to the standard aliases used in the code base, for secp
25pub mod secp256k1 {
26  pub use halo2curves::secp256k1::{
27    Fp as Base, Fq as Scalar, Secp256k1 as Point, Secp256k1Affine as Affine,
28  };
29}
30
31/// Re-exports that give access to the standard aliases used in the code base, for secq
32pub mod secq256k1 {
33  pub use halo2curves::secq256k1::{
34    Fp as Base, Fq as Scalar, Secq256k1 as Point, Secq256k1Affine as Affine,
35  };
36}
37
38impl_traits!(
39  secp256k1,
40  Secp256k1,
41  Secp256k1Affine,
42  "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43  "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"
44);
45
46impl_traits!(
47  secq256k1,
48  Secq256k1,
49  Secq256k1Affine,
50  "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
51  "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"
52);