Skip to content

Commit 77f84dd

Browse files
committed
adapt common, demo and stm benches
1 parent d01a8e2 commit 77f84dd

File tree

7 files changed

+54
-58
lines changed

7 files changed

+54
-58
lines changed

demo/protocol-demo/src/types.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
use mithril_stm::{
2-
AggregateSignature, Clerk, Initializer, KeyRegistration, Parameters, Signer, SingleSignature,
3-
Stake, VerificationKeyProofOfPossession,
2+
AggregateSignature, Clerk, CustomMembershipDigest, Initializer, KeyRegistration, Parameters,
3+
Signer, SingleSignature, Stake, VerificationKeyProofOfPossession,
44
};
55

6-
use blake2::{Blake2b, digest::consts::U32};
7-
86
// Protocol types alias
9-
type D = Blake2b<U32>;
7+
type D = CustomMembershipDigest;
108

119
/// The id of a mithril party.
1210
pub type ProtocolPartyId = String;

mithril-common/src/crypto_helper/cardano/key_certification.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66
use std::{collections::HashMap, sync::Arc};
77

88
use anyhow::anyhow;
9-
use blake2::{
10-
Blake2b, Digest,
11-
digest::{FixedOutput, consts::U32},
12-
};
139
use kes_summed_ed25519::kes::Sum6KesSig;
1410
use rand_core::{CryptoRng, RngCore};
1511
use serde::{Deserialize, Serialize};
1612
use thiserror::Error;
1713

1814
use mithril_stm::{
19-
ClosedKeyRegistration, Initializer, KeyRegistration, Parameters, RegisterError, Signer, Stake,
20-
VerificationKeyProofOfPossession,
15+
ClosedKeyRegistration, CustomMembershipDigest, Initializer, KeyRegistration, MembershipDigest,
16+
Parameters, RegisterError, Signer, Stake, VerificationKeyProofOfPossession,
2117
};
2218

