aws-lc-rs-testing/benches/kem_benchmark.rs (55 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 OR ISC use aws_lc_rs::kem::{Algorithm, DecapsulationKey, ML_KEM_1024, ML_KEM_512, ML_KEM_768}; use criterion::{criterion_group, criterion_main, Criterion}; const KEM_ALGORITHMS: &[Algorithm; 3] = &[ML_KEM_512, ML_KEM_768, ML_KEM_1024]; fn bench_kem_keygen(c: &mut Criterion) { for ele in KEM_ALGORITHMS { let bench_group_name = format!("KEM/{:?}/keygen", ele.id()); let mut group = c.benchmark_group(bench_group_name); group.bench_function("AWS-LC", |b| { b.iter(|| { DecapsulationKey::generate(ele).unwrap(); }); }); } } fn bench_kem_encapsulate(c: &mut Criterion) { for ele in KEM_ALGORITHMS { let bench_group_name = format!("KEM/{:?}/encapsulate", ele.id()); let mut group = c.benchmark_group(bench_group_name); group.bench_function("AWS-LC", |b| { b.iter_batched( || { let private = DecapsulationKey::generate(ele).unwrap(); private.encapsulation_key().unwrap() }, |key| key.encapsulate(), criterion::BatchSize::LargeInput, ); }); } } fn bench_kem_decapsulate(c: &mut Criterion) { for ele in KEM_ALGORITHMS { let bench_group_name = format!("KEM/{:?}/decapsulate", ele.id()); let mut group = c.benchmark_group(bench_group_name); group.bench_function("AWS-LC", |b| { b.iter_batched( || { let private = DecapsulationKey::generate(ele).unwrap(); let public = private.encapsulation_key().unwrap(); let (ciphertext, _) = public.encapsulate().unwrap(); (private, ciphertext) }, |(key, ciphertext)| key.decapsulate(ciphertext).unwrap(), criterion::BatchSize::LargeInput, ); }); } } fn bench_kem(c: &mut Criterion) { bench_kem_keygen(c); bench_kem_encapsulate(c); bench_kem_decapsulate(c); } criterion_group!(benches, bench_kem); criterion_main!(benches);