arnaucube
arnaucube/hyperplonkPublic Self-hosted repository
Merge pull request #122 from EspressoSystems/open-source

open source under MIT license
Mat R 1577341+Ancient123@users.noreply.github.com
Tue, 24 Jan 2023 08:48:29 -0700
commit

70b0df5c52fd07a0c63ba397bcd9ed596ef282b3

parent

69070fce66d73ab48071a131b60e9fad84fa11e0

48 files changed, 277 insertions(+), 27 deletions(-)

jump to
A LICENSE

@@ -0,0 +1,21 @@

+The MIT License (MIT) + +Copyright (c) 2022 Espresso Systems (espressosys.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
M arithmetic/benches/bench.rs → arithmetic/benches/bench.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + #[macro_use] extern crate criterion;
M arithmetic/src/errors.rs → arithmetic/src/errors.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Error module. use ark_std::string::String;
M arithmetic/src/lib.rs → arithmetic/src/lib.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + mod errors; mod multilinear_polynomial; mod univariate_polynomial;
M arithmetic/src/multilinear_polynomial.rs → arithmetic/src/multilinear_polynomial.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use crate::{util::get_batched_nv, ArithErrors}; use ark_ff::{Field, PrimeField}; use ark_poly::MultilinearExtension;
M arithmetic/src/univariate_polynomial.rs → arithmetic/src/univariate_polynomial.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + // TODO: remove #![allow(dead_code)]
M arithmetic/src/util.rs → arithmetic/src/util.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use ark_ff::PrimeField; use ark_std::log2;
M arithmetic/src/virtual_polynomial.rs → arithmetic/src/virtual_polynomial.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! This module defines our main mathematical object `VirtualPolynomial`; and //! various functions associated with it.
M hyperplonk/benches/bench.rs → hyperplonk/benches/bench.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use std::{fs::File, io, time::Instant}; use ark_bls12_381::{Bls12_381, Fr};
M hyperplonk/src/custom_gate.rs → hyperplonk/src/custom_gate.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use ark_std::cmp::max; /// Customized gate is a list of tuples of
M hyperplonk/src/errors.rs → hyperplonk/src/errors.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Error module. use arithmetic::ArithErrors;
M hyperplonk/src/lib.rs → hyperplonk/src/lib.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Main module for the HyperPlonk SNARK. use ark_ec::PairingEngine;
M hyperplonk/src/mock.rs → hyperplonk/src/mock.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use arithmetic::identity_permutation; use ark_ff::PrimeField; use ark_std::{log2, test_rng};
M hyperplonk/src/prelude.rs → hyperplonk/src/prelude.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + pub use crate::{ custom_gate::CustomizedGates, errors::HyperPlonkErrors, mock::MockCircuit, selectors::SelectorColumn, witness::WitnessColumn, HyperPlonkSNARK,
M hyperplonk/src/selectors.rs → hyperplonk/src/selectors.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use crate::{build_mle, errors::HyperPlonkErrors}; use ark_ff::PrimeField; use ark_poly::DenseMultilinearExtension;
M hyperplonk/src/snark.rs → hyperplonk/src/snark.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use crate::{ errors::HyperPlonkErrors, structs::{HyperPlonkIndex, HyperPlonkProof, HyperPlonkProvingKey, HyperPlonkVerifyingKey},
M hyperplonk/src/structs.rs → hyperplonk/src/structs.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Main module for the HyperPlonk PolyIOP. use crate::{custom_gate::CustomizedGates, prelude::HyperPlonkErrors, selectors::SelectorColumn};
M hyperplonk/src/utils.rs → hyperplonk/src/utils.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use crate::{ custom_gate::CustomizedGates, errors::HyperPlonkErrors, structs::HyperPlonkParams, witness::WitnessColumn,
M hyperplonk/src/witness.rs → hyperplonk/src/witness.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use crate::{build_mle, errors::HyperPlonkErrors}; use ark_ff::PrimeField; use ark_poly::DenseMultilinearExtension;
M subroutines/benches/iop_bench.rs → subroutines/benches/iop_bench.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use arithmetic::{identity_permutation_mles, VPAuxInfo, VirtualPolynomial}; use ark_bls12_381::{Bls12_381, Fr}; use ark_poly::{DenseMultilinearExtension, MultilinearExtension};
M subroutines/benches/pcs_bench.rs → subroutines/benches/pcs_bench.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use ark_bls12_381::{Bls12_381, Fr}; use ark_ff::UniformRand; use ark_poly::{DenseMultilinearExtension, MultilinearExtension};
M subroutines/src/lib.rs → subroutines/src/lib.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + pub mod pcs; pub mod poly_iop;
M subroutines/src/pcs/errors.rs → subroutines/src/pcs/errors.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Error module.
M subroutines/src/pcs/mod.rs → subroutines/src/pcs/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + mod errors; mod multilinear_kzg; mod structs;
M subroutines/src/pcs/multilinear_kzg/batching.rs → subroutines/src/pcs/multilinear_kzg/batching.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Sumcheck based batch opening and verify commitment. // TODO: refactoring this code to somewhere else // currently IOP depends on PCS because perm check requires commitment.
M subroutines/src/pcs/multilinear_kzg/mod.rs → subroutines/src/pcs/multilinear_kzg/mod.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Main module for multilinear KZG commitment scheme
M subroutines/src/pcs/multilinear_kzg/srs.rs → subroutines/src/pcs/multilinear_kzg/srs.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Implementing Structured Reference Strings for multilinear polynomial KZG use crate::pcs::{
M subroutines/src/pcs/multilinear_kzg/util.rs → subroutines/src/pcs/multilinear_kzg/util.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Useful utilities for KZG PCS use ark_ff::PrimeField;
M subroutines/src/pcs/prelude.rs → subroutines/src/pcs/prelude.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Prelude pub use crate::pcs::{
M subroutines/src/pcs/structs.rs → subroutines/src/pcs/structs.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. use ark_ec::PairingEngine; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Read, SerializationError, Write};
M subroutines/src/pcs/univariate_kzg/mod.rs → subroutines/src/pcs/univariate_kzg/mod.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Main module for univariate KZG commitment scheme
M subroutines/src/pcs/univariate_kzg/srs.rs → subroutines/src/pcs/univariate_kzg/srs.rs

@@ -1,8 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Implementing Structured Reference Strings for univariate polynomial KZG
M subroutines/src/poly_iop/errors.rs → subroutines/src/poly_iop/errors.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Error module. use crate::pcs::prelude::PCSError;
M subroutines/src/poly_iop/mod.rs → subroutines/src/poly_iop/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + use ark_ff::PrimeField; use std::marker::PhantomData;
M subroutines/src/poly_iop/perm_check/mod.rs → subroutines/src/poly_iop/perm_check/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Main module for the Permutation Check protocol use self::util::computer_nums_and_denoms;
M subroutines/src/poly_iop/perm_check/util.rs → subroutines/src/poly_iop/perm_check/util.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! This module implements useful functions for the permutation check protocol. use crate::poly_iop::errors::PolyIOPErrors;
M subroutines/src/poly_iop/prelude.rs → subroutines/src/poly_iop/prelude.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + pub use crate::poly_iop::{ errors::PolyIOPErrors, perm_check::PermutationCheck, prod_check::ProductCheck, structs::IOPProof, sum_check::SumCheck, utils::*, zero_check::ZeroCheck, PolyIOP,
M subroutines/src/poly_iop/prod_check/mod.rs → subroutines/src/poly_iop/prod_check/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Main module for the Product Check protocol use crate::{
M subroutines/src/poly_iop/prod_check/util.rs → subroutines/src/poly_iop/prod_check/util.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! This module implements useful functions for the product check protocol. use crate::poly_iop::{errors::PolyIOPErrors, structs::IOPProof, zero_check::ZeroCheck, PolyIOP};
M subroutines/src/poly_iop/structs.rs → subroutines/src/poly_iop/structs.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! This module defines structs that are shared by all sub protocols. use arithmetic::VirtualPolynomial;
M subroutines/src/poly_iop/sum_check/mod.rs → subroutines/src/poly_iop/sum_check/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! This module implements the sum check protocol. use crate::poly_iop::{
M subroutines/src/poly_iop/sum_check/prover.rs → subroutines/src/poly_iop/sum_check/prover.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Prover subroutines for a SumCheck protocol. use super::SumCheckProver;
M subroutines/src/poly_iop/sum_check/verifier.rs → subroutines/src/poly_iop/sum_check/verifier.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Verifier subroutines for a SumCheck protocol. use super::{SumCheckSubClaim, SumCheckVerifier};
M subroutines/src/poly_iop/utils.rs → subroutines/src/poly_iop/utils.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! useful macros. /// Takes as input a struct, and converts them to a series of bytes. All traits
M subroutines/src/poly_iop/zero_check/mod.rs → subroutines/src/poly_iop/zero_check/mod.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Main module for the ZeroCheck protocol. use std::fmt::Debug;
M transcript/src/errors.rs → transcript/src/errors.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Error module. use ark_std::string::String;
M transcript/src/lib.rs → transcript/src/lib.rs

@@ -1,3 +1,9 @@

+// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + +// You should have received a copy of the MIT License +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. + //! Module for PolyIOP transcript. //! TODO(ZZ): move this module to HyperPlonk where the transcript will also be //! useful.
M util/src/lib.rs → util/src/lib.rs

@@ -1,7 +1,8 @@

-// Copyright (c) 2022 Espresso Systems (espressosys.com) -// This file is part of the Jellyfish library. +// Copyright (c) 2023 Espresso Systems (espressosys.com) +// This file is part of the HyperPlonk library. + // You should have received a copy of the MIT License -// along with the Jellyfish library. If not, see <https://mit-license.org/>. +// along with the HyperPlonk library. If not, see <https://mit-license.org/>. //! Utilities for parallel code.