2319
use crate::{
@@ -33,7 +29,7 @@ use crate::{
3329
};
3430

3531
// Protocol types alias
36-
type D = Blake2b<U32>;
32+
type D = CustomMembershipDigest;
3733

3834
/// The KES period that is used to check if the KES keys is expired
3935
pub type KesPeriod = u32;
@@ -285,7 +281,7 @@ impl KeyRegWrapper {
285281

286282
/// Finalize the key registration.
287283
/// This function disables `ClosedKeyRegistration::register`, consumes the instance of `self`, and returns a `ClosedKeyRegistration`.
288-
pub fn close<D: Digest + FixedOutput>(self) -> ClosedKeyRegistration<D> {
284+
pub fn close<D: MembershipDigest>(self) -> ClosedKeyRegistration<D> {
289285
self.stm_key_reg.close()
290286
}
291287
}

mithril-common/src/crypto_helper/codec/binary.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,15 @@ pub trait TryFromBytes: Sized {
2929

3030
mod binary_mithril_stm {
3131
use anyhow::anyhow;
32-
use blake2::Blake2b;
33-
34-
use digest::consts::U32;
3532
use mithril_stm::{
36-
AggregateSignature, AggregateVerificationKey, Initializer, Parameters, SingleSignature,
37-
SingleSignatureWithRegisteredParty, VerificationKey, VerificationKeyProofOfPossession,
33+
AggregateSignature, AggregateVerificationKey, CustomMembershipDigest, Initializer,
34+
Parameters, SingleSignature, SingleSignatureWithRegisteredParty, VerificationKey,
35+
VerificationKeyProofOfPossession,
3836
};
3937

4038
use super::*;
4139

42-
type D = Blake2b<U32>;
40+
type D = CustomMembershipDigest;
4341

4442
impl TryToBytes for Parameters {
4543
fn to_bytes_vec(&self) -> StdResult<Vec<u8>> {

mithril-common/src/crypto_helper/types/alias.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@ use crate::crypto_helper::cardano::{
44
};
55

66
use mithril_stm::{
7-
AggregationError, Clerk, ClosedKeyRegistration, Index, Parameters, Signer, Stake,
7+
AggregationError, Clerk, ClosedKeyRegistration, CustomMembershipDigest, Index, Parameters,
8+
Signer, Stake,
89
};
910

10-
use blake2::{Blake2b, digest::consts::U32};
11-
1211
/// A protocol version
1312
pub type ProtocolVersion<'a> = &'a str;
1413

1514
// Protocol types alias
16-
pub(crate) type D = Blake2b<U32>;
15+
pub(crate) type D = CustomMembershipDigest;
1716

1817
/// The id of a mithril party.
1918
pub type ProtocolPartyId = String;

mithril-stm/benches/size_benches.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
use blake2::digest::FixedOutput;
2-
use blake2::{
3-
Blake2b, Digest,
4-
digest::consts::{U32, U64},
5-
};
1+
use blake2::{Blake2b, digest::consts::U64};
62
use rand_chacha::ChaCha20Rng;
73
use rand_core::{RngCore, SeedableRng};
84
use rayon::iter::ParallelIterator;
95
use rayon::prelude::{IntoParallelIterator, IntoParallelRefIterator};
106

117
use mithril_stm::{
12-
AggregateSignatureType, BasicVerifier, Clerk, Initializer, KeyRegistration, Parameters, Signer,
13-
SingleSignature, SingleSignatureWithRegisteredParty, Stake, VerificationKey,
8+
AggregateSignatureType, BasicVerifier, Clerk, CustomMembershipDigest, Initializer,
9+
KeyRegistration, MembershipDigest, Parameters, Signer, SingleSignature,
10+
SingleSignatureWithRegisteredParty, Stake, VerificationKey,
1411
};
1512

1613
fn size<H>(k: u64, m: u64, nparties: usize, hash_name: &str)
1714
where
18-
H: Digest + Clone + Sync + Send + Default + FixedOutput,
15+
H: MembershipDigest + Clone,
1916
{
2017
println!("+-------------------+");
2118
println!("| Hash: {hash_name} |");
@@ -68,7 +65,7 @@ where
6865

6966
fn core_size<H>(k: u64, m: u64, nparties: usize)
7067
where
71-
H: Digest + Clone + Sync + Send + Default + FixedOutput,
68+
H: MembershipDigest + Clone,
7269
{
7370
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
7471
let mut msg = [0u8; 16];
@@ -128,6 +125,16 @@ where
128125
println!("k = {k} | m = {m} | nr parties = {nparties}; {size_sigs} bytes",);
129126
}
130127

128+
/// Only for size benches
129+
#[derive(Clone, Debug, Default)]
130+
pub struct MembershipDigestU64 {}
131+
132+
impl MembershipDigest for MembershipDigestU64 {
133+
type ConcatenationHash = Blake2b<U64>;
134+
#[cfg(feature = "future_snark")]
135+
type SnarkHash = Blake2b<U64>;
136+
}
137+
131138
fn main() {
132139
println!("+-------------------+");
133140
println!("| Size of proofs |");
@@ -137,8 +144,8 @@ fn main() {
137144

138145
let params: [(u64, u64, usize); 2] = [(445, 2728, 3000), (554, 3597, 3000)];
139146
for (k, m, nparties) in params {
140-
size::<Blake2b<U64>>(k, m, nparties, "Blake2b 512");
141-
size::<Blake2b<U32>>(k, m, nparties, "Blake2b 256");
147+
size::<MembershipDigestU64>(k, m, nparties, "Blake2b 512");
148+
size::<CustomMembershipDigest>(k, m, nparties, "Blake2b 256");
142149
}
143150

144151
println!("\n+-------------------------+");
@@ -147,7 +154,7 @@ fn main() {
147154
println!("+-------------------------+");
148155

149156
for (k, m, nparties) in params {
150-
core_size::<Blake2b<U64>>(k, m, nparties);
157+
core_size::<MembershipDigestU64>(k, m, nparties);
151158
}
152159
println!("+-------------------------+");
153160
}

mithril-stm/benches/stm.rs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
1-
use std::fmt::Debug;
2-
3-
use blake2::digest::{Digest, FixedOutput};
4-
use blake2::{Blake2b, digest::consts::U32};
51
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
62
use rand_chacha::ChaCha20Rng;
73
use rand_core::{RngCore, SeedableRng};
84
use rayon::prelude::*;
95

106
use mithril_stm::{
11-
AggregateSignature, AggregateSignatureType, BasicVerifier, Clerk, Initializer, KeyRegistration,
12-
Parameters, Signer, Stake, VerificationKey,
7+
AggregateSignature, AggregateSignatureType, BasicVerifier, Clerk, CustomMembershipDigest,
8+
Initializer, KeyRegistration, MembershipDigest, Parameters, Signer, Stake, VerificationKey,
139
};
1410

1511
/// This benchmark framework is not ideal. We really have to think what is the best mechanism for
1612
/// benchmarking these signatures, over which parameters, how many times to run them, etc:
1713
/// * Registration depends on the number of parties (should be constant, as it is a lookup table)
1814
/// * Signing depends on the parameter `m`, as it defines the number of lotteries a user can play
1915
/// * Aggregation depends on `k`.
20-
fn stm_benches<H>(c: &mut Criterion, nr_parties: usize, params: Parameters, hashing_alg: &str)
21-
where
22-
H: Clone + Debug + Digest + Send + Sync + FixedOutput + Default,
23-
{
16+
fn stm_benches<H: MembershipDigest + Clone>(
17+
c: &mut Criterion,
18+
nr_parties: usize,
19+
params: Parameters,
20+
hashing_alg: &str,
21+
) {
2422
let mut group = c.benchmark_group(format!("STM/{hashing_alg}"));
2523
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
2624
let mut msg = [0u8; 16];
@@ -55,10 +53,10 @@ where
5553

5654
let closed_reg = key_reg.close();
5755

58-
let signers = initializers
56+
let signers: Vec<Signer<H>> = initializers
5957
.into_par_iter()
6058
.map(|p| p.create_signer(closed_reg.clone()).unwrap())
61-
.collect::<Vec<Signer<H>>>();
59+
.collect();
6260

6361
group.bench_function(BenchmarkId::new("Play all lotteries", &param_string), |b| {
6462
b.iter(|| {
@@ -83,7 +81,7 @@ fn batch_benches<H>(
8381
params: Parameters,
8482
hashing_alg: &str,
8583
) where
86-
H: Clone + Debug + Digest + FixedOutput + Send + Sync,
84+
H: MembershipDigest + Clone,
8785
{
8886
let mut group = c.benchmark_group(format!("STM/{hashing_alg}"));
8987
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
@@ -157,7 +155,7 @@ fn batch_benches<H>(
157155

158156
fn basic_verifier_benches<H>(c: &mut Criterion, nr_parties: usize, params: Parameters)
159157
where
160-
H: Clone + Debug + Digest + Send + Sync + FixedOutput + Default,
158+
H: MembershipDigest + Clone,
161159
{
162160
let mut group = c.benchmark_group("Core verifier");
163161
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
@@ -209,7 +207,7 @@ where
209207
}
210208

211209
fn batch_stm_benches_blake_300(c: &mut Criterion) {
212-
batch_benches::<Blake2b<U32>>(
210+
batch_benches::<CustomMembershipDigest>(
213211
c,
214212
&[1, 10, 20, 100],
215213
300,
@@ -223,7 +221,7 @@ fn batch_stm_benches_blake_300(c: &mut Criterion) {
223221
}
224222

225223
fn stm_benches_blake_300(c: &mut Criterion) {
226-
stm_benches::<Blake2b<U32>>(
224+
stm_benches::<CustomMembershipDigest>(
227225
c,
228226
300,
229227
Parameters {
@@ -236,7 +234,7 @@ fn stm_benches_blake_300(c: &mut Criterion) {
236234
}
237235

238236
fn core_verifier_benches_blake_300(c: &mut Criterion) {
239-
basic_verifier_benches::<Blake2b<U32>>(
237+
basic_verifier_benches::<CustomMembershipDigest>(
240238
c,
241239
300,
242240
Parameters {
@@ -248,7 +246,7 @@ fn core_verifier_benches_blake_300(c: &mut Criterion) {
248246
}
249247

250248
fn batch_stm_benches_blake_2000(c: &mut Criterion) {
251-
batch_benches::<Blake2b<U32>>(
249+
batch_benches::<CustomMembershipDigest>(
252250
c,
253251
&[1, 10, 20, 100],
254252
2000,
@@ -262,7 +260,7 @@ fn batch_stm_benches_blake_2000(c: &mut Criterion) {
262260
}
263261

264262
fn stm_benches_blake_2000(c: &mut Criterion) {
265-
stm_benches::<Blake2b<U32>>(
263+
stm_benches::<CustomMembershipDigest>(
266264
c,
267265
2000,
268266
Parameters {
@@ -275,7 +273,7 @@ fn stm_benches_blake_2000(c: &mut Criterion) {
275273
}
276274

277275
fn core_verifier_benches_blake_2000(c: &mut Criterion) {
278-
basic_verifier_benches::<Blake2b<U32>>(
276+
basic_verifier_benches::<CustomMembershipDigest>(
279277
c,
280278
2000,
281279
Parameters {

mithril-stm/src/membership_commitment/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ use blake2::{Blake2b, digest::consts::U32};
66
use digest::{Digest, FixedOutput};
77
use std::fmt::Debug;
88

9-
pub trait MembershipDigest: Send + Sync {
10-
type ConcatenationHash: Digest + FixedOutput + Clone + Debug;
9+
pub trait MembershipDigest {
10+
type ConcatenationHash: Digest + FixedOutput + Clone + Debug + Send + Sync;
1111
#[cfg(feature = "future_snark")]
1212
type SnarkHash: Digest + FixedOutput + Clone;
1313
}
1414

1515
/// Only for tests
16-
#[derive(Clone, Debug)]
16+
#[derive(Clone, Debug, Default)]
1717
pub struct CustomMembershipDigest {}
1818

1919
impl MembershipDigest for CustomMembershipDigest {

0 commit comments

Comments
 (0)