Skip to content

Commit b9a23c0

Browse files
committed
Implement fake digest #146
1 parent 6ba78de commit b9a23c0

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

mithril-network/mithril-aggregator/src/fake_data.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ pub fn beacon() -> entities::Beacon {
1717
entities::Beacon::new(network, epoch, block)
1818
}
1919

20+
/// Fake Digest
21+
pub fn digest() -> Vec<u8> {
22+
let beacon = beacon();
23+
format!(
24+
"digest-{}-{}-{}",
25+
beacon.network, beacon.epoch, beacon.block
26+
)
27+
.as_bytes()
28+
.to_vec()
29+
}
30+
2031
/// Fake ProtocolParameters
2132
pub fn protocol_parameters() -> entities::ProtocolParameters {
2233
let k = 5;

mithril-network/mithril-aggregator/src/http_server.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,8 @@ mod handlers {
282282
debug!("register_signatures/{:?}", signatures);
283283

284284
let mut multi_signer = multi_signer.write().await;
285+
let message = fake_data::digest();
286+
multi_signer.update_current_message(message).unwrap();
285287
for signature in &signatures {
286288
match &multi_signer::key_decode_hex(signature.signature.clone()) {
287289
Ok(single_signature) => {
@@ -617,6 +619,10 @@ mod tests {
617619
#[tokio::test]
618620
async fn test_register_signatures_post_ok() {
619621
let mut mock_multi_signer = MockMultiSigner::new();
622+
mock_multi_signer
623+
.expect_update_current_message()
624+
.return_const(Ok(()))
625+
.once();
620626
mock_multi_signer
621627
.expect_register_single_signature()
622628
.return_const(Ok(()))
@@ -648,6 +654,10 @@ mod tests {
648654
#[tokio::test]
649655
async fn test_register_signatures_post_ko() {
650656
let mut mock_multi_signer = MockMultiSigner::new();
657+
mock_multi_signer
658+
.expect_update_current_message()
659+
.return_const(Ok(()))
660+
.once();
651661
mock_multi_signer
652662
.expect_register_single_signature()
653663
.return_const(Err("an error occurred".to_string()))

mithril-network/mithril-aggregator/src/multi_signer.rs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ use mockall::automock;
4141
/// MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures
4242
#[cfg_attr(test, automock)]
4343
pub trait MultiSigner: Sync + Send {
44+
/// Get current message
45+
fn get_current_message(&self) -> Option<Bytes>;
46+
47+
/// Update current message
48+
fn update_current_message(&mut self, message: Bytes) -> Result<(), String>;
49+
4450
/// Get protocol parameters
4551
fn get_protocol_parameters(&self) -> Option<ProtocolParameters>;
4652

@@ -89,6 +95,7 @@ pub trait MultiSigner: Sync + Send {
8995

9096
/// MultiSignerImpl is an implementation of the MultiSigner
9197
pub struct MultiSignerImpl {
98+
current_message: Option<Bytes>,
9299
protocol_parameters: Option<ProtocolParameters>,
93100
stakes: Vec<(ProtocolPartyId, ProtocolStake)>,
94101
signers: HashMap<ProtocolPartyId, ProtocolSignerVerificationKey>,
@@ -108,6 +115,7 @@ impl MultiSignerImpl {
108115
pub fn new() -> Self {
109116
debug!("New MultiSignerImpl created");
110117
Self {
118+
current_message: None,
111119
protocol_parameters: None,
112120
stakes: Vec::new(),
113121
signers: HashMap::new(),
@@ -145,6 +153,17 @@ impl MultiSignerImpl {
145153
}
146154

147155
impl MultiSigner for MultiSignerImpl {
156+
/// Get current message
157+
fn get_current_message(&self) -> Option<Bytes> {
158+
self.current_message.clone()
159+
}
160+
161+
/// Update current message
162+
fn update_current_message(&mut self, message: Bytes) -> Result<(), String> {
163+
self.current_message = Some(message);
164+
Ok(())
165+
}
166+
148167
/// Get protocol parameters
149168
fn get_protocol_parameters(&self) -> Option<ProtocolParameters> {
150169
self.protocol_parameters
@@ -204,7 +223,7 @@ impl MultiSigner for MultiSignerImpl {
204223
party_id, index
205224
);
206225

207-
let message = &self.message();
226+
let message = &self.get_current_message().unwrap();
208227
let clerk = self.clerk();
209228
match clerk.verify_sig(signature, index, message) {
210229
Ok(_) => {
@@ -270,7 +289,7 @@ impl MultiSigner for MultiSignerImpl {
270289
fn create_multi_signature(&mut self) -> Result<Option<ProtocolMultiSignature>, String> {
271290
debug!("Create multi signature");
272291

273-
let message = &self.message();
292+
let message = &self.get_current_message().unwrap();
274293
let signatures: (Vec<ProtocolSingleSignature>, Vec<ProtocolLotteryIndex>) = self
275294
.single_signatures
276295
.iter()
@@ -328,6 +347,10 @@ mod tests {
328347
use rand_chacha::ChaCha20Rng;
329348
use rand_core::{RngCore, SeedableRng};
330349

350+
fn message() -> Bytes {
351+
Vec::from_hex("7724e03fb8d84a376a43b8f41518a11c").unwrap()
352+
}
353+
331354
fn setup_protocol_parameters() -> ProtocolParameters {
332355
ProtocolParameters {
333356
m: 10,
@@ -415,6 +438,21 @@ mod tests {
415438
assert_eq!(secret_key, secret_key_restored);
416439
}
417440

441+
#[test]
442+
fn test_multi_signer_current_message_ok() {
443+
let mut multi_signer = MultiSignerImpl::new();
444+
445+
let current_message_expected = Vec::from_hex("7724e03fb8d84a376a43b8f41518a11c").unwrap();
446+
multi_signer
447+
.update_current_message(current_message_expected.clone())
448+
.expect("update current message failed");
449+
450+
let current_message = multi_signer
451+
.get_current_message()
452+
.expect("current message should have been retrieved");
453+
assert_eq!(current_message_expected, current_message)
454+
}
455+
418456
#[test]
419457
fn test_multi_signer_protocol_parameters_ok() {
420458
let mut multi_signer = MultiSignerImpl::new();
@@ -471,7 +509,11 @@ mod tests {
471509
#[test]
472510
fn test_multi_signer_multi_signature_ok() {
473511
let mut multi_signer = MultiSignerImpl::new();
474-
let message = multi_signer.message();
512+
513+
let message = message();
514+
multi_signer
515+
.update_current_message(message.clone())
516+
.expect("update current message failed");
475517

476518
let protocol_parameters = setup_protocol_parameters();
477519
multi_signer

0 commit comments

Comments
 (0)