Benchmarks
This commit is contained in:
parent
bc9fc9209b
commit
d5adb82a58
|
@ -13,3 +13,10 @@ curve25519-dalek = {version="3.0.0", features=["serde"]}
|
||||||
sha3 = "0.9.1"
|
sha3 = "0.9.1"
|
||||||
bit-vec = "0.6.3"
|
bit-vec = "0.6.3"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
criterion = {version="0.3", features=["html_reports"]}
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "fuzzy_tags_benches"
|
||||||
|
harness = false
|
||||||
|
|
||||||
|
|
|
@ -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);
|
24
src/lib.rs
24
src/lib.rs
|
@ -1,4 +1,3 @@
|
||||||
#![feature(test)]
|
|
||||||
#![deny(missing_docs)]
|
#![deny(missing_docs)]
|
||||||
#![feature(external_doc)]
|
#![feature(external_doc)]
|
||||||
#![doc(include = "../README.md")]
|
#![doc(include = "../README.md")]
|
||||||
|
@ -55,9 +54,12 @@ impl FuzzyMetaDetectionKey {
|
||||||
let k_i = FuzzyMetaTagKeyPair::h(tag.u, tag.u.mul(x_i), w);
|
let k_i = FuzzyMetaTagKeyPair::h(tag.u, tag.u.mul(x_i), w);
|
||||||
|
|
||||||
// calculate the "original" plaintext
|
// calculate the "original" plaintext
|
||||||
let c_i = match tag.ciphertexts.get(i).unwrap() {
|
let c_i = match tag.ciphertexts.get(i) {
|
||||||
true => 0x01,
|
Some(true) => 0x01,
|
||||||
false => 0x00,
|
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;
|
let b_i = k_i ^ c_i;
|
||||||
|
@ -180,9 +182,7 @@ impl FuzzyMetaTagKeyPair {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
extern crate test;
|
|
||||||
use crate::FuzzyMetaTagKeyPair;
|
use crate::FuzzyMetaTagKeyPair;
|
||||||
use test::Bencher;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn correctness() {
|
fn correctness() {
|
||||||
|
@ -195,13 +195,14 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[test]
|
||||||
fn generate(_b: &mut Bencher) {
|
fn false_postives() {
|
||||||
|
let gamma = 3;
|
||||||
let number_of_messages = 1000;
|
let number_of_messages = 1000;
|
||||||
let key = FuzzyMetaTagKeyPair::generate(3);
|
let key = FuzzyMetaTagKeyPair::generate(gamma);
|
||||||
let mut false_positives = 0;
|
let mut false_positives = 0;
|
||||||
for _i in 0..number_of_messages {
|
for _i in 0..number_of_messages {
|
||||||
let key2 = FuzzyMetaTagKeyPair::generate(3);
|
let key2 = FuzzyMetaTagKeyPair::generate(gamma);
|
||||||
let tag = key2.public_key.generate_tag();
|
let tag = key2.public_key.generate_tag();
|
||||||
assert!(key2.detection_key.test_tag(&tag));
|
assert!(key2.detection_key.test_tag(&tag));
|
||||||
if key.detection_key.test_tag(&tag) == true {
|
if key.detection_key.test_tag(&tag) == true {
|
||||||
|
@ -210,8 +211,9 @@ mod tests {
|
||||||
}
|
}
|
||||||
println!(
|
println!(
|
||||||
"Expected False Positive Rate: {}\nActual False Positive Rate: {}",
|
"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)
|
(false_positives as f64 / number_of_messages as f64)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue