Benchmarks

This commit is contained in:
Sarah Jamie Lewis 2021-01-30 00:23:46 -08:00
parent bc9fc9209b
commit d5adb82a58
3 changed files with 46 additions and 11 deletions

View File

@ -13,3 +13,10 @@ curve25519-dalek = {version="3.0.0", features=["serde"]}
sha3 = "0.9.1"
bit-vec = "0.6.3"
[dev-dependencies]
criterion = {version="0.3", features=["html_reports"]}
[[bench]]
name = "fuzzy_tags_benches"
harness = false

View File

@ -0,0 +1,26 @@
use criterion::{criterion_group, criterion_main, Criterion, BenchmarkId};
use fuzzymetatag::FuzzyMetaTagKeyPair;
use std::time::Duration;
fn benchmark_generate_tag(c: &mut Criterion) {
let mut group = c.benchmark_group("generate_tags");
group.measurement_time(Duration::new(10,0));
for gamma in [2,4,8,16,24,32].iter() {
let key = FuzzyMetaTagKeyPair::generate(*gamma as usize);
group.bench_with_input(BenchmarkId::from_parameter(gamma), gamma, |b, _gamma| b.iter(|| { key.public_key.generate_tag() }));
}
}
fn benchmark_test_tag(c: &mut Criterion) {
let mut group = c.benchmark_group("test_tags");
group.measurement_time(Duration::new(10,0));
for gamma in [2,4,8,16,24,32].iter() {
let key = FuzzyMetaTagKeyPair::generate(*gamma as usize);
let tag = key.public_key.generate_tag();
group.bench_with_input(BenchmarkId::from_parameter(gamma), gamma, |b, _gamma| b.iter(|| { key.detection_key.test_tag(&tag) }));
}
}
criterion_group!(benches, benchmark_generate_tag, benchmark_test_tag);
criterion_main!(benches);

View File

@ -1,4 +1,3 @@
#![feature(test)]
#![deny(missing_docs)]
#![feature(external_doc)]
#![doc(include = "../README.md")]
@ -55,9 +54,12 @@ impl FuzzyMetaDetectionKey {
let k_i = FuzzyMetaTagKeyPair::h(tag.u, tag.u.mul(x_i), w);
// calculate the "original" plaintext
let c_i = match tag.ciphertexts.get(i).unwrap() {
true => 0x01,
false => 0x00,
let c_i = match tag.ciphertexts.get(i) {
Some(true) => 0x01,
Some(false) => 0x00,
_ => 0x00,
// we've run our of ciphertext, it doesn't really matter what we put here, the rest of the test will fail
// since the security of k_i is modelled as a random oracle, (k_i ^ 0) should also be random
};
let b_i = k_i ^ c_i;
@ -180,9 +182,7 @@ impl FuzzyMetaTagKeyPair {
#[cfg(test)]
mod tests {
extern crate test;
use crate::FuzzyMetaTagKeyPair;
use test::Bencher;
#[test]
fn correctness() {
@ -195,13 +195,14 @@ mod tests {
}
}
#[bench]
fn generate(_b: &mut Bencher) {
#[test]
fn false_postives() {
let gamma = 3;
let number_of_messages = 1000;
let key = FuzzyMetaTagKeyPair::generate(3);
let key = FuzzyMetaTagKeyPair::generate(gamma);
let mut false_positives = 0;
for _i in 0..number_of_messages {
let key2 = FuzzyMetaTagKeyPair::generate(3);
let key2 = FuzzyMetaTagKeyPair::generate(gamma);
let tag = key2.public_key.generate_tag();
assert!(key2.detection_key.test_tag(&tag));
if key.detection_key.test_tag(&tag) == true {
@ -210,8 +211,9 @@ mod tests {
}
println!(
"Expected False Positive Rate: {}\nActual False Positive Rate: {}",
(2.0_f64).powi(-3),
(2.0_f64).powi(-(gamma as i32)),
(false_positives as f64 / number_of_messages as f64)
);
}
}