Skip to content

Commit

Permalink
ml-kem: fix benchmarks with default features (#55)
Browse files Browse the repository at this point in the history
  • Loading branch information
rozbb authored Sep 5, 2024
1 parent 3460f1f commit 41ae1d6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 23 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ml-kem.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- run: cargo build --benches
- run: cargo build --benches --all-features
- run: cargo test --no-default-features
- run: cargo test
Expand Down
33 changes: 10 additions & 23 deletions ml-kem/benches/mlkem.rs
Original file line number Diff line number Diff line change
@@ -1,55 +1,42 @@
use ::kem::{Decapsulate, Encapsulate};
use criterion::{criterion_group, criterion_main, Criterion};
use crypto_common::rand_core::CryptoRngCore;
use hybrid_array::{Array, ArraySize};
use ml_kem::*;

pub fn rand<L: ArraySize>(rng: &mut impl CryptoRngCore) -> Array<u8, L> {
let mut val = Array::<u8, L>::default();
rng.fill_bytes(&mut val);
val
}

fn criterion_benchmark(c: &mut Criterion) {
let mut rng = rand::thread_rng();
let d: B32 = rand(&mut rng);
let z: B32 = rand(&mut rng);
let m: B32 = rand(&mut rng);

let (dk, ek) = MlKem768::generate_deterministic(&d, &z);
let dk_bytes = dk.as_bytes();
let ek_bytes = ek.as_bytes();
let (ct, _sk) = ek.encapsulate(&mut rng).unwrap();

// Key generation
c.bench_function("keygen", |b| {
b.iter(|| {
let (dk, ek) = <MlKem768 as KemCore>::generate_deterministic(&d, &z);
let (dk, ek) = <MlKem768 as KemCore>::generate(&mut rng);
let _dk_bytes = dk.as_bytes();
let _ek_bytes = ek.as_bytes();
})
});

let (dk, ek) = MlKem768::generate(&mut rng);
let dk_bytes = dk.as_bytes();
let ek_bytes = ek.as_bytes();

let ek = <MlKem768 as KemCore>::EncapsulationKey::from_bytes(&ek_bytes);
// Encapsulation
c.bench_function("encapsulate", |b| {
b.iter(|| {
let ek = <MlKem768 as KemCore>::EncapsulationKey::from_bytes(&ek_bytes);
ek.encapsulate_deterministic(&m).unwrap();
})
b.iter(|| ek.encapsulate(&mut rng).unwrap())
});
let (ct, _ss) = ek.encapsulate(&mut rng).unwrap();

// Decapsulation
let dk = <MlKem768 as KemCore>::DecapsulationKey::from_bytes(&dk_bytes);
c.bench_function("decapsulate", |b| {
b.iter(|| {
let dk = <MlKem768 as KemCore>::DecapsulationKey::from_bytes(&dk_bytes);
dk.decapsulate(&ct).unwrap();
})
});

// Round trip
c.bench_function("round_trip", |b| {
b.iter(|| {
let (dk, ek) = <MlKem768 as KemCore>::generate_deterministic(&d, &z);
let (dk, ek) = <MlKem768 as KemCore>::generate(&mut rng);
let (ct, _sk) = ek.encapsulate(&mut rng).unwrap();
dk.decapsulate(&ct).unwrap();
})
Expand Down

0 comments on commit 41ae1d6

Please sign in to comment.