Skip to content

Commit 38ba46e

Browse files
committed
Make signer send signed entity types with signatures
1 parent 254b9b1 commit 38ba46e

File tree

5 files changed

+39
-19
lines changed

5 files changed

+39
-19
lines changed

mithril-signer/src/certificate_handler.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use thiserror::Error;
66

77
use mithril_common::{
88
api_version::APIVersionProvider,
9-
entities::{CertificatePending, Epoch, EpochSettings, Signer, SingleSignatures},
9+
entities::{
10+
CertificatePending, Epoch, EpochSettings, SignedEntityType, Signer, SingleSignatures,
11+
},
1012
messages::{CertificatePendingMessage, EpochSettingsMessage},
1113
MITHRIL_API_VERSION_HEADER, MITHRIL_SIGNER_VERSION_HEADER,
1214
};
@@ -79,6 +81,7 @@ pub trait CertificateHandler: Sync + Send {
7981
/// Registers single signatures with the aggregator.
8082
async fn register_signatures(
8183
&self,
84+
signed_entity_type: &SignedEntityType,
8285
signatures: &SingleSignatures,
8386
) -> Result<(), CertificateHandlerError>;
8487
}
@@ -220,12 +223,15 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
220223

221224
async fn register_signatures(
222225
&self,
226+
signed_entity_type: &SignedEntityType,
223227
signatures: &SingleSignatures,
224228
) -> Result<(), CertificateHandlerError> {
225229
debug!("Register signatures");
226230
let url = format!("{}/register-signatures", self.aggregator_endpoint);
227-
let register_single_signature_message =
228-
ToRegisterSignatureMessageAdapter::adapt(signatures.to_owned());
231+
let register_single_signature_message = ToRegisterSignatureMessageAdapter::adapt(
232+
signed_entity_type.to_owned(),
233+
signatures.to_owned(),
234+
);
229235
let response = self
230236
.prepare_request_builder(Client::new().post(url.clone()))
231237
.json(&register_single_signature_message)
@@ -346,6 +352,7 @@ pub(crate) mod dumb {
346352
/// Registers single signatures with the aggregator
347353
async fn register_signatures(
348354
&self,
355+
_signed_entity_type: &SignedEntityType,
349356
_signatures: &SingleSignatures,
350357
) -> Result<(), CertificateHandlerError> {
351358
Ok(())
@@ -635,7 +642,7 @@ mod tests {
635642
Arc::new(api_version_provider),
636643
);
637644
let register_signatures = certificate_handler
638-
.register_signatures(&single_signatures)
645+
.register_signatures(&SignedEntityType::dummy(), &single_signatures)
639646
.await;
640647
register_signatures.expect("unexpected error");
641648
}
@@ -654,7 +661,7 @@ mod tests {
654661
Arc::new(api_version_provider),
655662
);
656663
let error = certificate_handler
657-
.register_signatures(&single_signatures)
664+
.register_signatures(&SignedEntityType::dummy(), &single_signatures)
658665
.await
659666
.unwrap_err();
660667

@@ -680,7 +687,7 @@ mod tests {
680687
Arc::new(api_version_provider),
681688
);
682689
let register_signatures = certificate_handler
683-
.register_signatures(&single_signatures)
690+
.register_signatures(&SignedEntityType::dummy(), &single_signatures)
684691
.await;
685692
assert_eq!(
686693
CertificateHandlerError::RemoteServerLogical(
@@ -704,7 +711,7 @@ mod tests {
704711
Arc::new(api_version_provider),
705712
);
706713
let register_signatures = certificate_handler
707-
.register_signatures(&single_signatures)
714+
.register_signatures(&SignedEntityType::dummy(), &single_signatures)
708715
.await;
709716
assert_eq!(
710717
CertificateHandlerError::RemoteServerLogical(
@@ -728,7 +735,7 @@ mod tests {
728735
Arc::new(api_version_provider),
729736
);
730737
let register_signatures = certificate_handler
731-
.register_signatures(&single_signatures)
738+
.register_signatures(&SignedEntityType::dummy(), &single_signatures)
732739
.await;
733740
assert_eq!(
734741
CertificateHandlerError::RemoteServerTechnical("an error occurred".to_string())

mithril-signer/src/message_adapters/to_register_signature_message.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
use mithril_common::entities::SingleSignatures;
1+
use mithril_common::entities::{SignedEntityType, SingleSignatures};
22
use mithril_common::messages::RegisterSignatureMessage;
33

44
pub struct ToRegisterSignatureMessageAdapter;
55

66
impl ToRegisterSignatureMessageAdapter {
7-
pub fn adapt(single_signature: SingleSignatures) -> RegisterSignatureMessage {
7+
pub fn adapt(
8+
signed_entity_type: SignedEntityType,
9+
single_signature: SingleSignatures,
10+
) -> RegisterSignatureMessage {
811
RegisterSignatureMessage {
9-
signed_entity_type: None,
12+
signed_entity_type: Some(signed_entity_type),
1013
party_id: single_signature.party_id,
1114
signature: single_signature.signature,
1215
won_indexes: single_signature.won_indexes,
@@ -23,7 +26,8 @@ mod tests {
2326
#[test]
2427
fn adapt_ok() {
2528
let single_signature = fake_data::single_signatures([1, 3].to_vec());
26-
let message = ToRegisterSignatureMessageAdapter::adapt(single_signature);
29+
let message =
30+
ToRegisterSignatureMessageAdapter::adapt(SignedEntityType::dummy(), single_signature);
2731

2832
assert_eq!("party_id".to_string(), message.party_id);
2933
}

mithril-signer/src/runtime/runner.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ pub trait Runner {
8484
/// Send the single signature to the aggregator in order to be aggregated.
8585
async fn send_single_signature(
8686
&self,
87+
signed_entity_type: &SignedEntityType,
8788
maybe_signature: Option<SingleSignatures>,
8889
) -> Result<(), Box<dyn StdError + Sync + Send>>;
8990

@@ -430,6 +431,7 @@ impl Runner for SignerRunner {
430431

431432
async fn send_single_signature(
432433
&self,
434+
signed_entity_type: &SignedEntityType,
433435
maybe_signature: Option<SingleSignatures>,
434436
) -> Result<(), Box<dyn StdError + Sync + Send>> {
435437
debug!("RUNNER: send_single_signature");
@@ -438,7 +440,7 @@ impl Runner for SignerRunner {
438440
debug!(" > there is a single signature to send");
439441
self.services
440442
.certificate_handler
441-
.register_signatures(&single_signatures)
443+
.register_signatures(signed_entity_type, &single_signatures)
442444
.await
443445
.map_err(|e| e.into())
444446
} else {
@@ -873,12 +875,15 @@ mod tests {
873875
certificate_handler
874876
.expect_register_signatures()
875877
.once()
876-
.returning(|_| Ok(()));
878+
.returning(|_, _| Ok(()));
877879
services.certificate_handler = Arc::new(certificate_handler);
878880
let runner = init_runner(Some(services), None).await;
879881

880882
runner
881-
.send_single_signature(Some(fake_data::single_signatures(vec![2, 5, 12])))
883+
.send_single_signature(
884+
&SignedEntityType::dummy(),
885+
Some(fake_data::single_signatures(vec![2, 5, 12])),
886+
)
882887
.await
883888
.expect("send_single_signature should not fail");
884889
}

mithril-signer/src/runtime/state_machine.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,13 @@ impl StateMachine {
368368
})?;
369369
let single_signatures = self
370370
.runner
371-
.compute_single_signature(current_beacon.epoch, &message, &signers)
371+
.compute_single_signature( current_beacon.epoch, &message, &signers)
372372
.await
373373
.map_err(|e| RuntimeError::KeepState {
374374
message: format!("Could not compute single signature during 'registered → signed' phase (current beacon {current_beacon:?})"),
375375
nested_error: Some(e)
376376
})?;
377-
self.runner.send_single_signature(single_signatures).await
377+
self.runner.send_single_signature(&pending_certificate.signed_entity_type, single_signatures).await
378378
.map_err(|e| RuntimeError::KeepState {
379379
message: format!("Could not send single signature during 'registered → signed' phase (current beacon {current_beacon:?})"),
380380
nested_error: Some(e)
@@ -646,7 +646,7 @@ mod tests {
646646
runner
647647
.expect_send_single_signature()
648648
.once()
649-
.returning(|_| Ok(()));
649+
.returning(|_, _| Ok(()));
650650

651651
let mut state_machine = init_state_machine(state, runner);
652652
state_machine

mithril-signer/tests/test_extensions/certificate_handler.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ use std::{collections::HashMap, sync::Arc};
22

33
use async_trait::async_trait;
44
use mithril_common::{
5-
entities::{Beacon, CertificatePending, Epoch, EpochSettings, Signer, SingleSignatures},
5+
entities::{
6+
Beacon, CertificatePending, Epoch, EpochSettings, SignedEntityType, Signer,
7+
SingleSignatures,
8+
},
69
test_utils::fake_data,
710
BeaconProvider, BeaconProviderImpl,
811
};
@@ -106,6 +109,7 @@ impl CertificateHandler for FakeAggregator {
106109
/// Registers single signatures with the aggregator
107110
async fn register_signatures(
108111
&self,
112+
_signed_entity_type: &SignedEntityType,
109113
_signatures: &SingleSignatures,
110114
) -> Result<(), CertificateHandlerError> {
111115
Ok(())

0 commit comments

Comments
 (0)