diff --git a/src/gadgets/biguint.rs b/src/gadgets/biguint.rs index 05a5406e..fb7eb4e0 100644 --- a/src/gadgets/biguint.rs +++ b/src/gadgets/biguint.rs @@ -110,8 +110,8 @@ impl, const D: usize> CircuitBuilder { // Subtract two `BigUintTarget`s. We assume that the first is larger than the second. pub fn sub_biguint(&mut self, a: &BigUintTarget, b: &BigUintTarget) -> BigUintTarget { - let num_limbs = a.limbs.len(); let (a, b) = self.pad_biguints(a, b); + let num_limbs = a.limbs.len(); let mut result_limbs = vec![]; diff --git a/src/gadgets/curve.rs b/src/gadgets/curve.rs index eeb966a5..abb1b39a 100644 --- a/src/gadgets/curve.rs +++ b/src/gadgets/curve.rs @@ -155,4 +155,30 @@ mod tests { verify(proof, &data.verifier_only, &data.common).unwrap(); } + + #[test] + fn test_curve_double() -> Result<()> { + type F = CrandallField; + const D: usize = 4; + + let config = CircuitConfig::large_config(); + + let pw = PartialWitness::new(); + let mut builder = CircuitBuilder::::new(config); + + let g = Secp256K1::GENERATOR_AFFINE; + let g_target = builder.constant_affine_point(g); + let neg_g_target = builder.curve_neg(&g_target); + + let double_g = builder.curve_double(&g_target); + let double_neg_g = builder.curve_double(&neg_g_target); + + builder.curve_assert_valid(&double_g); + builder.curve_assert_valid(&double_neg_g); + + let data = builder.build(); + let proof = data.prove(pw).unwrap(); + + verify(proof, &data.verifier_only, &data.common) + } }