61 Commits

Author SHA1 Message Date
liquan.eth
ac8db99835 update the dependencies & code clean (#196) 2023-07-10 19:12:31 -07:00
Srinath Setty
e76e6bc0f8 Reorganize various Spartan SNARKs and make the direct interface more generic (#195)
* reorganize different variants of spartan and make direct snark more generic

* cargo fmt
2023-07-06 19:51:00 -07:00
Srinath Setty
4087cab1a5 update README.md and version (#194)
* update README.md and version

* move multiexp code to provider/mod.rs

* update README.md

* small edits

* small edits
2023-07-06 13:58:55 -07:00
François Garillot
4b077bcab1 Add Grumpkin cycle implementation (#181)
* bn256+grumpkin from halo2curves

* chore: Integrate halo2curves more extensively

- Extend existing tests with additional test cases using the new curve types

* fix: Assign correct orders to bn256 and grumpkin scalar fields

- Swap scalar orders between grumpkin and bn256 in `impl_traits!` implementation

* test: Finish improving test integration with halo2curves

- Enhances test coverage for `pasta_curves` and `halo2curves`
- Cleans up commented code in `test_ivc_nontrivial` and `test_ivc_nontrivial_with_compression` tests
- Updates relevant test cases in `src/lib.rs` to include new curve tests

* chore: Remove commented-out/uneeded code in bn254_grumpkin.rs

* test: reproduce test_from_label for bn254_grumpkin

- Implement the `from_label_serial` function in bn254_grumpkin provider
- Add a test to compare parallel and serial implementations of `from_label` function

* refactor: Clean up to_coordinate & summarize changes

* refactor: rename bn254_grumpkin -> bn256_grumpkin

* test: Expand testing for public params digest using bn256 and grumpkin

* chore: Update halo2curves dependency in Cargo.toml

- Updated the `halo2curves` dependency in `Cargo.toml` to the latest version `0.1.0` from a specific git branch.

* refactor: Refactor multi-exponentiation methods across providers

- Updated bn256_grumpkin.rs to use the cpu_best_multiexp function from pasta provider instead of its native function.
- Modified visibility of cpu_best_multiexp function in pasta.rs from private to crate level.

* chore: set up dependencies to import the correct getrandom feature on Wasm

---------

Co-authored-by: Leo Alt <leo@ethereum.org>
2023-07-05 16:10:05 -07:00
François Garillot
1e6bf942e2 [refactorings] Leftovers (pot-pourri?) (#184)
* test: compute_path

* refactor: path computation

- Improve path concatenation by utilizing built-in `join` method

* refactor: replace `PartialEq` with derived instance

- Derive `PartialEq` for `SatisfyingAssignment` struct
- Remove redundant manual implementation of `PartialEq`

Cargo-expand generates:
```
        #[automatically_derived]
        impl<G: ::core::cmp::PartialEq + Group> ::core::cmp::PartialEq
        for SatisfyingAssignment<G>
        where
            G::Scalar: PrimeField,
            G::Scalar: ::core::cmp::PartialEq,
            G::Scalar: ::core::cmp::PartialEq,
            G::Scalar: ::core::cmp::PartialEq,
            G::Scalar: ::core::cmp::PartialEq,
            G::Scalar: ::core::cmp::PartialEq,
        {
            #[inline]
            fn eq(&self, other: &SatisfyingAssignment<G>) -> bool {
                self.a_aux_density == other.a_aux_density
                    && self.b_input_density == other.b_input_density
                    && self.b_aux_density == other.b_aux_density && self.a == other.a
                    && self.b == other.b && self.c == other.c
                    && self.input_assignment == other.input_assignment
                    && self.aux_assignment == other.aux_assignment
            }
        }
```

* refactor: avoid default for PhantomData Unit type

* refactor: replace fold with sum where applicable

- Simplify code by replacing `fold` with `sum` in various instances

* refactor: decompression method in sumcheck.rs

* refactor: test functions to use slice instead of vector conversion

* refactor: use more references in functions

- Update parameter types to use references instead of owned values in various functions that do not need them
- Replace cloning instances with references
2023-06-19 16:11:42 -07:00
Chiro Hiro
af886d6ce7 Improve performance of recursive (#163)
* Improve performance of recursive

* Fix the test after rebase

* Fix CI/CD warnings

* Update benchmark to work with new interface of RecursiveSNARK

* Fix example to make sure step 1 is correct

* refactor: Removes unneeded pass-by value in verification

- Update function arguments to use borrowing instead of passing ownership

* Resolve the conflict with upstream branch

* refactor: Avoid extra input cloning in RecursiveSNARK::new

* Update criterion to 0.5.1 to prevent the panic with its plot

* Fix benchmark issue with new recursive_snark instance

* Fix CI/CD warning with

* refactor: Make mutation easier to observe

- Utilize mutable references to Points for better memory management

* chore: Downgrade clippy dependency for compatibility

---------

Co-authored-by: François Garillot <francois@garillot.net>
2023-06-19 12:52:57 -07:00
François Garillot
031738de51 Remove Zlib compression in public parameter computation (#182)
* test: add test for pp computation

* bench: add a digest computation bench

* refactor: Optimize digest computation and update tests

- Remove flate2 dependency from codebase
- Replace ZlibEncoder with bincode::serialize in compute_digest function
- Update test_pp_digest expected results to align with compute_digest changes

Bench results:
```
compute_digest          time:   [1.4451 s 1.4571 s 1.4689 s]
                        change: [-29.357% -27.854% -26.573%] (p = 0.00 < 0.05)
                        Performance has improved.
```
2023-06-12 16:46:02 -07:00
François Garillot
54f758eef3 [test-only] More genericity in tests (#171)
* refactor: make circuit tests generic wrt curves

- Improve modularity by introducing generic `test_recursive_circuit_with` function in `src/circuit.rs`
- Refactor `test_recursive_circuit` to utilize the new function
- Implement type constraints for `test_recursive_circuit_with` function

* refactor: make bellperson tests generic in type of group

- Introduce `test_alloc_bit_with` function utilizing generic types
- Adapt existing `test_alloc_bit` function to use the new `test_alloc_bit_with` function with correct types

* refactor: make the nifs test generic in the type of group

* refactor: make the ivc tests generic in the type of curve

* refactor: simplify generics in tests

* make the keccak tests generic

* make the poseidon tests generic

* make the spartan tests generic
2023-05-26 13:43:35 -07:00
Srinath Setty
afd7403336 Fix cross-curve check and then eliminate an unnecessary instance on the primary curve (#167)
* add a cross-curve consistency check

* eliminate the unused instance in RecursiveSNARK
2023-05-18 10:45:08 -07:00
Srinath Setty
b28aaf70a8 hash of public parameters in the transcript (#168) 2023-05-18 10:19:44 -07:00
Samuel Burnham
cddd707fad chore: update to ff/group 0.13 (#166)
* chore: update to ff/group 0.13 and associated dependencies

Updates:
- zkcrypto/ff, zkcrypto/group to 0.13,
- bellperson to 0.25,
- pasta_curves to 0.5.1, and removes the fil_pasta_curves fork
- pasta-msm should no longer need a fork (WIP)

Adapts source in function, mostly for const usage and API updates.

* expose the portable feature of pasta-MSM

* update pointer to pasta-msm

* Clippy

---------

Co-authored-by: François Garillot <francois@garillot.net>
2023-05-10 12:15:17 -07:00
Srinath Setty
3b3ae70db3 A more optimal preprocessing SNARK (#158)
* a more optimal preprocessing SNARK

* update version

* cleanup; address clippy
2023-03-31 18:54:32 -07:00
Srinath Setty
4aab459050 Batch polynomial evaluations (#154)
* Ability to collect evaluation claims

* defer polynomial evaluation claims

* address cargo clippy
2023-03-27 17:59:52 -07:00
Srinath Setty
7b1bb44e45 spark-based commitments to R1CS matrices (#152)
* spark-based commitments to R1CS matrices

* small fixes
2023-03-20 18:16:06 -07:00
JunheeLee
6ba204401f minor typo fix (#147)
* typo fix

* Comment typos fix

* Update README.md

* Comment typo fix
2023-03-09 14:08:50 -08:00
Srinath Setty
1e4995274b Separate prover and verifier keys in CompressedSNARK (#145)
* checkpoint

* simplify further

* checkpoint

* gens --> ck

* update benches

* address clippy

* cleanup

* update version
2023-03-02 18:36:13 -08:00
Srinath Setty
d53b3e0fc1 simplify trait requirements (#143)
* simplify trait requirements

* update version
2023-02-28 18:21:25 -08:00
Srinath Setty
b97786d291 move IPA-specific methods to the provider (#138) 2023-02-06 18:07:14 -08:00
Srinath Setty
603c1e2a85 traits for a vector commitment engine and a polynomial evaluation engine (#136)
make spartan generic over the evaluation engine

update version

disable Wasm CI check
2023-02-02 16:21:24 -08:00
Samuel Burnham
13964b6f16 Add serde proof serialization (#123)
* Bump commit.

* Bump commit.

* (WIP) Add serde support

* Minor fixes

* Use neptune const generics

* Use git patches

* Impl serde for CompressedSNARK

* Update dependencies, revert to typenum

* Formatting

* Update bellperson-nonnative patch

* Cleanup

* Remove bellperson-nonnative fork

* Switch back to fil_pasta_curves

* Update forked dependencies

* Cleanup

* Remove unnecessary patch

* Update to lurk-pasta-msm

---------

Co-authored-by: porcuquine <porcuquine@users.noreply.github.com>
2023-01-31 10:01:08 -08:00
Srinath Setty
ccc6ccd4c7 Support for arbitrary arity for step circuit's IO (#107)
* support for arbitrary arity for F

* revive MinRoot example

* revive tests

* revive ecdsa

* remove unused code

* use None instead of Some(1u32)

* revive benches

* fix clippy warning
2022-08-16 11:35:17 -07:00
Srinath Setty
0a7cbf925f integrate with neptune's sponge (#105)
* integrate with neptune's sponge

* fix clippy warning

* add checks to ensure at most one squeeze

* add checks to ensure at most one squeeze
2022-08-11 19:03:44 -07:00
Srinath Setty
06192ac3d4 Optimizations (#100)
* avoid creating commitments to zero vectors

* reduce the number of constraints in each iteration from 4 to 3
2022-07-27 14:07:44 -07:00
Srinath Setty
3dc26fd7e4 Simplifications in Nova's RO (#98)
* rename methods for better clarity

* rename

* Bump version
2022-07-25 12:22:41 -07:00
Srinath Setty
87a5b07bdd name changes for improved clarity (#93) 2022-07-20 14:09:25 -07:00
Srinath Setty
35cb03f977 reorganize traits into a module; cut boilerplate code (#91)
use a default implementation for step circuit
2022-07-14 16:15:45 -07:00
Srinath Setty
a04566bb81 MinRoot example improvements (#88)
* support multiple iterations of MinRoot per Nova step

* small edits to println

* fix declaration
2022-07-11 13:00:42 -07:00
Srinath Setty
63f08c0e4a Support non-determinism with a minimal API (#85)
* support non-determinism with small changes to the interface

* update benches to use the new API

* add an example that exercises non-deterministic advice at each step of recursion

* tiny rename

* Address clippy; update version
2022-07-07 12:17:56 -07:00
Srinath Setty
6667d2f8b5 Abstract the RO used in the circuit with traits (#84)
* cleanup RO usage inside the circuit: use traits

* Add a note

* rename types for clarity
2022-07-05 16:24:12 -07:00
Srinath Setty
0863a732ff Add asserts for constraint count (#83)
* Add asserts for constraint count

* switch to Standard strength
2022-07-05 14:50:17 -07:00
Srinath Setty
c29030b2d7 Release Candidate (#82)
* update version and README

* move tests to bellperson adapter and remove tests folder; make bellperson adapter private
2022-07-01 16:03:19 -07:00
Srinath Setty
0ff2e57bfa Spartan variant with an IPA-based polynomial commitment scheme for compressing IVC proofs (#80)
* cleanup code

* compiles

* additional plumbing

* add padding

* Add missing file

* integrate

* add a separate test

* cleanup

* cleanup

* add checks for outer sum-check

* sum-checks pass

* sum-checks pass

* sum-checks pass

* Add polycommit checks to the end

* switch to pasta_msm

* clippy

* remove int_log

* switch to pasta_curves

* clippy

* clippy

* add a special case for bases.len() = 1

* use naive MSM to avoid SIGFE error for smaller MSMs

* add rayon parallelism to naive MSM

* update comment since we already implement it

* address clippy

* cleanup map and reduce code

* add parallelism to final SNARK creation and verification

* add par

* add par

* add par

* add par

* store padded shapes in the parameters

* Address clippy

* pass padded shape in params

* pass padded shape in params

* cargo fmt

* add par

* add par

* Add par

* cleanup with a reorg

* factor out spartan-based snark into a separate module

* create traits for RelaxedR1CSSNARK

* make CompressedSNARK parameterized by a SNARK satisfying our new trait

* fix benches

* cleanup code

* remove unused

* move code to Spartan-based SNARK

* make unused function private

* rename IPA types for clarity

* cleanup

* return error types; rename r_j to r_i

* fix duplicate code
2022-07-01 15:53:00 -07:00
Srinath Setty
a7da105677 IVC proof compression APIs and implementation (#77)
We currently implement a constant-factor compression, but in the future we will provide an exponential reduction in proof sizes
2022-05-27 01:05:01 -07:00
Srinath Setty
0154358469 Verifier's checks (#73)
* begin adding verification checks

* add verifier checks

* remove unnecessary dead_code
2022-05-18 15:42:02 +05:30
Srinath Setty
4970826f0f small cleanup (#71) 2022-05-18 08:23:07 +05:30
Srinath Setty
188a7c5640 Add a non-trivial step circuit (#66) 2022-05-17 06:08:42 -07:00
Srinath Setty
1fd4eee2b6 Recursion implementation (#65)
* recursion attempt

* address clippy

* initialize the running instance and witness of the primary correctly

* add asserts for debugging

* fix a bug in AllocatedPoint

* add debug statements

* fix an issue with how we inputize hashes; remove debug statements

* rename

* cleanup

* speedup tests

* require step_circuit implementors to provide a way to execute step computation
2022-05-17 05:59:29 -07:00
Srinath Setty
4311ad1c1b cleanup trivial (#63) 2022-05-15 06:59:10 -07:00
Srinath Setty
07b3c4289b Recursion APIs (#62)
* recursion APIs (WIP)

* PublicParams struct and associated new

* fix build

* draft of APIs

* start with tests

* add a test case for the base case of recursion
2022-05-15 12:05:18 +05:30
Srinath Setty
e8a6e45b3c move StepSNARK to nifs.rs in prep for recursion APIs (#61)
* move StepSNARK to nifs.rs in prep for recursion APIs

* clippy
2022-05-14 18:59:42 -07:00
Srinath Setty
36d4be2145 take ro_constants as a parameter (#58) 2022-05-14 10:50:10 +05:30
Srinath Setty
677fe23673 Switch RO to use the one in the Group trait (#54)
* switch to RO in the Group trait

* simplify compression

* absorb IO as bignum for relaxedR1CS
2022-05-13 01:49:34 -07:00
Srinath Setty
ccc6dc3a04 Truncate digest bits (#50)
* apply a hash function before adding to transcript

* truncate shape_digest into 250 bits

* add missing file

* fix clippy

* cargo fmt
2022-05-12 22:08:43 -07:00
Srinath Setty
0d53db18e3 implement transcript methods for various types (#49)
* implement transcript methods for various types

* address clippy

* add shape to transcript
2022-05-11 23:58:43 -07:00
Srinath Setty
751b3434ec make gadgets public, expose coords, cleanup (#39)
* make gadgets public, expose coords, cleanup

* fix clippy
2022-04-25 16:11:56 -07:00
iontzialla
4656a7179d Refactor circuit code (#37)
* update crate versions

* refactor

* small tweaks

* run cargo fmt

* fix comments

* remove unused code

* address clippy

Co-authored-by: Srinath Setty <srinath@microsoft.com>
2022-04-25 14:54:53 -07:00
Srinath Setty
beb6dace82 add tinyr1cs example using bellperson (#33)
* add tinyr1cs example using bellperson

* clippy
2022-04-21 14:41:05 -07:00
Srinath Setty
9a44d06aec PrimeField --> ff::PrimeField (#28)
* PrimeField --> ff::PrimeField

* cargo fmt
2022-04-14 07:48:55 -07:00
Srinath Setty
e47b6148f4 Verifier circuit (#23)
* ECC scalar multiplication (first draft)

* fix clippy nits

* start implementing the ro gadget: 1st design Poseidon + truncate

* truncate to 128 bits

* implement add + double in constraints

* finish implementing constraints for ecc

* cargo fmt

* input of smul should be an array of bits

* cleanup ro a bit. Make the challenge returned be a vec of allocated bits

* switch to neptune 6.0

* start implementing high level circuit

* incomplete version of the verifier circuit with many TODOS

* optimize ecc ops. add i ==0 case to the circuit

* fix 0/1 constants at the circuit

* wrap CompressedGroupElement of Pallas and Vesta

* cargo fmt

* generate poseidon constants once instead of every time we call get_challenge

* Implement RO-based poseidon to use outside of circuit. Reorganize the repo

* add inner circuit to verification circuit

* start adding folding of the io. there is an error in the first call to  mult_mod

* add test to check that bellperson-nonnative is compatible with nova

* remove swap file

* add another test that fails

* add inputs to the circuits in tests

* rename q to m in circuit.rs. add more tests in test_bellperson_non_native. change a in test_mult_mod to expose error

* push test for equal_with_carried. fix the issue is src/r1cs.rs

* cargo fmt + update the verifier circuit: add folding of X and update all hashes with X

* make limb_width and n_limbs parameters

* make params part of h1

* allocate the field order as constant. add check that z0 == zi when i == 0

* fix error in test_poseidon_ro

* remove merge error

* small fixes

* small fixes to comments

* clippy lints

* small edits; rename tests

* move inputize before from_num

* _limbs --> _bn

* _limbs --> _bn

Co-authored-by: Ioanna <iontzialla@gmail.com>
2022-04-07 14:53:57 -07:00
Srinath Setty
e55d4f680b remove test feature (we don't seem to use it) (#17) 2022-02-18 14:14:54 -08:00