@@ -4,9 +4,11 @@ use blake2::{
4
4
Blake2b , Digest ,
5
5
} ;
6
6
use mithril:: key_reg:: KeyReg ;
7
- use mithril:: stm:: { StmInitializer , StmParameters } ;
7
+ use mithril:: stm:: { StmClerk , StmInitializer , StmParameters , StmSig , StmSigner } ;
8
8
use rand_chacha:: ChaCha20Rng ;
9
9
use rand_core:: { RngCore , SeedableRng } ;
10
+ use rayon:: prelude:: { IntoParallelIterator , IntoParallelRefIterator } ;
11
+ use rayon:: iter:: ParallelIterator ;
10
12
11
13
fn size < H > ( k : u64 , nparties : usize , hash_name : & str )
12
14
where
@@ -41,14 +43,30 @@ where
41
43
42
44
let closed_reg = key_reg. close :: < H > ( ) ;
43
45
44
- let signer = ps[ 0 ] . clone ( ) . new_signer ( closed_reg) . unwrap ( ) ;
45
- let sig = signer. sign ( & msg) . unwrap ( ) ;
46
+
47
+ let ps = ps
48
+ . into_par_iter ( )
49
+ . map ( |p| p. new_signer ( closed_reg. clone ( ) ) . unwrap ( ) )
50
+ . collect :: < Vec < StmSigner < H > > > ( ) ;
51
+
52
+ let sigs = ps
53
+ . par_iter ( )
54
+ . filter_map ( |p| p. sign ( & msg) )
55
+ . collect :: < Vec < StmSig < H > > > ( ) ;
56
+
57
+ let clerk = StmClerk :: from_signer ( & ps[ 0 ] ) ;
58
+
59
+ // Aggregate with random parties
60
+ let aggr = clerk. aggregate ( & sigs, & msg) . unwrap ( ) ;
61
+
62
+ let sig = sigs[ 0 ] . clone ( ) ;
46
63
47
64
println ! (
48
- "k = {} | nr parties = {}; {} bytes" ,
65
+ "k = {} | nr parties = {}; single signature {} bytes | aggregate signature {} bytes" ,
49
66
k,
50
67
nparties,
51
68
sig. to_bytes( ) . len( ) * k as usize ,
69
+ aggr. to_bytes( ) . len( ) as usize ,
52
70
) ;
53
71
}
54
72
0 commit comments