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
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.