blob: e3ce506d2a7b2def7401e8d57863fc482800eccc [file] [log] [blame]
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use crypto_provider::{CryptoProvider, CryptoRng};
use crypto_provider_default::CryptoProviderImpl;
use rand_ext::random_bytes;
pub fn build_np_hkdf(c: &mut Criterion) {
let mut rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
for &num_keys in &[1_usize, 10, 100] {
c.bench_function(&format!("build {num_keys} np_hkdf from key_seed"), |b| {
let keys = (0..num_keys)
.map(|_| random_bytes::<32, CryptoProviderImpl>(&mut rng))
.collect::<Vec<_>>();
b.iter(|| {
for key_seed in keys.iter() {
black_box(np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(key_seed));
}
});
});
c.bench_function(&format!("hkdf generate {num_keys} hmac keys"), |b| {
let keys = (0..num_keys)
.map(|_| {
np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
32,
CryptoProviderImpl,
>(
&mut rng
))
})
.collect::<Vec<_>>();
b.iter(|| {
for hkdf in keys.iter() {
black_box(hkdf.extended_unsigned_metadata_key_hmac_key());
}
});
});
c.bench_function(&format!("hkdf generate {num_keys} AES keys"), |b| {
let keys = (0..num_keys)
.map(|_| {
np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
32,
CryptoProviderImpl,
>(
&mut rng
))
})
.collect::<Vec<_>>();
b.iter(|| {
for hkdf in keys.iter() {
black_box(np_hkdf::UnsignedSectionKeys::aes_key(hkdf));
}
});
});
c.bench_function(&format!("hkdf generate {num_keys} LDT keys"), |b| {
let keys = (0..num_keys)
.map(|_| {
np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
32,
CryptoProviderImpl,
>(
&mut rng
))
})
.collect::<Vec<_>>();
b.iter(|| {
for hkdf in keys.iter() {
black_box(hkdf.legacy_ldt_key());
}
});
});
}
}
criterion_group!(benches, build_np_hkdf);
criterion_main!(benches);