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

Support traits to match requirement in Ceno. #6

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update API
yczhangsjtu committed Dec 23, 2024
commit c8fe0f42b0ca679e907c13d4e75b8a4c6dbe4a99
13 changes: 6 additions & 7 deletions src/ceno_binding/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod pcs;
pub use ark_crypto_primitives::merkle_tree::Config;
use nimue::plugins::ark;
use nimue::{plugins::ark, Arthur, Merlin};
pub use pcs::{DefaultHash, Whir, WhirDefaultSpec, WhirSpec};

use ark_ff::FftField;
@@ -21,14 +21,13 @@ pub trait PolynomialCommitmentScheme<E: FftField>: Clone {
type CommitmentWithWitness: Clone + Debug;
type Proof: Clone + CanonicalSerialize + CanonicalDeserialize + Serialize + DeserializeOwned;
type Poly: Clone + Debug + Serialize + DeserializeOwned;
type Transcript;

fn setup(poly_size: usize) -> Self::Param;

fn commit_and_write(
pp: &Self::Param,
poly: &Self::Poly,
transcript: &mut Self::Transcript,
transcript: &mut Merlin<DefaultHash>,
) -> Result<Self::CommitmentWithWitness, Error>;

fn batch_commit(
@@ -41,7 +40,7 @@ pub trait PolynomialCommitmentScheme<E: FftField>: Clone {
comm: Self::CommitmentWithWitness,
point: &[E],
eval: &E,
transcript: &mut Self::Transcript,
merlin: &mut Merlin<DefaultHash>,
) -> Result<Self::Proof, Error>;

/// This is a simple version of batch open:
@@ -54,22 +53,22 @@ pub trait PolynomialCommitmentScheme<E: FftField>: Clone {
comm: Self::CommitmentWithWitness,
point: &[E],
evals: &[E],
transcript: &mut Self::Transcript,
transcript: &mut Merlin<DefaultHash>,
) -> Result<Self::Proof, Error>;

fn verify(
vp: &Self::Param,
point: &[E],
eval: &E,
proof: &Self::Proof,
transcript: &Self::Transcript,
transcript: &mut Arthur<DefaultHash>,
) -> Result<(), Error>;

fn batch_verify(
vp: &Self::Param,
point: &[E],
evals: &[E],
proof: &Self::Proof,
transcript: &mut Self::Transcript,
transcript: &mut Arthur<DefaultHash>,
) -> Result<(), Error>;
}
21 changes: 7 additions & 14 deletions src/ceno_binding/pcs.rs
Original file line number Diff line number Diff line change
@@ -171,7 +171,6 @@ where
type CommitmentWithWitness = CommitmentWithWitness<E, Spec::MerkleConfig>;
type Proof = WhirProofWrapper<Spec::MerkleConfig, E>;
type Poly = CoefficientList<E::BasePrimeField>;
type Transcript = Merlin<DefaultHash>;

fn setup(poly_size: usize) -> Self::Param {
WhirSetupParams {
@@ -183,7 +182,7 @@ where
fn commit_and_write(
pp: &Self::Param,
poly: &Self::Poly,
transcript: &mut Self::Transcript,
transcript: &mut Merlin<DefaultHash>,
) -> Result<Self::CommitmentWithWitness, Error> {
let whir_params = Spec::get_parameters(pp.num_variables);
let mv_params = MultivariateParameters::new(pp.num_variables);
@@ -210,7 +209,7 @@ where
witness: Self::CommitmentWithWitness,
point: &[E],
eval: &E,
transcript: &mut Self::Transcript,
transcript: &mut Merlin<DefaultHash>,
) -> Result<Self::Proof, Error> {
let whir_params = Spec::get_parameters(pp.num_variables);
let mv_params = MultivariateParameters::new(pp.num_variables);
@@ -236,7 +235,7 @@ where
_comm: Self::CommitmentWithWitness,
_point: &[E],
_evals: &[E],
_transcript: &mut Self::Transcript,
_transcript: &mut Merlin<DefaultHash>,
) -> Result<Self::Proof, Error> {
todo!()
}
@@ -246,27 +245,21 @@ where
point: &[E],
eval: &E,
proof: &Self::Proof,
transcript: &Self::Transcript,
transcript: &mut Arthur<DefaultHash>,
) -> Result<(), Error> {
let whir_params = Spec::get_parameters(vp.num_variables);
let mv_params = MultivariateParameters::new(vp.num_variables);
let params = WhirConfig::<E, Spec::MerkleConfig, PowStrategy>::new(mv_params, whir_params);

let reps = 1000;
let verifier = Verifier::new(params.clone());
let io = IOPattern::<DefaultHash>::new("🌪️")
.commit_statement(&params)
.add_whir_proof(&params);

let statement = Statement {
points: vec![MultilinearPoint(point.to_vec())],
evaluations: vec![eval.clone()],
};

for _ in 0..reps {
let mut arthur = io.to_arthur(transcript.transcript());
verifier.verify(&mut arthur, &statement, &proof.proof)?;
}
verifier.verify(transcript, &statement, &proof.proof)?;

Ok(())
}

@@ -275,7 +268,7 @@ where
_point: &[E],
_evals: &[E],
_proof: &Self::Proof,
_transcript: &mut Self::Transcript,
_transcript: &mut Arthur<DefaultHash>,
) -> Result<(), Error> {
todo!()
}