Skip to content

Commit 619e839

Browse files
committed
Include initializer in Party structure for the demo
1 parent 4a6995a commit 619e839

File tree

3 files changed

+56
-42
lines changed

3 files changed

+56
-42
lines changed

demo/protocol-demo/src/demonstrator.rs

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use hex::ToHex;
22
use rand_chacha::ChaCha20Rng;
3-
use rand_core::{RngCore, SeedableRng};
3+
use rand_core::{CryptoRng, RngCore, SeedableRng};
44
use serde::{Deserialize, Serialize};
55
use std::collections::HashMap;
66
use std::env;
@@ -42,14 +42,16 @@ struct MultiSignatureArtifact {
4242
}
4343

4444
/// Party represents a signing protocol participant
45-
#[derive(Debug)]
45+
#[derive(Debug, Clone)]
4646
pub struct Party {
4747
/// Party's identifier
4848
party_id: ProtocolPartyId,
4949
/// Party's stake
5050
stake: ProtocolStake,
5151
/// Protocol parameters
5252
params: Option<ProtocolParameters>,
53+
/// Protocol initializer
54+
initializer: Option<ProtocolInitializerNotCertified>,
5355
/// Protocol signer
5456
signer: Option<ProtocolSigner>,
5557
/// Protocol clerk
@@ -66,6 +68,7 @@ impl Party {
6668
party_id: format!("{}", party_id) as ProtocolPartyId,
6769
stake: stake as ProtocolStake,
6870
params: None,
71+
initializer: None,
6972
signer: None,
7073
clerk: None,
7174
msigs: HashMap::new(),
@@ -105,10 +108,13 @@ impl Party {
105108
}
106109
let closed_reg = key_reg.close();
107110

108-
let seed = [0u8; 32];
109-
let mut rng = ChaCha20Rng::from_seed(seed);
110-
let p = ProtocolInitializerNotCertified::setup(self.params.unwrap(), self.stake, &mut rng);
111-
self.signer = Some(p.new_signer(closed_reg).unwrap());
111+
let signer = self
112+
.initializer
113+
.clone()
114+
.unwrap()
115+
.new_signer(closed_reg)
116+
.unwrap();
117+
self.signer = Some(signer);
112118
self.clerk = Some(ProtocolClerk::from_signer(self.signer.as_ref().unwrap()));
113119
}
114120

@@ -296,10 +302,8 @@ pub struct Demonstrator {
296302

297303
impl Demonstrator {
298304
/// Demonstrator factory
299-
pub fn new(config: &crate::Config) -> Self {
305+
pub fn new<R: RngCore + CryptoRng>(config: &crate::Config, rng: &mut R) -> Self {
300306
// Generate parties
301-
let seed = [0u8; 32];
302-
let mut rng = ChaCha20Rng::from_seed(seed);
303307
let parties = (0..config.nparties)
304308
.into_iter()
305309
.map(|party_id| Party::new(party_id, 1 + rng.next_u64() % 999))
@@ -328,7 +332,7 @@ pub trait ProtocolDemonstrator {
328332
fn establish(&mut self);
329333

330334
/// Initialization phase of the protocol
331-
fn initialize(&mut self);
335+
fn initialize<R: RngCore + CryptoRng>(&mut self, rng: &mut R);
332336

333337
/// Issue certificates
334338
fn issue_certificates(&mut self);
@@ -349,7 +353,7 @@ impl ProtocolDemonstrator for Demonstrator {
349353
}
350354

351355
/// Initialization phase of the protocol
352-
fn initialize(&mut self) {
356+
fn initialize<R: RngCore + CryptoRng>(&mut self, rng: &mut R) {
353357
// Retrieve protocol parameters
354358
let mut verifier = Verifier::new();
355359
verifier.update_params(&self.params.unwrap());
@@ -358,25 +362,17 @@ impl ProtocolDemonstrator for Demonstrator {
358362
}
359363

360364
// Register keys
361-
let seed = [0u8; 32];
362-
let mut rng = ChaCha20Rng::from_seed(seed);
363-
let players = self
364-
.parties
365-
.iter()
366-
.map(|party| (party.party_id.to_owned(), party.stake))
367-
.collect::<Vec<_>>();
368365
let mut players_artifacts = Vec::new();
369-
for (party_id, stake) in players {
366+
for party in self.parties.iter_mut() {
370367
let protocol_initializer =
371-
ProtocolInitializerNotCertified::setup(self.params.unwrap(), stake, &mut rng);
372-
let verification_key: ProtocolSignerVerificationKey =
373-
protocol_initializer.verification_key();
368+
ProtocolInitializerNotCertified::setup(self.params.unwrap(), party.stake, rng);
374369
players_artifacts.push(PlayerArtifact {
375-
party_id,
376-
stake,
377-
verification_key: key_encode_hex(verification_key).unwrap(),
378-
initializer: key_encode_hex(protocol_initializer).unwrap(),
379-
})
370+
party_id: party.clone().party_id,
371+
stake: party.stake,
372+
verification_key: key_encode_hex(protocol_initializer.verification_key()).unwrap(),
373+
initializer: key_encode_hex(protocol_initializer.clone()).unwrap(),
374+
});
375+
party.initializer = Some(protocol_initializer);
380376
}
381377
let players_with_keys = players_artifacts
382378
.iter()
@@ -510,14 +506,18 @@ mod tests {
510506
#[test]
511507
fn test_demonstrator_new() {
512508
let config = default_config();
513-
let demo = Demonstrator::new(&config);
509+
let seed = [0u8; 32];
510+
let mut rng = ChaCha20Rng::from_seed(seed);
511+
let demo = Demonstrator::new(&config, &mut rng);
514512
assert_eq!(demo.config, config);
515513
}
516514

517515
#[test]
518516
fn test_demonstrator_establish() {
519517
let config = default_config();
520-
let mut demo = Demonstrator::new(&config);
518+
let seed = [0u8; 32];
519+
let mut rng = ChaCha20Rng::from_seed(seed);
520+
let mut demo = Demonstrator::new(&config, &mut rng);
521521
demo.establish();
522522
assert_eq!(demo.params.unwrap().m, config.m);
523523
assert_eq!(demo.params.unwrap().k, config.k);
@@ -527,9 +527,11 @@ mod tests {
527527
#[test]
528528
fn test_demonstrator_initialize() {
529529
let config = default_config();
530-
let mut demo = Demonstrator::new(&config);
530+
let seed = [0u8; 32];
531+
let mut rng = ChaCha20Rng::from_seed(seed);
532+
let mut demo = Demonstrator::new(&config, &mut rng);
531533
demo.establish();
532-
demo.initialize();
534+
demo.initialize(&mut rng);
533535
assert_eq!(demo.parties.len(), config.nparties);
534536
assert_eq!(demo.messages.len(), config.nmessages);
535537
for party in demo.parties {
@@ -543,9 +545,11 @@ mod tests {
543545
#[test]
544546
fn test_demonstrator_issue_certificates_ok() {
545547
let config = default_config();
546-
let mut demo = Demonstrator::new(&config);
548+
let seed = [0u8; 32];
549+
let mut rng = ChaCha20Rng::from_seed(seed);
550+
let mut demo = Demonstrator::new(&config, &mut rng);
547551
demo.establish();
548-
demo.initialize();
552+
demo.initialize(&mut rng);
549553
demo.issue_certificates();
550554
assert_eq!(demo.parties.len(), config.nparties);
551555
assert_eq!(demo.messages.len(), config.nmessages);
@@ -559,9 +563,11 @@ mod tests {
559563
let mut config = default_config();
560564
config.k = 10000;
561565
config.m = 10;
562-
let mut demo = Demonstrator::new(&config);
566+
let seed = [0u8; 32];
567+
let mut rng = ChaCha20Rng::from_seed(seed);
568+
let mut demo = Demonstrator::new(&config, &mut rng);
563569
demo.establish();
564-
demo.initialize();
570+
demo.initialize(&mut rng);
565571
demo.issue_certificates();
566572
assert_eq!(demo.parties.len(), config.nparties);
567573
assert_eq!(demo.messages.len(), config.nmessages);
@@ -573,9 +579,11 @@ mod tests {
573579
#[test]
574580
fn test_demonstrator_verify_certificates_ok() {
575581
let config = default_config();
576-
let mut demo = Demonstrator::new(&config);
582+
let seed = [0u8; 32];
583+
let mut rng = ChaCha20Rng::from_seed(seed);
584+
let mut demo = Demonstrator::new(&config, &mut rng);
577585
demo.establish();
578-
demo.initialize();
586+
demo.initialize(&mut rng);
579587
demo.issue_certificates();
580588
assert_eq!(demo.parties.len(), config.nparties);
581589
assert_eq!(demo.messages.len(), config.nmessages);
@@ -587,9 +595,11 @@ mod tests {
587595
let mut config = default_config();
588596
config.k = 10000;
589597
config.m = 10;
590-
let mut demo = Demonstrator::new(&config);
598+
let seed = [0u8; 32];
599+
let mut rng = ChaCha20Rng::from_seed(seed);
600+
let mut demo = Demonstrator::new(&config, &mut rng);
591601
demo.establish();
592-
demo.initialize();
602+
demo.initialize(&mut rng);
593603
demo.issue_certificates();
594604
assert_eq!(demo.parties.len(), config.nparties);
595605
assert_eq!(demo.messages.len(), config.nmessages);

demo/protocol-demo/src/main.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ mod demonstrator;
22

33
use crate::demonstrator::{Demonstrator, ProtocolDemonstrator};
44
use clap::Parser;
5+
use rand_chacha::ChaCha20Rng;
6+
use rand_core::SeedableRng;
57

68
/// Simple demonstration of the Mithril protocol
79
#[derive(Parser, Debug, PartialEq, Clone, Copy)]
@@ -40,15 +42,17 @@ fn main() {
4042
/////////////////////
4143

4244
println!("\n>> Protocol establish phase");
43-
let mut mithril_protocol = Demonstrator::new(&config);
45+
let seed = [0u8; 32];
46+
let mut rng = ChaCha20Rng::from_seed(seed);
47+
let mut mithril_protocol = Demonstrator::new(&config, &mut rng);
4448
mithril_protocol.establish();
4549

4650
//////////////////////////
4751
// initialization phase //
4852
/////////////////////////
4953

5054
println!("\n>> Protocol initialize phase:");
51-
mithril_protocol.initialize();
55+
mithril_protocol.initialize(&mut rng);
5256

5357
//////////////////////
5458
// operations phase //

mithril-core/src/key_reg.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ impl KeyReg {
7474
MTLeaf(vk, stake)
7575
})
7676
.collect::<Vec<RegParty>>();
77-
reg_parties.sort_unstable();
77+
reg_parties.sort();
7878

7979
ClosedKeyReg {
8080
merkle_tree: Arc::new(MerkleTree::create(&reg_parties)),

0 commit comments

Comments
 (0)