Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement Zeromorph #145

Merged
merged 24 commits into from
Dec 6, 2023
Merged

feat: implement Zeromorph #145

merged 24 commits into from
Dec 6, 2023

Commits on Dec 4, 2023

  1. Schoolbook adapted KZG PoC

    Remove toxic waste from setup parameters
    
    Refactorings
    
    ZeroMorph skeleton
    emmorais authored and huitseeker committed Dec 4, 2023
    Configuration menu
    Copy the full SHA
    0b6e246 View commit details
    Browse the repository at this point in the history
  2. feat: provide a non-hiding variant of KZG

    Drafts a non-hiding variant of the KZG PCS on univariate Dense polynomial representations
    
    Details:
    - Changed access levels and ordering for various modules and functions like `sumcheck`, `cpu_best_multiexp`, and `mod kzg;`.
    - Upgraded `halo2curves` version and added new dependencies like `pairing`, `anyhow`, `rand`, and `group`.
    - Leveraged the UniPoly in sumcheck.rs
    - Created `non_hiding_kzg.rs` file, introducing new structures and functionalities like `UVUniversalKZGParam`, `UVKZGProverKey`, `UVKZGPoly`, and `UVKZGPCS` along with their implementation and tests.
    - Modified the import of `Engine` in `kzg.rs` from `halo2curves::pairing::Engine` to `pairing::Engine` (reflecting the new version of halo2curves).
    
    feat: add batch commit / open / prove
    huitseeker committed Dec 4, 2023
    Configuration menu
    Copy the full SHA
    c60f379 View commit details
    Browse the repository at this point in the history
  3. Small subtasks: params, phi, un function, EE

    Minor adjustments
    emmorais authored and huitseeker committed Dec 4, 2023
    Configuration menu
    Copy the full SHA
    345d302 View commit details
    Browse the repository at this point in the history
  4. chore: setup zeromorph

    refactor: Remove kzg and zeromorph provider modules
    huitseeker committed Dec 4, 2023
    Configuration menu
    Copy the full SHA
    890df32 View commit details
    Browse the repository at this point in the history
  5. feat: add openings for Zeromorph

    - Added new data structures and their related functions including the `ZMProverKey`, `ZMVerifierKey`, `ZMCommitment`, `ZMEvaluation`, `ZMProof` and `ZMPCS` in `non_hiding_zeromorph.rs`
    - Implemented new functionalities in `non_hiding_zeromorph.rs` and `spartan/polynomial.rs` to provide better handling of polynomials, including fetching commitments for a polynomial, computing the quotient polynomials of an existing polynomial.
    - Enhanced the `UniPoly` struct in `spartan/sumcheck.rs` with `Index` and `IndexMut` for better coefficient access, and `AddAssign` and `MulAssign` for scalar and self types.
    - Removed and replaced certain elements in `UVUniversalKZGParam` struct in `non_hiding_kzg.rs` for improved flexibility, and included import and implementation of `TranscriptReprTrait`.
    
    draft ZM verify
    
    set up test structure
    
    defer test_quo
    huitseeker committed Dec 4, 2023
    Configuration menu
    Copy the full SHA
    c383552 View commit details
    Browse the repository at this point in the history

