Skip to content

Commit 24559b5

Browse files
authored
sm2: add SM2DSA benchmarks (#1595)
Adapted from the `ecdsa` crate (perhaps we should just put them in `signature` since they pretty much work for any signature system which uses its traits)
1 parent dc2d840 commit 24559b5

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

sm2/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ pem = ["elliptic-curve/pem", "pkcs8"]
5252
pkcs8 = ["elliptic-curve/pkcs8", "der"]
5353
serde = ["elliptic-curve/serde", "primeorder?/serde", "serdect"]
5454

55+
[[bench]]
56+
name = "dsa"
57+
harness = false
58+
required-features = ["dsa"]
59+
5560
[[bench]]
5661
name = "field"
5762
harness = false

sm2/benches/dsa.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//! SM2DSA benchmarks
2+
3+
use core::hint::black_box;
4+
use criterion::{
5+
BenchmarkGroup, Criterion, criterion_group, criterion_main, measurement::Measurement,
6+
};
7+
use hex_literal::hex;
8+
use signature::{Signer, Verifier};
9+
use sm2::dsa::{Signature, SigningKey};
10+
11+
const SIGNING_KEY_BYTES: [u8; 32] =
12+
hex!("1cf6bc6c7f642a84994119e206c9f0753ff100709f4fd12f2338c1be60bf4175");
13+
14+
fn signing_key() -> SigningKey {
15+
SigningKey::from_bytes("", &SIGNING_KEY_BYTES.into()).unwrap()
16+
}
17+
18+
fn bench_sign<M: Measurement>(group: &mut BenchmarkGroup<'_, M>) {
19+
let sk = black_box(signing_key());
20+
let msg = black_box(b"example message");
21+
group.bench_function("sign", |b| {
22+
b.iter(|| {
23+
let sig: Signature = sk.sign(msg);
24+
black_box(sig)
25+
})
26+
});
27+
}
28+
29+
fn bench_verify<M: Measurement>(group: &mut BenchmarkGroup<'_, M>) {
30+
let sk = black_box(signing_key());
31+
let vk = black_box(sk.verifying_key());
32+
let msg = black_box(b"example message");
33+
let sig: Signature = black_box(sk.sign(msg));
34+
group.bench_function("verify", |b| b.iter(|| vk.verify(msg, &sig)));
35+
}
36+
37+
fn bench_dsa(c: &mut Criterion) {
38+
let mut group = c.benchmark_group("SM2DSA");
39+
bench_sign(&mut group);
40+
bench_verify(&mut group);
41+
group.finish();
42+
}
43+
44+
criterion_group!(benches, bench_dsa);
45+
criterion_main!(benches);

0 commit comments

Comments
 (0)