use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; use miden_crypto::dsa::{ rpo_falcon512::SecretKey as FalconSecretKey, rpo_stark::SecretKey as RpoStarkSecretKey, }; use rand_utils::rand_array; fn key_gen_falcon(c: &mut Criterion) { c.bench_function("Falcon public key generation", |bench| { bench.iter_batched(|| FalconSecretKey::new(), |sk| sk.public_key(), BatchSize::SmallInput) }); c.bench_function("Falcon secret key generation", |bench| { bench.iter_batched(|| {}, |_| FalconSecretKey::new(), BatchSize::SmallInput) }); } fn key_gen_rpo_stark(c: &mut Criterion) { c.bench_function("RPO-STARK public key generation", |bench| { bench.iter_batched( || RpoStarkSecretKey::random(), |sk| sk.public_key(), BatchSize::SmallInput, ) }); c.bench_function("RPO-STARK secret key generation", |bench| { bench.iter_batched(|| {}, |_| RpoStarkSecretKey::random(), BatchSize::SmallInput) }); } fn signature_gen_falcon(c: &mut Criterion) { c.bench_function("Falcon signature generation", |bench| { bench.iter_batched( || (FalconSecretKey::new(), rand_array().into()), |(sk, msg)| sk.sign(msg), BatchSize::SmallInput, ) }); } fn signature_gen_rpo_stark(c: &mut Criterion) { c.bench_function("RPO-STARK signature generation", |bench| { bench.iter_batched( || (RpoStarkSecretKey::random(), rand_array().into()), |(sk, msg)| sk.sign(msg), BatchSize::SmallInput, ) }); } fn signature_ver_falcon(c: &mut Criterion) { c.bench_function("Falcon signature verification", |bench| { bench.iter_batched( || { let sk = FalconSecretKey::new(); let msg = rand_array().into(); (sk.public_key(), msg, sk.sign(msg)) }, |(pk, msg, sig)| pk.verify(msg, &sig), BatchSize::SmallInput, ) }); } fn signature_ver_rpo_stark(c: &mut Criterion) { c.bench_function("RPO-STARK signature verification", |bench| { bench.iter_batched( || { let sk = RpoStarkSecretKey::random(); let msg = rand_array().into(); (sk.public_key(), msg, sk.sign(msg)) }, |(pk, msg, sig)| pk.verify(msg, &sig), BatchSize::SmallInput, ) }); } criterion_group!( dsa_group, key_gen_falcon, key_gen_rpo_stark, signature_gen_falcon, signature_gen_rpo_stark, signature_ver_falcon, signature_ver_rpo_stark ); criterion_main!(dsa_group);