Commits on Dec 6, 2023

  1. Configuration menu
    Copy the full SHA
    3ca8908 View commit details
    Browse the repository at this point in the history
  2. feat: Refactor polynomial evaluation methods

    - Temporarily disabled some assertions in both `non_hiding_zeromorph.rs` and `polynomial.rs` for debugging purposes.
    - Introduced `evaluate_opt`, `fix_variables`, and `fix_one_variable_helper` functions in `polynomial.rs` to support multilinear polynomial evaluation and partial evaluation.
    
    fix: add domain separators
    
    - Integrated additional functionality into the ZMPCS implementation in `non_hiding_zeromorph.rs` by adding a protocol name function.
    - Improved security in `non_hiding_zeromorph.rs` by integrating domain separators into transcript's `open` and `verify` functions.
    
    refactor: Refactor code and test performance for NHZM
    
    - Implement `AsRef` trait for `UniPoly` structure in `src/spartan/sumcheck.rs` to facilitate direct access to its coefficients.
    - Refactor code in `src/provider/non_hiding_zeromorph.rs` to directly use `into_iter` in map function when creating `quotients_polys`, avoiding a large clone
    - Enhance test performance in `src/provider/non_hiding_zeromorph.rs` by pre-generating a `universal_setup` for tests, introducing a `max_vars` variable and RNG in the `commit_open_verify_with` test function, and adjusting the range of num_vars used for testing.
    
    fix: adjust APIs & Serialize impls for the Nova traits
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    5f99b78 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    16244a8 View commit details
    Browse the repository at this point in the history
  4. add generic PCS errors

    mpenciak authored and huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    d6971b1 View commit details
    Browse the repository at this point in the history
  5. pp

    wip
    mpenciak authored and huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    ac021fa View commit details
    Browse the repository at this point in the history
  6. fix: adjust type parameters for nontrivial_with_zm test

    fix: ignore panicking test
    
    fix: add doctest for evaluate_opt
    
    fix: remove obsolete comments
    
    chore: move UniPoly methods where they should be
    
    test: make clear current zeromorph operates in monomial basis
    
    - Added an additional test `test_dense_evaliations()` to provide more comprehensive testing for the `evaluate()` and `evaluate_opt()` functions in `MultilinearPolynomial`.
    
    refactor TranscriptReprTrait impl for compat with Commitments
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    fb0d1ef View commit details
    Browse the repository at this point in the history
  7. feat: Implement KZG commitment trait and serialization features

    - Added serialization, deserialization, and Abomonation traits to UVUniversalKZGParam struct in `non_hiding_kzg.rs` file along with implementing comparison and length evaluation traits.
    - Created a new file `kzg_commitment.rs` which implements KZG Commitment Engine and setup, commit functions.
    - Integrated `kzg_commitment` in module `provider` and set up conversions between Commitment and UVKZGCommitment.
    - Enhanced assertion in `minroot_serde.rs` file from clone comparison to dereferenced comparison in MinRoot delay case.
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    314c045 View commit details
    Browse the repository at this point in the history
  8. Use the ZMPCS Evaluation Engine and the KZG Commitment Engine in tests.

    feat: Improve `prove` and `verify` methods in `ZMPCS` struct
    
    - Updated `prove` and `verify` methods in `ZMPCS<E>` struct within `non_hiding_zeromorph.rs` with actual logic for commitment, evaluation, and verification.
    - Adjusted the construction of `ZMCommitment` and `ZMEvaluation` within `prove` and `verify` methods.
    - Commented on portions of the code in `non_hiding_zeromorph.rs` that need further modification and refinement.
    - Modified test value for `test_pp_digest_with` in the `test_supernova_pp_digest` test case to match the new expected output.
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    8f48318 View commit details
    Browse the repository at this point in the history
  9. fix evaluation reversal bug

    fix: remove superfluous eval functions
    
    fix: remove endianness shenanigans
    
    test: add evaluation unit test
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    031e003 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    4d4be63 View commit details
    Browse the repository at this point in the history
  11. feat: Enhance KZG commitment SRS generation efficiency using parallel…

    … computation
    
    - Introduced a new module `util` within the `provider` module, implementing fixed-base MSM,
    - New trait constraint has been imposed for `E::Fr: PrimeFieldBits` within the `non_hiding_zeromorph.rs` file, and usages have been adjusted in the `test` module.
    - Adding the `PrimeFieldBits` import from the `ff` crate and importing `provider::util` from the local crate.
    
    refactor: Refactor utility functions for elliptic curve operations
    
    - Renamed and moved `util.rs` to `fb_msm.rs` under the `provider` directory.
    - documented the FB MSM
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    94c05d8 View commit details
    Browse the repository at this point in the history
  12. Apply comments from code review

    Co-authored-by: Adrian Hamelink <[email protected]>
    huitseeker and adr1anh committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    7217d73 View commit details
    Browse the repository at this point in the history
  13. Improve documentation and testing in non_hiding_zeromorph.rs

    - Enhanced the clarity and accuracy of code comments and documentation in `non_hiding_zeromorph.rs`, specifically within the `ZMPCS` struct's methods.
    - Enriched the `quotients` function's documentation, detailing its mathematical underpinnings
    - Implemented a new rigorous test, `test_quotients`, to ensure the `quotients` function's output satisfies the polynomial identity.
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    a8fb058 View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    a22ed98 View commit details
    Browse the repository at this point in the history
  15. Finish documenting / testing Zeromorph (#142)

    * fix: remove a TODO using RefCast
    
    * fix: remove unsightly clone
    
    * doc: comment intermediate ZM steps
    
    * refactor: Refactor `open` function in zeromorph provider
    
    Extracted the computation of `q_hat` in the `open` function into a new function `batched_lifted_degree_quotient` for more modular code.
    
    * test: test batched_lifted_degree_quotient
    
    Addition of a new test `test_batched_lifted_degree_quotient` to validate batched degree quotient lifting for polynomials.
    
    * refactor: Refine computations in non_hiding_zeromorph.rs
    
    - Overhauled the 'eval_and_quotient_scalars' function with a revised return type with pair of vectors rather than scalar and a vector,
    - correspondingly split scalars `degree_check_q_scalars` and `zmpoly_q_scalars` within the `open` method of `non_hiding_zeromorph.rs`.
    - Adjusted the 'verify' method to accommodate the modified 'eval_and_quotient_scalars' function output changes.
    
    * test: test partially evaluated quotient \zeta_x
    
    - Introduced a new test case `test_partially_evaluated_quotient_zeta` to validate `zeta_x` construction.
    - correct an off-by-one error in the y_k terms
    
    * test: test partially evaluated quotient
    
    - Created a new function `phi` for evaluating using an inefficient formula in `non_hiding_zeromorph.rs`
    - Implemented a new test function `test_partially_evaluated_quotient_z` for validation of `Z_x` computation method in `non_hiding_zeromorph.rs`
    
    * fix: refine q_hat comment
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    d51b051 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    4dee179 View commit details
    Browse the repository at this point in the history
  17. refactor: Improve code readability and error handling in zeromorph

    - Updated and enhanced clarity and consistency of mathematical notation in comments across `non_hiding_kzg.rs` and `non_hiding_zeromorph.rs` files.
    - Implemented error handling in the `ZMPCS::verify` function within the `non_hiding_zeromorph.rs` file.
    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    36be59a View commit details
    Browse the repository at this point in the history
  18. Configuration menu
    Copy the full SHA
    2929e20 View commit details
    Browse the repository at this point in the history
  19. refactor: clean up

    huitseeker committed Dec 6, 2023
    Configuration menu
    Copy the full SHA
    323b57d View commit details
    Browse the repository at this point in the history