diff --git a/src/curve/curve_summation.rs b/src/curve/curve_summation.rs index ad4232ce..8f347eda 100644 --- a/src/curve/curve_summation.rs +++ b/src/curve/curve_summation.rs @@ -190,7 +190,7 @@ mod tests { affine_summation_batch_inversion, affine_summation_pairwise, }; use crate::curve::curve_types::{Curve, ProjectivePoint}; - use crate::curve::secp256k1_curve::Secp256K1; + use crate::curve::secp256k1::Secp256K1; #[test] fn test_pairwise_affine_summation() { diff --git a/src/curve/mod.rs b/src/curve/mod.rs index c65f2acd..6555404e 100644 --- a/src/curve/mod.rs +++ b/src/curve/mod.rs @@ -2,4 +2,4 @@ pub mod curve_adds; pub mod curve_multiplication; pub mod curve_summation; pub mod curve_types; -pub mod secp256k1_curve; +pub mod secp256k1; diff --git a/src/curve/secp256k1_curve.rs b/src/curve/secp256k1.rs similarity index 98% rename from src/curve/secp256k1_curve.rs rename to src/curve/secp256k1.rs index 7b84855b..2fa476e1 100644 --- a/src/curve/secp256k1_curve.rs +++ b/src/curve/secp256k1.rs @@ -42,7 +42,7 @@ mod tests { use num::BigUint; use crate::curve::curve_types::{Curve, ProjectivePoint}; - use crate::curve::secp256k1_curve::Secp256K1; + use crate::curve::secp256k1::Secp256K1; use crate::field::field_types::Field; use crate::field::secp256k1_scalar::Secp256K1Scalar; diff --git a/src/gadgets/secp256k1.rs b/src/gadgets/curve.rs similarity index 63% rename from src/gadgets/secp256k1.rs rename to src/gadgets/curve.rs index 3294a954..83f73a3f 100644 --- a/src/gadgets/secp256k1.rs +++ b/src/gadgets/curve.rs @@ -51,6 +51,46 @@ impl, const D: usize> CircuitBuilder { self.connect_nonnative(&y_squared, &rhs); } + + pub fn curve_neg(&mut self, p: AffinePointTarget) { + let neg_y = self.neg_nonnative(p.y); + AffinePointTarget { + x: p.x, + y: neg_y, + } + } } -mod tests {} +mod tests { + use anyhow::Result; + + + + #[test] + fn test_curve_gadget_is_valid() -> Result<()> { + type F = CrandallField; + const D: usize = 4; + + let config = CircuitConfig::large_config(); + + let pw = PartialWitness::new(); + let mut builder = CircuitBuilder::::new(config); + + let + + let lst: Vec = (0..size * 2).map(|n| F::from_canonical_usize(n)).collect(); + let a: Vec> = lst[..] + .chunks(2) + .map(|pair| vec![builder.constant(pair[0]), builder.constant(pair[1])]) + .collect(); + let mut b = a.clone(); + b.shuffle(&mut thread_rng()); + + builder.assert_permutation(a, b); + + let data = builder.build(); + let proof = data.prove(pw).unwrap(); + + verify(proof, &data.verifier_only, &data.common) + } +} diff --git a/src/gadgets/mod.rs b/src/gadgets/mod.rs index 42b3044c..2518e1ab 100644 --- a/src/gadgets/mod.rs +++ b/src/gadgets/mod.rs @@ -11,7 +11,7 @@ pub mod permutation; pub mod polynomial; pub mod random_access; pub mod range_check; -pub mod secp256k1; +pub mod curve; pub mod select; pub mod sorting; pub mod split_base;