pub struct PlonkKzgSnark<E: Pairing>(/* private fields */);
Expand description
A Plonk instantiated with KZG PCS
Implementations§
Source§impl<E, F, P> PlonkKzgSnark<E>where
E: Pairing<BaseField = F, G1Affine = Affine<P>>,
F: RescueParameter + SWToTEConParam,
P: SWCurveConfig<BaseField = F>,
impl<E, F, P> PlonkKzgSnark<E>where
E: Pairing<BaseField = F, G1Affine = Affine<P>>,
F: RescueParameter + SWToTEConParam,
P: SWCurveConfig<BaseField = F>,
Sourcepub fn batch_prove<C, R, T>(
prng: &mut R,
circuits: &[&C],
prove_keys: &[&ProvingKey<E>],
) -> Result<BatchProof<E>, PlonkError>
pub fn batch_prove<C, R, T>( prng: &mut R, circuits: &[&C], prove_keys: &[&ProvingKey<E>], ) -> Result<BatchProof<E>, PlonkError>
Generate an aggregated Plonk proof for multiple instances.
Sourcepub fn verify_batch_proof<T>(
verify_keys: &[&VerifyingKey<E>],
public_inputs: &[&[E::ScalarField]],
batch_proof: &BatchProof<E>,
) -> Result<(), PlonkError>where
T: PlonkTranscript<F>,
pub fn verify_batch_proof<T>(
verify_keys: &[&VerifyingKey<E>],
public_inputs: &[&[E::ScalarField]],
batch_proof: &BatchProof<E>,
) -> Result<(), PlonkError>where
T: PlonkTranscript<F>,
Verify a single aggregated Plonk proof.
Sourcepub fn batch_verify<T>(
verify_keys: &[&VerifyingKey<E>],
public_inputs: &[&[E::ScalarField]],
proofs: &[&Proof<E>],
extra_transcript_init_msgs: &[Option<Vec<u8>>],
) -> Result<(), PlonkError>where
T: PlonkTranscript<F>,
pub fn batch_verify<T>(
verify_keys: &[&VerifyingKey<E>],
public_inputs: &[&[E::ScalarField]],
proofs: &[&Proof<E>],
extra_transcript_init_msgs: &[Option<Vec<u8>>],
) -> Result<(), PlonkError>where
T: PlonkTranscript<F>,
Batch verify multiple SNARK proofs (w.r.t. different verifying keys).
Trait Implementations§
Source§impl<E, F, P> UniversalSNARK<E> for PlonkKzgSnark<E>where
E: Pairing<BaseField = F, G1Affine = Affine<P>>,
F: RescueParameter + SWToTEConParam,
P: SWCurveConfig<BaseField = F>,
impl<E, F, P> UniversalSNARK<E> for PlonkKzgSnark<E>where
E: Pairing<BaseField = F, G1Affine = Affine<P>>,
F: RescueParameter + SWToTEConParam,
P: SWCurveConfig<BaseField = F>,
Source§fn preprocess<C: Arithmetization<E::ScalarField>>(
srs: &Self::UniversalSRS,
circuit: &C,
) -> Result<(Self::ProvingKey, Self::VerifyingKey), Self::Error>
fn preprocess<C: Arithmetization<E::ScalarField>>( srs: &Self::UniversalSRS, circuit: &C, ) -> Result<(Self::ProvingKey, Self::VerifyingKey), Self::Error>
Input a circuit and the SRS, precompute the proving key and verification key.
Source§fn prove<C, R, T>(
rng: &mut R,
circuit: &C,
prove_key: &Self::ProvingKey,
extra_transcript_init_msg: Option<Vec<u8>>,
) -> Result<Self::Proof, Self::Error>
fn prove<C, R, T>( rng: &mut R, circuit: &C, prove_key: &Self::ProvingKey, extra_transcript_init_msg: Option<Vec<u8>>, ) -> Result<Self::Proof, Self::Error>
Compute a Plonk proof. Refer to Sec 8.4 of https://eprint.iacr.org/2019/953.pdf
circuit
and prove_key
has to be consistent (with the same evaluation
domain etc.), otherwise return error.
Source§type ProvingKey = ProvingKey<E>
type ProvingKey = ProvingKey<E>
The parameters required by the prover to compute a proof for a specific
circuit.
Source§type VerifyingKey = VerifyingKey<E>
type VerifyingKey = VerifyingKey<E>
The parameters required by the verifier to validate a proof for a
specific circuit.
Source§type UniversalSRS = UnivariateUniversalParams<E>
type UniversalSRS = UnivariateUniversalParams<E>
Universal Structured Reference String from
universal_setup
, used for
all subsequent circuit-specific preprocessingSource§type Error = PlonkError
type Error = PlonkError
SNARK related error
Source§fn verify<T>(
verify_key: &Self::VerifyingKey,
public_input: &[E::ScalarField],
proof: &Self::Proof,
extra_transcript_init_msg: Option<Vec<u8>>,
) -> Result<(), Self::Error>where
T: PlonkTranscript<F>,
fn verify<T>(
verify_key: &Self::VerifyingKey,
public_input: &[E::ScalarField],
proof: &Self::Proof,
extra_transcript_init_msg: Option<Vec<u8>>,
) -> Result<(), Self::Error>where
T: PlonkTranscript<F>,
Verify a SNARK proof
proof
of the circuit circuit
, with respect to
the public input pub_input
. Read moreSource§fn universal_setup<R: RngCore + CryptoRng>(
_max_degree: usize,
_rng: &mut R,
) -> Result<Self::UniversalSRS, Self::Error>
fn universal_setup<R: RngCore + CryptoRng>( _max_degree: usize, _rng: &mut R, ) -> Result<Self::UniversalSRS, Self::Error>
Generate the universal SRS for the argument system.
This setup is for trusted party to run, and mostly only used for
testing purpose. In practice, a MPC flavor of the setup will be carried
out to have higher assurance on the “toxic waste”/trapdoor being thrown
away to ensure soundness of the argument system.
Auto Trait Implementations§
impl<E> Freeze for PlonkKzgSnark<E>
impl<E> RefUnwindSafe for PlonkKzgSnark<E>where
E: RefUnwindSafe,
impl<E> Send for PlonkKzgSnark<E>
impl<E> Sync for PlonkKzgSnark<E>
impl<E> Unpin for PlonkKzgSnark<E>where
E: Unpin,
impl<E> UnwindSafe for PlonkKzgSnark<E>where
E: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more