This repository has been archived on 2023-01-08. You can view files and clone it, but cannot push or open issues or pull requests.
ptrcports/wireguard-vanity-address/0003-update-benchmarks-to-new-scheme.patch
2022-04-27 05:57:56 +02:00

114 lines
4.1 KiB
Diff

From d6473b2d99351fd5ec773dde7037e7fdd0cce18a Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Tue, 3 Mar 2020 21:12:01 -0800
Subject: [PATCH 3/5] update benchmarks to new scheme
---
benches/keygen.rs | 59 ++++++++++++++++++++++++++---------------------
1 file changed, 33 insertions(+), 26 deletions(-)
diff --git a/benches/keygen.rs b/benches/keygen.rs
index a50062e..00dcc55 100644
--- a/benches/keygen.rs
+++ b/benches/keygen.rs
@@ -1,63 +1,70 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion};
-use base64;
+use curve25519_dalek::{
+ constants::ED25519_BASEPOINT_POINT, edwards::EdwardsPoint, montgomery::MontgomeryPoint,
+ scalar::Scalar,
+};
use rand_core::OsRng;
-use x25519_dalek::{PublicKey, StaticSecret};
-use wireguard_vanity_lib::trial;
+use wireguard_vanity_lib::{make_check_predicate, Seed};
fn b1_point_generation(c: &mut Criterion) {
- c.bench_function("b1_point_generation", |b| {
- b.iter(|| StaticSecret::new(&mut OsRng))
- });
+ let seed = Seed::generate();
+ let mut scan = seed.scan();
+ c.bench_function("b1_point_generation", |b| b.iter(|| scan.next()));
}
fn b2a_point_conversion(c: &mut Criterion) {
- let private = StaticSecret::new(&mut OsRng);
+ let ed_point: EdwardsPoint = Scalar::random(&mut OsRng) * ED25519_BASEPOINT_POINT;
c.bench_function("b2a_point_conversion", |b| {
- b.iter(|| PublicKey::from(&private))
+ b.iter(|| ed_point.to_montgomery())
});
}
fn b2b_point_to_bytes(c: &mut Criterion) {
- let private = StaticSecret::new(&mut OsRng);
- let public = PublicKey::from(&private);
- c.bench_function("b2b_point_to_bytes", |b| b.iter(|| public.as_bytes()));
+ let ed_point: EdwardsPoint = Scalar::random(&mut OsRng) * ED25519_BASEPOINT_POINT;
+ let mt_point: MontgomeryPoint = ed_point.to_montgomery();
+ c.bench_function("b2b_point_to_bytes", |b| b.iter(|| mt_point.as_bytes()));
}
fn b2c_bytes_to_base64(c: &mut Criterion) {
- let private = StaticSecret::new(&mut OsRng);
- let public = PublicKey::from(&private);
- let public_bytes = public.as_bytes();
+ let ed_point: EdwardsPoint = Scalar::random(&mut OsRng) * ED25519_BASEPOINT_POINT;
+ let mt_point: MontgomeryPoint = ed_point.to_montgomery();
+ let bytes = mt_point.as_bytes();
c.bench_function("b2c_bytes_to_base64", |b| {
- b.iter(|| base64::encode(black_box(&public_bytes)))
+ b.iter(|| base64::encode(black_box(&bytes)))
});
}
fn b2d_base64_contains(c: &mut Criterion) {
- let private = StaticSecret::new(&mut OsRng);
- let public = PublicKey::from(&private);
- let public_b64 = base64::encode(public.as_bytes());
+ let ed_point: EdwardsPoint = Scalar::random(&mut OsRng) * ED25519_BASEPOINT_POINT;
+ let mt_point: MontgomeryPoint = ed_point.to_montgomery();
+ let bytes = mt_point.as_bytes();
+ let public_b64 = base64::encode(bytes);
c.bench_function("b2d_base64_contains", |b| {
b.iter(|| public_b64[0..10].to_ascii_lowercase().contains("****"))
});
}
fn b2e_total_point_checking(c: &mut Criterion) {
+ let check = make_check_predicate("****", 0, 10);
+ let seed = Seed::generate();
+ let mut scan = seed.scan();
+ let (_count, point) = scan.next().unwrap();
c.bench_function("b2e_total_point_checking", |b| {
- b.iter(|| {
- let private = StaticSecret::new(&mut OsRng);
- let public = PublicKey::from(&private);
- let public_b64 = base64::encode(public.as_bytes());
- public_b64[0..10].to_ascii_lowercase().contains("****")
- })
+ b.iter(|| check(black_box(&point)))
});
}
fn b3_point_generation_and_checking(c: &mut Criterion) {
- let prefix: &str = "****";
+ let check = make_check_predicate("****", 0, 10);
+ let seed = Seed::generate();
+ let mut scan = seed.scan();
c.bench_function("b3_point_generation_and_checking", |b| {
- b.iter(|| trial(&prefix, 0, 10))
+ b.iter(|| {
+ let (_count, point) = scan.next().unwrap();
+ check(&point)
+ })
});
}
--
2.36.0