Skip to content
Snippets Groups Projects
Commit d38ed26b authored by Éloïs's avatar Éloïs
Browse files

[bench] compare ring and sodium for verify operation

parent 0d192287
No related branches found
No related tags found
1 merge request!5Benches ring sodium
Pipeline #8230 passed
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use dup_crypto::seeds::Seed32;
use ring::signature::Ed25519KeyPair as RingKeyPair;
use sodiumoxide::crypto::sign;
use ring::signature::{Ed25519KeyPair as RingKeyPair, KeyPair, UnparsedPublicKey, ED25519};
use sodiumoxide::crypto::sign::{
ed25519::{PublicKey, SecretKey, Seed as SodiumSeed, Signature},
keypair_from_seed, sign_detached, verify_detached,
};
const MESSAGE: &[u8] = b"azedjlazifjs dleufxmjz jfmjfmljrfmlgc jzlamu^^^^^^^^^^^^^^^^^^^^^ssssssssssssssssssssssss\
ssssssssssssszaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa541368630...5.31873679387azqszxdxs<dzdq ccg ill:;n: \
......@@ -11,16 +13,28 @@ fn ring_sign(ring_key_pair: &RingKeyPair) {
ring_key_pair.sign(MESSAGE);
}
fn sodium_sign(sodium_secret_key: &sodiumoxide::crypto::sign::ed25519::SecretKey) {
sign::sign(MESSAGE, &sodium_secret_key);
fn ring_verify((ring_key_pair, signature): (&RingKeyPair, &[u8])) {
UnparsedPublicKey::new(&ED25519, ring_key_pair.public_key())
.verify(MESSAGE, signature)
.expect("invalid sig");
}
fn sodium_sign(sodium_secret_key: &SecretKey) {
let _ = sign_detached(MESSAGE, &sodium_secret_key);
}
fn sodium_verify((public_key, signature): (&PublicKey, &Signature)) {
assert!(verify_detached(signature, MESSAGE, public_key))
}
pub fn benchmark(c: &mut Criterion) {
let ring_key_pair = RingKeyPair::from_seed_unchecked(
Seed32::random().expect("fail to gen random seed").as_ref(),
)
.expect("fail to gen ring keypair");
let (_, sodium_secret_key) = sign::gen_keypair();
// Generate keypair
let seed = dup_crypto::rand::gen_32_bytes().expect("fail to gen random seed");
let ring_key_pair =
RingKeyPair::from_seed_unchecked(seed.as_ref()).expect("fail to gen ring keypair");
let (sodium_public_key, sodium_secret_key) = keypair_from_seed(&SodiumSeed(seed));
// Sign benches
let mut group = c.benchmark_group("sign");
group.bench_function("sodium_sign", |b| {
b.iter(|| sodium_sign(black_box(&sodium_secret_key)))
......@@ -29,6 +43,20 @@ pub fn benchmark(c: &mut Criterion) {
b.iter(|| ring_sign(black_box(&ring_key_pair)))
});
group.finish();
// Generate signature
let ring_sig = ring_key_pair.sign(MESSAGE);
let sodium_sig = sign_detached(MESSAGE, &sodium_secret_key);
// Verify benches
let mut group = c.benchmark_group("verify");
group.bench_function("sodium_verify", |b| {
b.iter(|| sodium_verify(black_box((&sodium_public_key, &sodium_sig))))
});
group.bench_function("ring_verify", |b| {
b.iter(|| ring_verify(black_box((&ring_key_pair, ring_sig.as_ref()))))
});
group.finish();
}
criterion_group!(benches, benchmark);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment