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