diff --git a/src/plonk.rs b/src/plonk.rs index 244d205..376fc91 100644 --- a/src/plonk.rs +++ b/src/plonk.rs @@ -11,6 +11,7 @@ use crate::transcript::ChallengeScalar; mod circuit; mod keygen; +mod lookup; mod permutation; mod prover; mod verifier; diff --git a/src/plonk/lookup.rs b/src/plonk/lookup.rs new file mode 100644 index 0000000..640faef --- /dev/null +++ b/src/plonk/lookup.rs @@ -0,0 +1,33 @@ +use super::circuit::{Any, Column}; +use crate::arithmetic::CurveAffine; + +mod prover; +mod verifier; + +#[derive(Clone, Debug)] +pub(crate) struct Argument { + pub input_columns: Vec>, + pub table_columns: Vec>, +} + +impl Argument { + pub fn new(input_columns: &[Column], table_columns: &[Column]) -> Self { + assert_eq!(input_columns.len(), table_columns.len()); + Argument { + input_columns: input_columns.to_vec(), + table_columns: table_columns.to_vec(), + } + } +} + +#[derive(Clone, Debug)] +pub(crate) struct Proof { + product_commitment: C, + product_eval: C::Scalar, + product_inv_eval: C::Scalar, + permuted_input_commitment: C, + permuted_table_commitment: C, + permuted_input_eval: C::Scalar, + permuted_input_inv_eval: C::Scalar, + permuted_table_eval: C::Scalar, +} diff --git a/src/plonk/lookup/prover.rs b/src/plonk/lookup/prover.rs new file mode 100644 index 0000000..7fc098a --- /dev/null +++ b/src/plonk/lookup/prover.rs @@ -0,0 +1,53 @@ +use crate::arithmetic::CurveAffine; +use crate::poly::{commitment::Blind, Coeff, ExtendedLagrangeCoeff, LagrangeCoeff, Polynomial}; + +#[derive(Clone, Debug)] +pub(crate) struct Permuted { + permuted_input_value: Polynomial, + permuted_input_poly: Polynomial, + permuted_input_coset: Polynomial, + permuted_input_inv_coset: Polynomial, + permuted_input_blind: Blind, + permuted_input_commitment: C, + permuted_table_value: Polynomial, + permuted_table_poly: Polynomial, + permuted_table_coset: Polynomial, + permuted_table_blind: Blind, + permuted_table_commitment: C, +} + +#[derive(Clone, Debug)] +pub(crate) struct Product { + product_poly: Polynomial, + product_coset: Polynomial, + product_inv_coset: Polynomial, + product_blind: Blind, + product_commitment: C, +} + +#[derive(Clone, Debug)] +pub(crate) struct Committed { + permuted: Permuted, + product: Product, +} + +pub(crate) struct Constructed { + permuted_input_poly: Polynomial, + permuted_input_blind: Blind, + permuted_input_commitment: C, + permuted_table_poly: Polynomial, + permuted_table_blind: Blind, + permuted_table_commitment: C, + product_poly: Polynomial, + product_blind: Blind, + product_commitment: C, +} + +pub(crate) struct Evaluated { + constructed: Constructed, + pub product_eval: C::Scalar, + pub product_inv_eval: C::Scalar, + pub permuted_input_eval: C::Scalar, + pub permuted_input_inv_eval: C::Scalar, + pub permuted_table_eval: C::Scalar, +} diff --git a/src/plonk/lookup/verifier.rs b/src/plonk/lookup/verifier.rs new file mode 100644 index 0000000..594644e --- /dev/null +++ b/src/plonk/lookup/verifier.rs @@ -0,0 +1,4 @@ +use super::Proof; +use crate::arithmetic::CurveAffine; + +impl Proof {}