Skip to main content

BatchVerifier

Struct BatchVerifier 

Source
pub struct BatchVerifier<S: RingSuite> { /* private fields */ }
Expand description

Batch verifier for ring VRF proofs.

Collects ring proofs from one or more rings (sharing the same KZG SRS) and verifies them together, amortizing the cost of pairing checks and multi-scalar multiplications.

The same subgroup membership assumptions as Verifier apply to all points fed into the batch (I/O pairs and proof points).

Implementations§

Source§

impl<S: RingSuite> BatchVerifier<S>

Source

pub fn new(ring_verifier: &RingVerifier<S>) -> Self

Create a new batch verifier seeded with the KZG SRS taken from ring_verifier.

Any ring verifier sharing the same SRS can later be passed to Self::push or BatchItem::new; the verifier supplied here is only used to extract the KZG verifier key.

Source

pub fn push_prepared(&mut self, item: BatchItem<S>)

Push a previously prepared item into the batch.

Source

pub fn push( &mut self, verifier: &RingVerifier<S>, ios: impl AsRef<[VrfIo<S>]>, ad: impl AsRef<[u8]>, proof: &Proof<S>, ) -> Result<(), Error>

Prepare and push a proof in one step.

Returns Error::InvalidData if the proof’s key commitment cannot be converted (e.g. identity point on SW-form suites).

Source

pub fn verify(&self) -> Result<(), Error>

Verify all collected proofs in a single batch.

Checks both the Pedersen proofs (via MSM) and the ring proofs (via pairing). Returns Ok(()) if all proofs verify, Err(VerificationFailure) otherwise.

Auto Trait Implementations§

§

impl<S> Freeze for BatchVerifier<S>

§

impl<S> RefUnwindSafe for BatchVerifier<S>

§

impl<S> Send for BatchVerifier<S>
where <S as Suite>::Affine: Sized, <<S as Suite>::Affine as AffineRepr>::Config: Sized, <<S as Suite>::Affine as AffineRepr>::BaseField: Sized,

§

impl<S> Sync for BatchVerifier<S>
where <S as Suite>::Affine: Sized, <<S as Suite>::Affine as AffineRepr>::Config: Sized, <<S as Suite>::Affine as AffineRepr>::BaseField: Sized,

§

impl<S> Unpin for BatchVerifier<S>

§

impl<S> UnsafeUnpin for BatchVerifier<S>

§

impl<S> UnwindSafe for BatchVerifier<S>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V