• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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