PCS crate moved to other repository.

This commit is contained in:
MRain
2022-09-06 10:07:33 -04:00
parent 32cc0c4fd9
commit acb4b23d45
23 changed files with 73 additions and 2766 deletions

View File

@@ -7,7 +7,6 @@ edition = "2021"
[dependencies]
poly-iop = { path = "../poly-iop" }
pcs = { path = "../pcs" }
ark-std = { version = "^0.3.0", default-features = false }
ark-ec = { version = "^0.3.0", default-features = false }
@@ -19,6 +18,7 @@ displaydoc = { version = "0.2.3", default-features = false }
transcript = { path = "../transcript" }
arithmetic = { path = "../arithmetic" }
jf-primitives = { git = "https://github.com/EspressoSystems/jellyfish" }
[dev-dependencies]
ark-bls12-381 = { version = "0.3.0", default-features = false, features = [ "curve" ] }
@@ -36,12 +36,12 @@ parallel = [
"ark-poly/parallel",
"ark-ec/parallel",
"poly-iop/parallel",
"pcs/parallel",
"arithmetic/parallel",
"jf-primitives/parallel",
]
print-trace = [
"ark-std/print-trace",
"poly-iop/print-trace",
"pcs/print-trace",
"arithmetic/print-trace",
"jf-primitives/print-trace",
]

View File

