* All tests pass under circom-2 feature flag
- Check for version in WASM, default to version 1
- Include Circom1 when Circom 2 feature flag is enabled
Currently a lot of code duplication. Once Circom-2 is more stable and
proven to work in the wild, feature flag can be removed.
* Separate Circom 1 and Circom2 witness calculation
* Cleanup
* WitnessCalculator helpers for Circom 1 and 2
Also make helper fn private
* Move comment
* Fix expression return
* cargo fmt
* Add cargo test circom-2 to ci
* Improve r1cs_reader for Circom 2
Shamelessly taken from https://github.com/poma/zkutil/pull/7/files by @lispc
* Document Seek type restriction
* Doc linter: use automatic links
* Use iter for iterating over sections
* Better error handling with ok_or_else
* Revert "Use iter for iterating over sections"
This reverts commit bc88c726590e250c2e042e9d4b74b77e294e32ec.
* Import circom-2 test vectors
* Add failing test under feature flag
* Add exceptionHandler
* Add showSharedRWMemory
* Add getFieldNumLen32 and disable getFrLen
* Add getVersion
Also print version, n32
* Add getRawPrime
- Disable getPtrRawPrime
- Write as conditional cfg code blocks
* Refactor cfg code blocks
* Add readSharedRWMemory and get prime from WASM mem
- Add fromArray32 convenience function
* WIP: Debug R1CSfile header
field_size in header is 1, not 32 as expected
Don't see anything recently changed here:
https://github.com/iden3/r1csfile/blob/master/src/r1csfile.js (used by snarkjs)
But this seems new: 0149dc0643/constraint_writers/src/r1cs_writer.rs
* Add CircomVersion struct to Wasm
* XXX: Enum test
* Trait version
* Move traits to Circom, CircomBase, Circom2
* Simplify Wasm struct and remove version
* Feature gate Circom1/Circom2 traits
* Use cfg_if for witness calculation
Make normal dependency
* Fix visibilty for both test paths
* Remove println
Can introduce tracing separately
* refactor
* Make clippy happy with imports, unused variables
* Early exit in error callback from Wasm
This avoids Wasm execution hanging due to problems such as wrong public
input.
Mimics circom_runtime behaviour with less detailed debug information.
See https://github.com/iden3/circom_runtime/blob/master/js/witness_calculator.js#L52-L64
Adds test for wrong public input. Without early exit, the test stalls.
With it, the Circom build step fails as expected.
* chore: clean up error handling
* ci: add caching
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* 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>