Skip to main content

BatchVerifier

Struct BatchVerifier 

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

Batch verifier for Pedersen VRF proofs.

Collects multiple proofs and verifies them together via a single multi-scalar multiplication.

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: PedersenSuite> BatchVerifier<S>

Source

pub fn new() -> Self

Create a new empty batch verifier.

Source

pub fn prepare( ios: impl AsRef<[VrfIo<S>]>, ad: impl AsRef<[u8]>, proof: &Proof<S>, ) -> BatchItem<S>

Prepare a proof for batch verification.

Computes the challenge and packages all data needed for deferred verification. This is cheap (one hash, no scalar multiplications) and can be done in parallel.

Source

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

Push a previously prepared entry into the batch.

Source

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

Prepare and push a proof in one step.

Source

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

Batch-verify multiple Pedersen proofs using a single multi-scalar multiplication.

For each proof i, two equations are checked with independent random scalars t_i (eq1) and u_i (eq2): Eq1: O_ic_i + Ok_i == I_is_i Eq2: Yb_ic_i + R_i == Gs_i + B*sb_i

The random linear combination yields a (5N + 2)-point MSM.

Returns Ok(()) if all proofs verify, Err(VerificationFailure) otherwise.

Trait Implementations§

Source§

impl<S: PedersenSuite> Default for BatchVerifier<S>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<S> Freeze for BatchVerifier<S>

§

impl<S> RefUnwindSafe for BatchVerifier<S>

§

impl<S> Send for BatchVerifier<S>

§

impl<S> Sync for BatchVerifier<S>

§

impl<S> Unpin for BatchVerifier<S>
where <<S as Suite>::Affine as AffineRepr>::ScalarField: Unpin, <S as Suite>::Affine: Unpin,

§

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