ark-vrf 0.5.2

Elliptic curve VRF with additional data
Documentation
#[macro_use]
mod bench_utils;

use ark_vrf::{Input, Secret, Suite};
use bench_utils::SuiteExt;
use criterion::{Criterion, black_box, criterion_group, criterion_main};

fn bench_tiny_prove<S: Suite>(c: &mut Criterion) {
    use ark_vrf::tiny::Prover;

    let secret = Secret::<S>::from_seed([0; 32]);
    let input = Input::<S>::new(b"bench input data").unwrap();
    let io = secret.vrf_io(input);

    let name = format!("{}/tiny_prove", S::SUITE_NAME);
    c.bench_function(&name, |b| {
        b.iter(|| secret.prove(black_box(io), b"ad"));
    });
}

fn bench_tiny_verify<S: Suite>(c: &mut Criterion) {
    use ark_vrf::tiny::{Prover, Verifier};

    let secret = Secret::<S>::from_seed([0; 32]);
    let public = secret.public();
    let input = Input::<S>::new(b"bench input data").unwrap();
    let io = secret.vrf_io(input);
    let proof = secret.prove(io, b"ad");

    let name = format!("{}/tiny_verify", S::SUITE_NAME);
    c.bench_function(&name, |b| {
        b.iter(|| {
            public
                .verify(black_box(io), b"ad", black_box(&proof))
                .unwrap()
        });
    });
}

fn bench_tiny_suite<S: Suite>(c: &mut Criterion) {
    bench_tiny_prove::<S>(c);
    bench_tiny_verify::<S>(c);
}

fn bench_tiny(c: &mut Criterion) {
    for_each_suite!(c, bench_tiny_suite);
}

criterion_group!(benches, bench_tiny);

criterion_main!(benches);