pub struct ZincPlusPiop<Zt, U, F, const DEGREE_PLUS_ONE: usize>(/* private fields */)
where
Zt: ZincTypes<DEGREE_PLUS_ONE>,
U: Uair,
F: PrimeField;Expand description
Main struct for the Zinc+ PIOP. The protocol is implemented as associated functions on it.
(Note that type parameters are further constrained in the impl blocks for the prover and verifier)
Implementations§
Source§impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>
impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>
Sourcepub fn step0_commit<'a>(
(pp_bin, pp_arb, pp_int): &'a (ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>),
trace: &'a UairTrace<'static, Zt::Int, Zt::Int, D>,
num_vars: usize,
) -> Result<ProverBase<'a, Zt, U, F, D>, ProtocolError<F, U::Ideal>>
pub fn step0_commit<'a>( (pp_bin, pp_arb, pp_int): &'a (ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>), trace: &'a UairTrace<'static, Zt::Int, Zt::Int, D>, num_vars: usize, ) -> Result<ProverBase<'a, Zt, U, F, D>, ProtocolError<F, U::Ideal>>
Step 0: Prover entry point. Commit witness columns via Zip+ PCS, absorb roots and public data into the Fiat-Shamir transcript.
Source§impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>where
Zt: ZincTypes<D>,
Zt::Int: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Eval: ProjectableToField<F>,
F: InnerTransparentField + FromPrimitiveWithConfig + for<'a> FromWithConfig<&'a Zt::Int> + for<'a> FromWithConfig<&'a Zt::CombR> + for<'a> FromWithConfig<&'a Zt::Chal> + for<'a> FromWithConfig<&'a Zt::Pt> + for<'a> MulByScalar<&'a F> + FromRef<F> + Send + Sync + 'static,
F::Inner: ConstIntSemiring + ConstTranscribable + FromRef<Zt::Fmod> + Send + Sync + Zero + Default,
F::Modulus: ConstTranscribable + FromRef<Zt::Fmod>,
U: Uair + 'static,
impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>where
Zt: ZincTypes<D>,
Zt::Int: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Eval: ProjectableToField<F>,
F: InnerTransparentField + FromPrimitiveWithConfig + for<'a> FromWithConfig<&'a Zt::Int> + for<'a> FromWithConfig<&'a Zt::CombR> + for<'a> FromWithConfig<&'a Zt::Chal> + for<'a> FromWithConfig<&'a Zt::Pt> + for<'a> MulByScalar<&'a F> + FromRef<F> + Send + Sync + 'static,
F::Inner: ConstIntSemiring + ConstTranscribable + FromRef<Zt::Fmod> + Send + Sync + Zero + Default,
F::Modulus: ConstTranscribable + FromRef<Zt::Fmod>,
U: Uair + 'static,
Sourcepub fn prove<const MLE_FIRST: bool, const CHECK_FOR_OVERFLOW: bool>(
pp: &(ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>),
trace: &UairTrace<'static, Zt::Int, Zt::Int, D>,
num_vars: usize,
project_scalar: impl Fn(&U::Scalar, &F::Config) -> DynamicPolynomialF<F>,
) -> Result<Proof<F>, ProtocolError<F, U::Ideal>>
pub fn prove<const MLE_FIRST: bool, const CHECK_FOR_OVERFLOW: bool>( pp: &(ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>), trace: &UairTrace<'static, Zt::Int, Zt::Int, D>, num_vars: usize, project_scalar: impl Fn(&U::Scalar, &F::Config) -> DynamicPolynomialF<F>, ) -> Result<Proof<F>, ProtocolError<F, U::Ideal>>
Zinc+ full PIOP prover.
Runs all protocol steps in sequence and returns the assembled proof.
For per-step control, start with Self::step0_commit and chain the
individual stepN_* methods.
Source§impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>
impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>
Sourcepub fn step0_reconstruct_transcript<'a, IdealOverF>(
(vp_bin, vp_arb, vp_int): &'a (ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>),
proof: Proof<F>,
public_trace: &'a UairTrace<'a, Zt::Int, Zt::Int, D>,
num_vars: usize,
) -> Result<VerifierTranscriptReconstructed<'a, Zt, U, F, IdealOverF, D>, ProtocolError<F, IdealOverF>>where
IdealOverF: Ideal,
pub fn step0_reconstruct_transcript<'a, IdealOverF>(
(vp_bin, vp_arb, vp_int): &'a (ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>),
proof: Proof<F>,
public_trace: &'a UairTrace<'a, Zt::Int, Zt::Int, D>,
num_vars: usize,
) -> Result<VerifierTranscriptReconstructed<'a, Zt, U, F, IdealOverF, D>, ProtocolError<F, IdealOverF>>where
IdealOverF: Ideal,
Step 0: Verifier entry point. Reconstruct Fiat-Shamir transcript from commitments and public data.
Source§impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>where
Zt: ZincTypes<D>,
Zt::Int: ProjectableToField<F>,
<Zt::BinaryZt as ZipTypes>::Cw: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Eval: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Cw: ProjectableToField<F>,
<Zt::IntZt as ZipTypes>::Cw: ProjectableToField<F>,
F: InnerTransparentField + FromPrimitiveWithConfig + for<'a> FromWithConfig<&'a Zt::Int> + for<'a> FromWithConfig<&'a Zt::CombR> + for<'a> FromWithConfig<&'a Zt::Chal> + for<'a> MulByScalar<&'a F> + FromRef<F> + Send + Sync + 'static,
F::Inner: ConstIntSemiring + ConstTranscribable + Send + Sync + Zero + Default,
F::Modulus: ConstTranscribable + FromRef<Zt::Fmod>,
U: Uair + 'static,
impl<Zt, U, F, const D: usize> ZincPlusPiop<Zt, U, F, D>where
Zt: ZincTypes<D>,
Zt::Int: ProjectableToField<F>,
<Zt::BinaryZt as ZipTypes>::Cw: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Eval: ProjectableToField<F>,
<Zt::ArbitraryZt as ZipTypes>::Cw: ProjectableToField<F>,
<Zt::IntZt as ZipTypes>::Cw: ProjectableToField<F>,
F: InnerTransparentField + FromPrimitiveWithConfig + for<'a> FromWithConfig<&'a Zt::Int> + for<'a> FromWithConfig<&'a Zt::CombR> + for<'a> FromWithConfig<&'a Zt::Chal> + for<'a> MulByScalar<&'a F> + FromRef<F> + Send + Sync + 'static,
F::Inner: ConstIntSemiring + ConstTranscribable + Send + Sync + Zero + Default,
F::Modulus: ConstTranscribable + FromRef<Zt::Fmod>,
U: Uair + 'static,
Sourcepub fn verify<IdealOverF, const CHECK_FOR_OVERFLOW: bool>(
vp: &(ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>),
proof: Proof<F>,
public_trace: &UairTrace<'_, Zt::Int, Zt::Int, D>,
num_vars: usize,
project_scalar: impl Fn(&U::Scalar, &F::Config) -> DynamicPolynomialF<F>,
project_ideal: impl Fn(&IdealOrZero<U::Ideal>, &F::Config) -> IdealOverF,
) -> Result<(), ProtocolError<F, IdealOverF>>
pub fn verify<IdealOverF, const CHECK_FOR_OVERFLOW: bool>( vp: &(ZipPlusParams<Zt::BinaryZt, Zt::BinaryLc>, ZipPlusParams<Zt::ArbitraryZt, Zt::ArbitraryLc>, ZipPlusParams<Zt::IntZt, Zt::IntLc>), proof: Proof<F>, public_trace: &UairTrace<'_, Zt::Int, Zt::Int, D>, num_vars: usize, project_scalar: impl Fn(&U::Scalar, &F::Config) -> DynamicPolynomialF<F>, project_ideal: impl Fn(&IdealOrZero<U::Ideal>, &F::Config) -> IdealOverF, ) -> Result<(), ProtocolError<F, IdealOverF>>
Zinc+ full PIOP verifier.
Runs all verification steps in sequence and returns Ok(()) on
success. For per-step control, starts with
Self::step0_reconstruct_transcript and chain the individual
stepN_* methods.
Trait Implementations§
Source§impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Clone for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Clone for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
Source§fn clone(&self) -> ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
fn clone(&self) -> ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Debug for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Debug for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
Source§impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Default for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Default for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
Source§fn default() -> ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
fn default() -> ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Copy for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
Auto Trait Implementations§
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Freeze for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> RefUnwindSafe for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Send for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Sync for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> Unpin for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> UnsafeUnpin for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
impl<Zt, U, F, const DEGREE_PLUS_ONE: usize> UnwindSafe for ZincPlusPiop<Zt, U, F, DEGREE_PLUS_ONE>
Blanket Implementations§
§impl<T> AsMaybeUninit for T
impl<T> AsMaybeUninit for T
§type Uninit = MaybeUninit<T>
type Uninit = MaybeUninit<T>
§fn as_ref_uninit(&self) -> &<T as AsMaybeUninit>::Uninit
fn as_ref_uninit(&self) -> &<T as AsMaybeUninit>::Uninit
&self to its maybe-initialized equivalent.§unsafe fn as_mut_uninit(&mut self) -> &mut <T as AsMaybeUninit>::Uninit
unsafe fn as_mut_uninit(&mut self) -> &mut <T as AsMaybeUninit>::Uninit
&mut T to its maybe-initialized equivalent. Read more§unsafe fn raw_as_uninit<'a>(raw: *const T) -> &'a <T as AsMaybeUninit>::Uninit
unsafe fn raw_as_uninit<'a>(raw: *const T) -> &'a <T as AsMaybeUninit>::Uninit
§unsafe fn raw_mut_as_uninit<'a>(
raw: *mut T,
) -> &'a mut <T as AsMaybeUninit>::Uninit
unsafe fn raw_mut_as_uninit<'a>( raw: *mut T, ) -> &'a mut <T as AsMaybeUninit>::Uninit
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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>
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