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"
|
||||
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)]
|
||||
#![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)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue