Fix benches
This commit is contained in:
parent
ba256655dd
commit
b521ffb17f
|
@ -1,34 +1,66 @@
|
||||||
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
||||||
|
|
||||||
use rand::thread_rng;
|
use rand::{thread_rng, Rng};
|
||||||
use redjubjub::*;
|
use redjubjub::*;
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
fn sigs_with_distinct_keys<T: SigType>(
|
enum Item {
|
||||||
) -> impl Iterator<Item = (VerificationKeyBytes<T>, Signature<T>)> {
|
SpendAuth {
|
||||||
|
vk_bytes: VerificationKeyBytes<SpendAuth>,
|
||||||
|
sig: Signature<SpendAuth>,
|
||||||
|
},
|
||||||
|
Binding {
|
||||||
|
vk_bytes: VerificationKeyBytes<Binding>,
|
||||||
|
sig: Signature<Binding>,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sigs_with_distinct_keys() -> impl Iterator<Item = Item> {
|
||||||
std::iter::repeat_with(|| {
|
std::iter::repeat_with(|| {
|
||||||
let sk = SigningKey::<T>::new(thread_rng());
|
let mut rng = thread_rng();
|
||||||
let vk_bytes = VerificationKey::from(&sk).into();
|
let msg = b"Bench";
|
||||||
let sig = sk.sign(thread_rng(), b"");
|
match rng.gen::<u8>() % 2 {
|
||||||
(vk_bytes, sig)
|
0 => {
|
||||||
|
let sk = SigningKey::<SpendAuth>::new(thread_rng());
|
||||||
|
let vk_bytes = VerificationKey::from(&sk).into();
|
||||||
|
let sig = sk.sign(thread_rng(), &msg[..]);
|
||||||
|
Item::SpendAuth { vk_bytes, sig }
|
||||||
|
}
|
||||||
|
1 => {
|
||||||
|
let sk = SigningKey::<Binding>::new(thread_rng());
|
||||||
|
let vk_bytes = VerificationKey::from(&sk).into();
|
||||||
|
let sig = sk.sign(thread_rng(), &msg[..]);
|
||||||
|
Item::Binding { vk_bytes, sig }
|
||||||
|
}
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_batch_verify(c: &mut Criterion) {
|
fn bench_batch_verify(c: &mut Criterion) {
|
||||||
let mut group = c.benchmark_group("Batch Verification");
|
let mut group = c.benchmark_group("Batch Verification");
|
||||||
for &n in [8usize, 16, 24, 32, 40, 48, 56, 64].iter() {
|
for &n in [8usize, 16, 24, 32, 40, 48, 56, 64].iter() {
|
||||||
group.throughput(Throughput::Elements(*n as u64));
|
group.throughput(Throughput::Elements(n as u64));
|
||||||
|
|
||||||
let sigs = sigs_with_distinct_keys().take(*n).collect::<Vec<_>>();
|
let sigs = sigs_with_distinct_keys().take(n).collect::<Vec<_>>();
|
||||||
|
|
||||||
group.bench_with_input(
|
group.bench_with_input(
|
||||||
BenchmarkId::new("Unbatched verification", n),
|
BenchmarkId::new("Unbatched verification", n),
|
||||||
&sigs,
|
&sigs,
|
||||||
|b, sigs| {
|
|b, sigs| {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
for (vk_bytes, sig) in sigs.iter() {
|
for item in sigs.iter() {
|
||||||
let _ =
|
let msg = b"Bench";
|
||||||
VerificationKey::try_from(*vk_bytes).and_then(|vk| vk.verify(b"", sig));
|
match item {
|
||||||
|
Item::SpendAuth { vk_bytes, sig } => {
|
||||||
|
let _ = VerificationKey::try_from(*vk_bytes)
|
||||||
|
.and_then(|vk| vk.verify(msg, sig));
|
||||||
|
}
|
||||||
|
Item::Binding { vk_bytes, sig } => {
|
||||||
|
let _ = VerificationKey::try_from(*vk_bytes)
|
||||||
|
.and_then(|vk| vk.verify(msg, sig));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -39,9 +71,17 @@ fn bench_batch_verify(c: &mut Criterion) {
|
||||||
&sigs,
|
&sigs,
|
||||||
|b, sigs| {
|
|b, sigs| {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut batch = batch::Verifier::<SpendAuth>::new();
|
let mut batch = batch::Verifier::new();
|
||||||
for (vk_bytes, sig) in sigs.iter().cloned() {
|
for item in sigs.iter() {
|
||||||
batch.queue((vk_bytes, sig, b""));
|
let msg = b"Bench";
|
||||||
|
match item {
|
||||||
|
Item::SpendAuth { vk_bytes, sig } => {
|
||||||
|
batch.queue((*vk_bytes, *sig, msg));
|
||||||
|
}
|
||||||
|
Item::Binding { vk_bytes, sig } => {
|
||||||
|
batch.queue((*vk_bytes, *sig, msg));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
batch.verify(thread_rng())
|
batch.verify(thread_rng())
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue