1 // Copyright 2022 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 use criterion::{black_box, criterion_group, criterion_main, Criterion};
16 use crypto_provider::{CryptoProvider, CryptoRng};
17 use crypto_provider_rustcrypto::RustCrypto;
18 use rand_ext::random_bytes;
19
build_np_hkdf(c: &mut Criterion)20 pub fn build_np_hkdf(c: &mut Criterion) {
21 let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new();
22 for &num_keys in &[1_usize, 10, 100] {
23 c.bench_function(&format!("build {num_keys} np_hkdf from key_seed"), |b| {
24 let keys = (0..num_keys)
25 .map(|_| random_bytes::<32, RustCrypto>(&mut rng))
26 .collect::<Vec<_>>();
27 b.iter(|| {
28 for key_seed in keys.iter() {
29 black_box(np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(key_seed));
30 }
31 });
32 });
33 c.bench_function(&format!("hkdf generate {num_keys} hmac keys"), |b| {
34 let keys = (0..num_keys)
35 .map(|_| {
36 np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>(
37 &mut rng,
38 ))
39 })
40 .collect::<Vec<_>>();
41 b.iter(|| {
42 for hkdf in keys.iter() {
43 black_box(hkdf.extended_unsigned_metadata_key_hmac_key());
44 }
45 });
46 });
47 c.bench_function(&format!("hkdf generate {num_keys} AES keys"), |b| {
48 let keys = (0..num_keys)
49 .map(|_| {
50 np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>(
51 &mut rng,
52 ))
53 })
54 .collect::<Vec<_>>();
55 b.iter(|| {
56 for hkdf in keys.iter() {
57 black_box(hkdf.extended_unsigned_section_aes_key());
58 }
59 });
60 });
61 c.bench_function(&format!("hkdf generate {num_keys} LDT keys"), |b| {
62 let keys = (0..num_keys)
63 .map(|_| {
64 np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>(
65 &mut rng,
66 ))
67 })
68 .collect::<Vec<_>>();
69 b.iter(|| {
70 for hkdf in keys.iter() {
71 black_box(hkdf.legacy_ldt_key());
72 }
73 });
74 });
75 }
76 }
77
78 criterion_group!(benches, build_np_hkdf);
79 criterion_main!(benches);
80