arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
miden-crypto/benches/dsa.rs
benches/dsa.rsRaw
 1use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
 2use miden_crypto::dsa::{
 3    rpo_falcon512::SecretKey as FalconSecretKey, rpo_stark::SecretKey as RpoStarkSecretKey,
 4};
 5use rand_utils::rand_array;
 6
 7fn key_gen_falcon(c: &mut Criterion) {
 8    c.bench_function("Falcon public key generation", |bench| {
 9        bench.iter_batched(|| FalconSecretKey::new(), |sk| sk.public_key(), BatchSize::SmallInput)
10    });
11
12    c.bench_function("Falcon secret key generation", |bench| {
13        bench.iter_batched(|| {}, |_| FalconSecretKey::new(), BatchSize::SmallInput)
14    });
15}
16
17fn key_gen_rpo_stark(c: &mut Criterion) {
18    c.bench_function("RPO-STARK public key generation", |bench| {
19        bench.iter_batched(
20            || RpoStarkSecretKey::random(),
21            |sk| sk.public_key(),
22            BatchSize::SmallInput,
23        )
24    });
25
26    c.bench_function("RPO-STARK secret key generation", |bench| {
27        bench.iter_batched(|| {}, |_| RpoStarkSecretKey::random(), BatchSize::SmallInput)
28    });
29}
30
31fn signature_gen_falcon(c: &mut Criterion) {
32    c.bench_function("Falcon signature generation", |bench| {
33        bench.iter_batched(
34            || (FalconSecretKey::new(), rand_array().into()),
35            |(sk, msg)| sk.sign(msg),
36            BatchSize::SmallInput,
37        )
38    });
39}
40
41fn signature_gen_rpo_stark(c: &mut Criterion) {
42    c.bench_function("RPO-STARK signature generation", |bench| {
43        bench.iter_batched(
44            || (RpoStarkSecretKey::random(), rand_array().into()),
45            |(sk, msg)| sk.sign(msg),
46            BatchSize::SmallInput,
47        )
48    });
49}
50
51fn signature_ver_falcon(c: &mut Criterion) {
52    c.bench_function("Falcon signature verification", |bench| {
53        bench.iter_batched(
54            || {
55                let sk = FalconSecretKey::new();
56                let msg = rand_array().into();
57                (sk.public_key(), msg, sk.sign(msg))
58            },
59            |(pk, msg, sig)| pk.verify(msg, &sig),
60            BatchSize::SmallInput,
61        )
62    });
63}
64
65fn signature_ver_rpo_stark(c: &mut Criterion) {
66    c.bench_function("RPO-STARK signature verification", |bench| {
67        bench.iter_batched(
68            || {
69                let sk = RpoStarkSecretKey::random();
70                let msg = rand_array().into();
71                (sk.public_key(), msg, sk.sign(msg))
72            },
73            |(pk, msg, sig)| pk.verify(msg, &sig),
74            BatchSize::SmallInput,
75        )
76    });
77}
78
79criterion_group!(
80    dsa_group,
81    key_gen_falcon,
82    key_gen_rpo_stark,
83    signature_gen_falcon,
84    signature_gen_rpo_stark,
85    signature_ver_falcon,
86    signature_ver_rpo_stark
87);
88criterion_main!(dsa_group);