mystuff/net/gurk-rs/files/vendor/zkgroup/benches/zkgroup_benchmarks.rs
2022-10-31 22:01:15 +01:00

220 lines
7.0 KiB
Rust

use criterion::{criterion_group, criterion_main, Criterion};
extern crate zkgroup;
fn benchmark_integration_auth(c: &mut Criterion) {
let server_secret_params = zkgroup::ServerSecretParams::generate(zkgroup::TEST_ARRAY_32);
let server_public_params = server_secret_params.get_public_params();
let master_key = zkgroup::groups::GroupMasterKey::new(zkgroup::TEST_ARRAY_32_1);
let group_secret_params =
zkgroup::groups::GroupSecretParams::derive_from_master_key(master_key);
let group_public_params = group_secret_params.get_public_params();
// Random UID and issueTime
let uid = zkgroup::TEST_ARRAY_16;
let redemption_time = 123456u32;
// SERVER
// Issue credential
let randomness = zkgroup::TEST_ARRAY_32_2;
let auth_credential_response =
server_secret_params.issue_auth_credential(randomness, uid, redemption_time);
c.bench_function("issue_auth_credential", |b| {
b.iter(|| server_secret_params.issue_auth_credential(randomness, uid, redemption_time))
});
// CLIENT
let auth_credential = server_public_params
.receive_auth_credential(uid, redemption_time, &auth_credential_response)
.unwrap();
c.bench_function("receive_auth_credential", |b| {
b.iter(|| {
server_public_params
.receive_auth_credential(uid, redemption_time, &auth_credential_response)
.unwrap()
})
});
// Create and decrypt user entry
let uuid_ciphertext = group_secret_params.encrypt_uuid(uid);
let plaintext = group_secret_params.decrypt_uuid(uuid_ciphertext).unwrap();
assert!(plaintext == uid);
// Create and receive presentation
let randomness = zkgroup::TEST_ARRAY_32_5;
let presentation = server_public_params.create_auth_credential_presentation(
randomness,
group_secret_params,
auth_credential,
);
c.bench_function("create_auth_credential_presentation", |b| {
b.iter(|| {
server_public_params.create_auth_credential_presentation(
randomness,
group_secret_params,
auth_credential,
)
})
});
let _presentation_bytes = &bincode::serialize(&presentation).unwrap();
//for b in presentation_bytes.iter() {
// print!("0x{:02x}, ", b);
//}
//assert!(AUTH_CREDENTIAL_PRESENTATION_RESULT[..] == presentation_bytes[..]);
c.bench_function("verify_auth_credential_presentation", |b| {
b.iter(|| {
server_secret_params
.verify_auth_credential_presentation(group_public_params, &presentation)
.unwrap();
})
});
}
// Copied and modified from tests/integration_tests.rs
pub fn benchmark_integration_profile(c: &mut Criterion) {
// Random UID and issueTime
let _uid = zkgroup::TEST_ARRAY_16;
// SERVER
let server_secret_params = zkgroup::ServerSecretParams::generate(zkgroup::TEST_ARRAY_32);
let server_public_params = server_secret_params.get_public_params();
// CLIENT
let master_key = zkgroup::groups::GroupMasterKey::new(zkgroup::TEST_ARRAY_32_1);
let group_secret_params =
zkgroup::groups::GroupSecretParams::derive_from_master_key(master_key);
let group_public_params = group_secret_params.get_public_params();
let uid = zkgroup::TEST_ARRAY_16;
let profile_key =
zkgroup::profiles::ProfileKey::create(zkgroup::common::constants::TEST_ARRAY_32_1);
let profile_key_commitment = profile_key.get_commitment(uid);
// Create context and request
let randomness = zkgroup::TEST_ARRAY_32_3;
let context = server_public_params.create_profile_key_credential_request_context(
randomness,
uid,
profile_key,
);
c.bench_function("create_profile_key_credential_request_context", |b| {
b.iter(|| {
server_public_params.create_profile_key_credential_request_context(
randomness,
uid,
profile_key,
)
})
});
let request = context.get_request();
// SERVER
let randomness = zkgroup::TEST_ARRAY_32_4;
let response = server_secret_params
.issue_profile_key_credential(randomness, &request, uid, profile_key_commitment)
.unwrap();
c.bench_function("issue_profile_key_credential", |b| {
b.iter(|| {
server_secret_params
.issue_profile_key_credential(randomness, &request, uid, profile_key_commitment)
.unwrap()
})
});
// CLIENT
// Gets stored profile credential
let profile_key_credential = server_public_params
.receive_profile_key_credential(&context, &response)
.unwrap();
c.bench_function("receive_profile_key_credential", |b| {
b.iter(|| {
server_public_params
.receive_profile_key_credential(&context, &response)
.unwrap()
})
});
// Create encrypted UID and profile key
let uuid_ciphertext = group_secret_params.encrypt_uuid(uid);
c.bench_function("encrypt_uuid", |b| {
b.iter(|| group_secret_params.encrypt_uuid(uid))
});
let plaintext = group_secret_params.decrypt_uuid(uuid_ciphertext).unwrap();
c.bench_function("decrypt_uuid", |b| {
b.iter(|| group_secret_params.decrypt_uuid(uuid_ciphertext))
});
assert!(plaintext == uid);
let profile_key_ciphertext = group_secret_params.encrypt_profile_key(profile_key, uid);
c.bench_function("encrypt_profile_key", |b| {
b.iter(|| group_secret_params.encrypt_profile_key(profile_key, uid))
});
let decrypted_profile_key = group_secret_params
.decrypt_profile_key(profile_key_ciphertext, uid)
.unwrap();
c.bench_function("decrypt_profile_key", |b| {
b.iter(|| group_secret_params.decrypt_profile_key(profile_key_ciphertext, uid))
});
assert!(decrypted_profile_key.get_bytes() == profile_key.get_bytes());
// Create presentation
let randomness = zkgroup::TEST_ARRAY_32_5;
let presentation = server_public_params.create_profile_key_credential_presentation(
randomness,
group_secret_params,
profile_key_credential,
);
c.bench_function("create_profile_key_credential_presentation", |b| {
b.iter(|| {
server_public_params.create_profile_key_credential_presentation(
randomness,
group_secret_params,
profile_key_credential,
)
})
});
// SERVER
server_secret_params
.verify_profile_key_credential_presentation(group_public_params, &presentation)
.unwrap();
c.bench_function("verify_profile_key_credential_presentation", |b| {
b.iter(|| {
server_secret_params
.verify_profile_key_credential_presentation(group_public_params, &presentation)
})
});
}
criterion_group!(
benches,
benchmark_integration_profile,
benchmark_integration_auth
);
criterion_main!(benches);