mirror of
https://github.com/arnaucube/circom-compat.git
synced 2026-01-10 16:01:29 +01:00
Feat: Use pre-calculated ConstraintMatrices (#2)
* feat: add function for calculating the coefficients * fix tests / debug coeffs * feat: use groth16 with configurable matrices * test: add no r1cs test * test: add a test to check matrices values * scaffold of the matrix calculation * feat: correctly load and use matrices in the without_r1cs variant * chore: cargo fmt * chore: cargo fmt / lints * ci: do not double run tests * fix: calculate correctly points at inf * test: use correct abicoder v2 types Co-authored-by: Kobi Gurkan <kobigurk@gmail.com>
This commit is contained in:
committed by
GitHub
parent
4e2c2d39dd
commit
11e6d04f3b
@@ -92,6 +92,36 @@ impl WitnessCalculator {
|
||||
Ok(w)
|
||||
}
|
||||
|
||||
pub fn calculate_witness_element<
|
||||
E: ark_ec::PairingEngine,
|
||||
I: IntoIterator<Item = (String, Vec<BigInt>)>,
|
||||
>(
|
||||
&mut self,
|
||||
inputs: I,
|
||||
sanity_check: bool,
|
||||
) -> Result<Vec<E::Fr>> {
|
||||
use ark_ff::{FpParameters, PrimeField};
|
||||
let witness = self.calculate_witness(inputs, sanity_check)?;
|
||||
let modulus = <<E::Fr as PrimeField>::Params as FpParameters>::MODULUS;
|
||||
|
||||
// convert it to field elements
|
||||
use num_traits::Signed;
|
||||
let witness = witness
|
||||
.into_iter()
|
||||
.map(|w| {
|
||||
let w = if w.sign() == num_bigint::Sign::Minus {
|
||||
// Need to negate the witness element if negative
|
||||
modulus.into() - w.abs().to_biguint().unwrap()
|
||||
} else {
|
||||
w.to_biguint().unwrap()
|
||||
};
|
||||
E::Fr::from(w)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
Ok(witness)
|
||||
}
|
||||
|
||||
pub fn get_witness_buffer(&self) -> Result<Vec<u8>> {
|
||||
let ptr = self.instance.get_ptr_witness_buffer()? as usize;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user