@@ -4,7 +4,7 @@ use arithmetic::ArithErrors;
use ark_serialize::SerializationError;
use ark_std::string::String;
use displaydoc::Display;
use pcs::prelude::PCSErrors;
use jf_primitives::pcs::prelude::PCSError;
use poly_iop::prelude::PolyIOPErrors;
use transcript::TranscriptErrors;
@@ -24,7 +24,7 @@ pub enum HyperPlonkErrors {
/// PolyIOP error {0}
PolyIOPErrors(PolyIOPErrors),
/// PCS error {0}
PCSErrors(PCSErrors),
PCSError(PCSError),
/// Transcript error {0}
TranscriptError(TranscriptErrors),
/// Arithmetic Error: {0}
@@ -43,9 +43,9 @@ impl From<PolyIOPErrors> for HyperPlonkErrors {
}
}
impl From<PCSErrors> for HyperPlonkErrors {
fn from(e: PCSErrors) -> Self {
Self::PCSErrors(e)
impl From<PCSError> for HyperPlonkErrors {
fn from(e: PCSError) -> Self {
Self::PCSError(e)
}
}

View File

@@ -4,14 +4,17 @@ use crate::utils::{eval_f, prove_sanity_check};
use arithmetic::VPAuxInfo;
use ark_ec::PairingEngine;
use ark_poly::{DenseMultilinearExtension, MultilinearExtension};
use ark_std::{end_timer, log2, start_timer, One, Zero};
use ark_std::{
borrow::Borrow, end_timer, log2, marker::PhantomData, rc::Rc, start_timer, One, Zero,
};
use errors::HyperPlonkErrors;
use pcs::prelude::{compute_qx_degree, merge_polynomials, PCSErrors, PolynomialCommitmentScheme};
use jf_primitives::pcs::prelude::{
compute_qx_degree, merge_polynomials, PCSError, PolynomialCommitmentScheme,
};
use poly_iop::{
prelude::{identity_permutation_mle, PermutationCheck, ZeroCheck},
PolyIOP,
};
use std::{marker::PhantomData, rc::Rc};
use structs::{HyperPlonkIndex, HyperPlonkProof, HyperPlonkProvingKey, HyperPlonkVerifyingKey};
use transcript::IOPTranscript;
use utils::{build_f, gen_eval_point};
@@ -47,7 +50,7 @@ where
/// polynomial commitments
fn preprocess(
index: &Self::Index,
pcs_srs: &PCS::SRS,
pcs_srs: impl Borrow<PCS::SRS>,
) -> Result<(Self::ProvingKey, Self::VerifyingKey), HyperPlonkErrors>;
/// Generate HyperPlonk SNARK proof.
@@ -59,7 +62,7 @@ where
/// Outputs:
/// - The HyperPlonk SNARK proof.
fn prove(
pk: &Self::ProvingKey,
pk: impl Borrow<Self::ProvingKey>,
pub_input: &[E::Fr],
witnesses: &[WitnessColumn<E::Fr>],
) -> Result<Self::Proof, HyperPlonkErrors>;
@@ -73,7 +76,7 @@ where
/// Outputs:
/// - Return a boolean on whether the verification is successful
fn verify(
vk: &Self::VerifyingKey,
vk: impl Borrow<Self::VerifyingKey>,
pub_input: &[E::Fr],
proof: &Self::Proof,
) -> Result<bool, HyperPlonkErrors>;
@@ -99,7 +102,7 @@ where
fn preprocess(
index: &Self::Index,
pcs_srs: &PCS::SRS,
pcs_srs: impl Borrow<PCS::SRS>,
) -> Result<(Self::ProvingKey, Self::VerifyingKey), HyperPlonkErrors> {
let num_vars = index.params.nv;
let log_num_witness_polys = index.params.log_n_wires;
@@ -133,7 +136,7 @@ where
let selector_com = selector_oracles
.iter()
.map(|poly| PCS::commit(&pcs_prover_param, poly))
.collect::<Result<Vec<PCS::Commitment>, PCSErrors>>()?;
.collect::<Result<Vec<PCS::Commitment>, PCSError>>()?;
Ok((
Self::ProvingKey {
@@ -186,10 +189,11 @@ where
///
/// TODO: this function is gigantic -- refactor it to smaller ones
fn prove(
pk: &Self::ProvingKey,
pk: impl Borrow<Self::ProvingKey>,
pub_input: &[E::Fr],
witnesses: &[WitnessColumn<E::Fr>],
) -> Result<Self::Proof, HyperPlonkErrors> {
let pk = pk.borrow();
let start = start_timer!(|| "hyperplonk proving");
let mut transcript = IOPTranscript::<E::Fr>::new(b"hyperplonk");
@@ -219,7 +223,7 @@ where
// transcript
// =======================================================================
let step = start_timer!(|| "commit witnesses");
let w_merged = merge_polynomials(&witness_polys)?;
let w_merged = Rc::new(merge_polynomials(&witness_polys)?);
if w_merged.num_vars != merged_nv {
return Err(HyperPlonkErrors::InvalidParameters(format!(
"merged witness poly has a different num_vars ({}) from expected ({})",
@@ -590,10 +594,11 @@ where
/// - check zero check evaluations
/// - public input consistency checks
fn verify(
vk: &Self::VerifyingKey,
vk: impl Borrow<Self::VerifyingKey>,
pub_input: &[E::Fr],
proof: &Self::Proof,
) -> Result<bool, HyperPlonkErrors> {
let vk = vk.borrow();
let start = start_timer!(|| "hyperplonk verification");
let mut transcript = IOPTranscript::<E::Fr>::new(b"hyperplonk");
@@ -925,7 +930,7 @@ mod tests {
};
use ark_bls12_381::Bls12_381;
use ark_std::test_rng;
use pcs::prelude::KZGMultilinearPCS;
use jf_primitives::pcs::prelude::MultilinearKzgPCS;
use poly_iop::prelude::random_permutation_mle;
#[test]
@@ -957,7 +962,7 @@ mod tests {
gate_func: CustomizedGates,
) -> Result<(), HyperPlonkErrors> {
let mut rng = test_rng();
let pcs_srs = KZGMultilinearPCS::<E>::gen_srs_for_testing(&mut rng, 15)?;
let pcs_srs = MultilinearKzgPCS::<E>::gen_srs_for_testing(&mut rng, 15)?;
let merged_nv = nv + log_n_wires;
// generate index
@@ -977,7 +982,7 @@ mod tests {
};
// generate pk and vks
let (pk, vk) = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::preprocess(
let (pk, vk) = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::preprocess(
&index, &pcs_srs,
)?;
@@ -999,13 +1004,13 @@ mod tests {
let pi = w1.clone();
// generate a proof and verify
let proof = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::prove(
let proof = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::prove(
&pk,
&pi.0,
&[w1.clone(), w2.clone()],
)?;
let _verify = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::verify(
let _verify = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::verify(
&vk, &pi.0, &proof,
)?;
@@ -1013,24 +1018,24 @@ mod tests {
let rand_perm: Vec<E::Fr> = random_permutation_mle(merged_nv, &mut rng)
.evaluations
.clone();
let mut bad_index = index.clone();
let mut bad_index = index;
bad_index.permutation = rand_perm;
// generate pk and vks
let (_, bad_vk) = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::preprocess(
let (_, bad_vk) = <PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::preprocess(
&bad_index, &pcs_srs,
)?;
assert!(
<PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::verify(
<PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::verify(
&bad_vk, &pi.0, &proof,
)
.is_err()
);
// bad path 2: wrong witness
let mut w1_bad = w1.clone();
let mut w1_bad = w1;
w1_bad.0[0] = E::Fr::one();
assert!(
<PolyIOP<E::Fr> as HyperPlonkSNARK<E, KZGMultilinearPCS<E>>>::prove(
<PolyIOP<E::Fr> as HyperPlonkSNARK<E, MultilinearKzgPCS<E>>>::prove(
&pk,
&pi.0,
&[w1_bad, w2],

View File

@@ -5,7 +5,7 @@ use ark_ec::PairingEngine;
use ark_ff::PrimeField;
use ark_poly::DenseMultilinearExtension;
use ark_std::cmp::max;
use pcs::PolynomialCommitmentScheme;
use jf_primitives::pcs::PolynomialCommitmentScheme;
use poly_iop::prelude::{PermutationCheck, ZeroCheck};
use std::rc::Rc;