220 lines
7.0 KiB
Rust
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);
|