• 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 #![allow(missing_docs, unused_results)]
16 
17 use criterion::{black_box, criterion_group, criterion_main, Criterion};
18 use crypto_provider::{CryptoProvider, CryptoRng};
19 use crypto_provider_default::CryptoProviderImpl;
20 use np_hkdf::DerivedSectionKeys;
21 use rand_ext::random_bytes;
22 
build_np_hkdf(c: &mut Criterion)23 pub fn build_np_hkdf(c: &mut Criterion) {
24     let mut rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
25     for &num_keys in &[1_usize, 10, 100] {
26         c.bench_function(&format!("build {num_keys} np_hkdf from key_seed"), |b| {
27             let keys = (0..num_keys)
28                 .map(|_| random_bytes::<32, CryptoProviderImpl>(&mut rng))
29                 .collect::<Vec<_>>();
30             b.iter(|| {
31                 for key_seed in keys.iter() {
32                     black_box(np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(key_seed));
33                 }
34             });
35         });
36         c.bench_function(&format!("hkdf generate {num_keys} hmac keys"), |b| {
37             let keys = (0..num_keys)
38                 .map(|_| {
39                     np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
40                         32,
41                         CryptoProviderImpl,
42                     >(
43                         &mut rng
44                     ))
45                 })
46                 .collect::<Vec<_>>();
47             b.iter(|| {
48                 for hkdf in keys.iter() {
49                     black_box(hkdf.v1_mic_extended_salt_keys().identity_token_hmac_key());
50                 }
51             });
52         });
53         c.bench_function(&format!("hkdf generate {num_keys} AES keys"), |b| {
54             let keys = (0..num_keys)
55                 .map(|_| {
56                     np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
57                         32,
58                         CryptoProviderImpl,
59                     >(
60                         &mut rng
61                     ))
62                 })
63                 .collect::<Vec<_>>();
64             b.iter(|| {
65                 for hkdf in keys.iter() {
66                     black_box(hkdf.v1_mic_extended_salt_keys().aes_key());
67                 }
68             });
69         });
70         c.bench_function(&format!("hkdf generate {num_keys} LDT keys"), |b| {
71             let keys = (0..num_keys)
72                 .map(|_| {
73                     np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&random_bytes::<
74                         32,
75                         CryptoProviderImpl,
76                     >(
77                         &mut rng
78                     ))
79                 })
80                 .collect::<Vec<_>>();
81             b.iter(|| {
82                 for hkdf in keys.iter() {
83                     black_box(hkdf.v0_ldt_key());
84                 }
85             });
86         });
87     }
88 }
89 
90 criterion_group!(benches, build_np_hkdf);
91 criterion_main!(benches);
92