arnaucube
186766c348
Fit Nova+CycleFold into `FoldingScheme` trait & Add `examples/` for folding SHA256 circuit ( #64 )
* Update FoldingSchemes trait, fit Nova+CycleFold
- update lib.rs's `FoldingScheme` trait interface
- fit Nova+CycleFold into the `FoldingScheme` trait
- refactor `src/nova/*`
* Add `examples` dir, with Nova's `FoldingScheme` example
* polishing
* expose poseidon_test_config outside tests
1 year ago
arnaucube
47e47cc2af
Add CommitmentProver trait, and add KZG prover to it ( #62 )
* Add KZG commitment scheme adapted to vector commitment
Add KZG commitment scheme adapted to vector commitment
Also move the `src/pedersen.rs` into `src/commitment/pedersen.rs` where
it will coexist with `kzg.rs` and the trait defined in
`src/commitment/mod.rs`.
* Adapt Pedersen into the new CommitmentProver trait
* add CommitmentProver (Pedersen&KZG) homomorphic property test
* polishing
* Use divide_with_q_and_r, rename skip_first_zero_coeffs
Co-authored-by: han0110 <tinghan0110@gmail.com>
---------
Co-authored-by: han0110 <tinghan0110@gmail.com>
1 year ago
Pierre
05f49918ac
Feature/sumcheck circuit ( #47 )
* feat: init sumcheck.rs
* chore: rename
* feat: update lib and add trait for transcript with vec storing challenges
* bugfix: mut self ref of transcript
* feat: tentative sum-check using poseidon
* refactor: remove extension trait and use initial trait
* refactor: stop using extension trait, use initial Transcript trait
* feat: generic over CurveGroup sum-check verifier and algorithm
* feat: implement generic sum-check veriy
* bugfix: cargo clippy --fix
* chore: cargo fmt
* feat: (unstable) sum-check implementation
* feat: start benches
* chore: run clippy
* chore: run cargo fmt
* feat: add sum-check tests + benches
* chore: clippy + fmt
* chore: remove unstable sumcheck
* chore: delete duplicated sum-check code
* chore: remove deleted sum-check code from lib.rs imports
* feat: remove non generic traits, implement sum-check with generic trait and add test
* chore: remove non-generic struct
* chore: remove non generic verifier
* feat: make nifms generic over transcript and update to use poseidon transcript
* chore: cargo fmt
* chore: remove tmp benches
* chore: update cargo.toml
* refactor: remove Generic suffix
* feat: prover state generic over CurveGroup
* chore: disable clippy type complexity warning
* refactor: remove Transcript type and espresso transcript dependency
* refactor: SumCheckProver generic over CurveGroup
* feat: init sumcheck.rs
* chore: rename
* feat: update lib and add trait for transcript with vec storing challenges
* bugfix: mut self ref of transcript
* feat: tentative sum-check using poseidon
* refactor: stop using extension trait, use initial Transcript trait
* feat: generic over CurveGroup sum-check verifier and algorithm
* feat: implement generic sum-check veriy
* bugfix: cargo clippy --fix
* chore: cargo fmt
* feat: (unstable) sum-check implementation
* feat: start benches
* chore: run clippy
* chore: run cargo fmt
* feat: add sum-check tests + benches
* chore: clippy + fmt
* chore: remove unstable sumcheck
* chore: delete duplicated sum-check code
* chore: remove deleted sum-check code from lib.rs imports
* feat: remove non generic traits, implement sum-check with generic trait and add test
* chore: remove non-generic struct
* chore: remove non generic verifier
* feat: make nifms generic over transcript and update to use poseidon transcript
* chore: cargo fmt
* chore: remove tmp benches
* chore: update cargo.toml
* refactor: remove Generic suffix
* feat: prover state generic over CurveGroup
* chore: disable clippy type complexity warning
* refactor: remove Transcript type and espresso transcript dependency
* refactor: SumCheckProver generic over CurveGroup
* feat: adds `compute_lagrange_poly`, returning a `DensePolynomial` to extract coeffs from
* chore: add assert on interpolated poly degree vs initial poly degree
* refactor: use `compute_lagrange_poly` in `SumCheckVerifier` instead of `interpolate_uni_poly`
* refactor: have `TranscriptVar` be generic over `CurveGroup` for consistency
* refactor: change back to being generic over field
* feat: start to use `PoseidonTranscriptVar` struct
* chore: add line to eof for `Cargo.toml`
* chore: naming consistency with espresso/sum_check folder
* bugfix: add error handling on sum-check prove and verify
* chore: clippy fix
* chore: add line at eof
* feat: switch to using coeffs instead of evals in sum-check
* bugfix: tmp remove sanity check in nimfs
* refactor: update sanity check
* refactor: update verifier evaluation form + add comment
* chore: run clippy
* fix: correct merge artifacts
* feat: verify circuit passing
* refactor: change naming to use the `Gadget` suffix, update `verify_sumcheck` to not have `&self` as first argument, update test
* feat: testing on polynomials with various number of variables
* refactor: update method name
* fix: avoid rust-analyzer from complaining
* fix: fix clippy complains
* chore: cargo clippy
* chore: udpate arg name for `SumCheckVerifierGadget`
* refactor: remove unnecessary cloning in sumcheck circuit
* refactor: impl `get_poly_vars_from_sumcheck_proof` for `IOPProof`
* chore: group imports
* refactor: update `P(0) + P(1)` and name it `eval`
* chore: clippy + fmt
* refactor: move `compute_lagrange_poly` to `utils`
* fix: wrong import
* chore: cargo fmt
* refactor: absorb num vars and max degree within sumcheck circuit
* refactor: update name to `compute_lagrange_interpolated_poly` and add comment
* feat: create `IOPProofVar`, which implements the `AllocVar` trait
* fix: clippy allow `type_complexity` on return type of `SumCheckVerifierGadget`
* refactor: use `VPAuxInfo` instead of virtual type, remove `_` prefix in params name
* feat: add tests on computed & returned values from `verify`
* refactor: use `new_witness` instead of `new_variable`
Co-authored-by: arnaucube <root@arnaucube.com>
* chore: clippy
* fix: remove `unwrap()` within `verify()`
Co-authored-by: arnaucube <root@arnaucube.com>
* chore: add comment on `unwrap()`
* refactor: move `compute_lagrange_interpolated_poly` tests to `lagrange_poly.rs`
---------
Co-authored-by: arnaucube <root@arnaucube.com>
1 year ago
Pierre
876e23c159
Feature/sumcheck ( #40 )
* feat: init sumcheck.rs
* chore: rename
* feat: update lib and add trait for transcript with vec storing challenges
* bugfix: mut self ref of transcript
* feat: tentative sum-check using poseidon
* refactor: remove extension trait and use initial trait
* refactor: stop using extension trait, use initial Transcript trait
* feat: generic over CurveGroup sum-check verifier and algorithm
* feat: implement generic sum-check veriy
* bugfix: cargo clippy --fix
* chore: cargo fmt
* feat: (unstable) sum-check implementation
* feat: start benches
* chore: run clippy
* chore: run cargo fmt
* feat: add sum-check tests + benches
* chore: clippy + fmt
* chore: remove unstable sumcheck
* chore: delete duplicated sum-check code
* chore: remove deleted sum-check code from lib.rs imports
* feat: remove non generic traits, implement sum-check with generic trait and add test
* chore: remove non-generic struct
* chore: remove non generic verifier
* feat: make nifms generic over transcript and update to use poseidon transcript
* chore: cargo fmt
* chore: remove tmp benches
* chore: update cargo.toml
* refactor: remove Generic suffix
* feat: prover state generic over CurveGroup
* chore: disable clippy type complexity warning
* refactor: remove Transcript type and espresso transcript dependency
* refactor: SumCheckProver generic over CurveGroup
* chore: add line to eof for `Cargo.toml`
* bugfix: add error handling on sum-check prove and verify
* chore: clippy fix
* chore: add line at eof
* fix: use `map_err` and call `to_string()` on `PolyIOPErrors`
1 year ago
arnaucube
8edea23c2f
Add Pedersen::{commit,open,verify} MSM error handling ( #34 )
1 year ago
arnaucube
13e471aeaf
add error handling to several pending methods ( #30 )
1 year ago
arnaucube
8256c27609
Port/hypernova multifolding ( #10 )
* Port HyperNova's multifolding from https://github.com/privacy-scaling-explorations/multifolding-poc adapting and refactoring some of its methods and structs.
Note: adapted mle.rs methods from dense to sparse repr.
Co-authored-by: George Kadianakis <desnacked@riseup.net>
* HyperNova: move CCS struct outside of LCCCS & CCCS
HyperNova nimfs: move CCS structure outside of LCCCS & CCCS, to avoid
carrying around the whole CCS and duplicating data when is not needed.
Also add feature flags for the folding schemes.
---------
Co-authored-by: George Kadianakis <desnacked@riseup.net>
1 year ago