Skip to content

Commit eeb23cf

Browse files
committed
Remove signed_message from SingleSignatures entity
As we won't be able to always set this value (ie: with the upcoming p2p registration). In order to do so an refactor have to be done in `mithril-signer` so the `RegisterSignatureMessage::signed_message` property can be set.
1 parent 4c32c7b commit eeb23cf

File tree

11 files changed

+71
-103
lines changed

11 files changed

+71
-103
lines changed

mithril-aggregator/src/database/record/buffered_single_signature_record.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl BufferedSingleSignatureRecord {
5353
// the signatures are different for party_id/discriminant pairs.
5454
// We can't just reuse fake_data::single_signatures as they are static.
5555
Self::try_from_single_signatures(
56-
&SingleSignatures::fake_with_signed_message(party_id.into(), discriminant.to_string()),
56+
&SingleSignatures::fake(party_id.into(), discriminant.to_string()),
5757
discriminant,
5858
)
5959
.unwrap()
@@ -85,7 +85,6 @@ impl TryFrom<BufferedSingleSignatureRecord> for SingleSignatures {
8585
party_id: value.party_id,
8686
won_indexes: value.lottery_indexes,
8787
signature: value.signature.try_into()?,
88-
signed_message: None,
8988
authentication_status: Default::default(),
9089
};
9190

mithril-aggregator/src/database/record/single_signature.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ impl TryFrom<SingleSignatureRecord> for SingleSignatures {
5454
party_id: value.signer_id,
5555
won_indexes: value.lottery_indexes,
5656
signature: value.signature.try_into()?,
57-
signed_message: None,
5857
authentication_status: Default::default(),
5958
};
6059

mithril-aggregator/src/message_adapters/from_register_signature.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ impl TryFromMessageAdapter<RegisterSignatureMessage, SingleSignatures>
2222
"'FromRegisterSingleSignatureAdapter' can not convert the single signature"
2323
})?,
2424
won_indexes: register_single_signature_message.won_indexes,
25-
signed_message: register_single_signature_message.signed_message,
2625
authentication_status: SingleSignatureAuthenticationStatus::Unauthenticated,
2726
};
2827

@@ -43,9 +42,5 @@ mod tests {
4342
.unwrap();
4443

4544
assert_eq!("party_id".to_string(), signatures.party_id);
46-
assert_eq!(
47-
Some("signed_message".to_string()),
48-
signatures.signed_message
49-
);
5045
}
5146
}

mithril-common/src/entities/single_signatures.rs

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,6 @@ pub struct SingleSignatures {
2121
#[serde(rename = "indexes")]
2222
pub won_indexes: Vec<LotteryIndex>,
2323

24-
/// Message that is signed by the signer
25-
///
26-
/// Used to buffer the signature for later if the aggregator has yet to create an open message
27-
/// for the signed entity type.
28-
#[serde(skip_serializing_if = "Option::is_none")]
29-
pub signed_message: Option<String>,
30-
3124
/// Status of the authentication of the signer that emitted the signature
3225
#[serde(skip)]
3326
pub authentication_status: SingleSignatureAuthenticationStatus,
@@ -54,23 +47,6 @@ impl SingleSignatures {
5447
party_id: party_id.into(),
5548
signature,
5649
won_indexes,
57-
signed_message: None,
58-
authentication_status: SingleSignatureAuthenticationStatus::Unauthenticated,
59-
}
60-
}
61-
62-
/// `SingleSignatures` factory including the signed message
63-
pub fn new_with_signed_message<T: Into<PartyId>>(
64-
party_id: T,
65-
signature: ProtocolSingleSignature,
66-
won_indexes: Vec<LotteryIndex>,
67-
signed_message: String,
68-
) -> SingleSignatures {
69-
SingleSignatures {
70-
party_id: party_id.into(),
71-
signature,
72-
won_indexes,
73-
signed_message: Some(signed_message),
7450
authentication_status: SingleSignatureAuthenticationStatus::Unauthenticated,
7551
}
7652
}
@@ -88,18 +64,10 @@ impl SingleSignatures {
8864

8965
cfg_test_tools! {
9066
impl SingleSignatures {
91-
/// Create a fake [SingleSignatures] with valid cryptographic data for testing purposes.
92-
pub fn fake<T1: Into<String>, T2: Into<String>>(party_id: T1, message: T2) -> Self {
93-
Self {
94-
signed_message: None,
95-
..Self::fake_with_signed_message(party_id, message)
96-
}
97-
}
98-
9967
/// Create a fake [SingleSignatures] with valid cryptographic data for testing purposes.
10068
// TODO: this method is slow due to the fixture creation, we should either make
10169
// the fixture faster or find a faster alternative.
102-
pub fn fake_with_signed_message<T1: Into<String>, T2: Into<String>>(party_id: T1, message: T2) -> Self {
70+
pub fn fake<T1: Into<String>, T2: Into<String>>(party_id: T1, message: T2) -> Self {
10371
use crate::entities::{ProtocolParameters};
10472
use crate::test_utils::{MithrilFixtureBuilder, StakeDistributionGenerationMethod};
10573

@@ -118,7 +86,6 @@ impl SingleSignatures {
11886
party_id,
11987
signature: signature.signature,
12088
won_indexes: vec![10, 15],
121-
signed_message: Some(message),
12289
authentication_status: SingleSignatureAuthenticationStatus::Unauthenticated,
12390
}
12491
}
@@ -131,8 +98,7 @@ impl Debug for SingleSignatures {
13198
let mut debug = f.debug_struct("SingleSignatures");
13299
debug
133100
.field("party_id", &self.party_id)
134-
.field("won_indexes", &format_args!("{:?}", self.won_indexes))
135-
.field("signed_message", &self.signed_message);
101+
.field("won_indexes", &format_args!("{:?}", self.won_indexes));
136102

137103
match is_pretty_printing {
138104
true => debug

mithril-common/src/protocol/single_signer.rs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,10 @@ impl SingleSigner {
2929
Some(signature) => {
3030
let won_indexes = signature.indexes.clone();
3131

32-
Ok(Some(SingleSignatures::new_with_signed_message(
32+
Ok(Some(SingleSignatures::new(
3333
self.party_id.to_owned(),
3434
signature.into(),
3535
won_indexes,
36-
signed_message,
3736
)))
3837
}
3938
None => Ok(None),
@@ -75,32 +74,4 @@ mod test {
7574

7675
assert!(signature.is_some());
7776
}
78-
79-
#[test]
80-
fn embed_signed_message_in_issued_signature() {
81-
let fixture = MithrilFixtureBuilder::default().with_signers(3).build();
82-
let signers = fixture.signers_fixture();
83-
let signer = signers.first().unwrap();
84-
85-
let (single_signer, _) = SignerBuilder::new(
86-
&fixture.signers_with_stake(),
87-
&fixture.protocol_parameters(),
88-
)
89-
.unwrap()
90-
.build_test_single_signer(
91-
signer.signer_with_stake.clone(),
92-
signer.kes_secret_key_path(),
93-
)
94-
.unwrap();
95-
96-
let message = ProtocolMessage::default();
97-
let signature = single_signer
98-
.sign(&message)
99-
.expect("Single signer should be able to issue single signature");
100-
101-
assert_eq!(
102-
Some(message.compute_hash()),
103-
signature.and_then(|s| s.signed_message)
104-
);
105-
}
10677
}

mithril-common/src/test_utils/mithril_fixture.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,10 @@ impl SignerFixture {
234234
.map(|signature| {
235235
let won_indexes = signature.indexes.clone();
236236

237-
SingleSignatures::new_with_signed_message(
237+
SingleSignatures::new(
238238
self.signer_with_stake.party_id.to_owned(),
239239
signature.into(),
240240
won_indexes,
241-
message,
242241
)
243242
})
244243
}
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
use anyhow::Context;
2-
use mithril_common::entities::{SignedEntityType, SingleSignatures};
2+
use mithril_common::entities::{ProtocolMessage, SignedEntityType, SingleSignatures};
33
use mithril_common::messages::{RegisterSignatureMessage, TryToMessageAdapter};
4+
use mithril_common::protocol::AsMessage;
45
use mithril_common::StdResult;
56

67
pub struct ToRegisterSignatureMessageAdapter;
78

8-
impl TryToMessageAdapter<(SignedEntityType, SingleSignatures), RegisterSignatureMessage>
9-
for ToRegisterSignatureMessageAdapter
9+
impl
10+
TryToMessageAdapter<
11+
(SignedEntityType, SingleSignatures, &ProtocolMessage),
12+
RegisterSignatureMessage,
13+
> for ToRegisterSignatureMessageAdapter
1014
{
1115
fn try_adapt(
12-
(signed_entity_type, single_signature): (SignedEntityType, SingleSignatures),
16+
(signed_entity_type, single_signature, protocol_message): (
17+
SignedEntityType,
18+
SingleSignatures,
19+
&ProtocolMessage,
20+
),
1321
) -> StdResult<RegisterSignatureMessage> {
1422
let message = RegisterSignatureMessage {
1523
signed_entity_type,
@@ -18,7 +26,7 @@ impl TryToMessageAdapter<(SignedEntityType, SingleSignatures), RegisterSignature
1826
"'ToRegisterSignatureMessageAdapter' can not convert the single signature"
1927
})?,
2028
won_indexes: single_signature.won_indexes,
21-
signed_message: single_signature.signed_message,
29+
signed_message: Some(protocol_message.message_string()),
2230
};
2331

2432
Ok(message)
@@ -35,14 +43,15 @@ mod tests {
3543
fn adapt_ok() {
3644
let message: RegisterSignatureMessage = ToRegisterSignatureMessageAdapter::try_adapt((
3745
SignedEntityType::dummy(),
38-
SingleSignatures {
39-
signed_message: Some("signed_message".to_string()),
40-
..fake_data::single_signatures([1, 3].to_vec())
41-
},
46+
fake_data::single_signatures([1, 3].to_vec()),
47+
&ProtocolMessage::default(),
4248
))
4349
.unwrap();
4450

4551
assert_eq!("party_id".to_string(), message.party_id);
46-
assert_eq!(Some("signed_message".to_string()), message.signed_message);
52+
assert_eq!(
53+
Some(ProtocolMessage::default().message_string()),
54+
message.signed_message
55+
);
4756
}
4857
}

mithril-signer/src/runtime/runner.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ pub trait Runner: Send + Sync {
6161
&self,
6262
signed_entity_type: &SignedEntityType,
6363
maybe_signature: Option<SingleSignatures>,
64+
signed_message: &ProtocolMessage,
6465
) -> StdResult<()>;
6566

6667
/// Read the current era and update the EraChecker.
@@ -390,6 +391,7 @@ impl Runner for SignerRunner {
390391
&self,
391392
signed_entity_type: &SignedEntityType,
392393
maybe_signature: Option<SingleSignatures>,
394+
protocol_message: &ProtocolMessage,
393395
) -> StdResult<()> {
394396
debug!("RUNNER: send_single_signature");
395397

@@ -398,7 +400,7 @@ impl Runner for SignerRunner {
398400

399401
self.services
400402
.certificate_handler
401-
.register_signatures(signed_entity_type, &single_signatures)
403+
.register_signatures(signed_entity_type, &single_signatures, protocol_message)
402404
.await?;
403405

404406
Ok(())
@@ -1047,14 +1049,15 @@ mod tests {
10471049
certificate_handler
10481050
.expect_register_signatures()
10491051
.once()
1050-
.returning(|_, _| Ok(()));
1052+
.returning(|_, _, _| Ok(()));
10511053
services.certificate_handler = Arc::new(certificate_handler);
10521054
let runner = init_runner(Some(services), None).await;
10531055

10541056
runner
10551057
.send_single_signature(
10561058
&SignedEntityType::dummy(),
10571059
Some(fake_data::single_signatures(vec![2, 5, 12])),
1060+
&ProtocolMessage::default(),
10581061
)
10591062
.await
10601063
.expect("send_single_signature should not fail");

mithril-signer/src/runtime/state_machine.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ impl StateMachine {
444444
message: format!("Could not compute single signature during 'ready to sign → ready to sign' phase (current epoch {current_epoch:?})"),
445445
nested_error: Some(e)
446446
})?;
447-
self.runner.send_single_signature(signed_entity_type, single_signatures).await
447+
self.runner.send_single_signature(signed_entity_type, single_signatures, &message).await
448448
.map_err(|e| RuntimeError::KeepState {
449449
message: format!("Could not send single signature during 'ready to sign → ready to sign' phase (current epoch {current_epoch:?})"),
450450
nested_error: Some(e)
@@ -952,7 +952,7 @@ mod tests {
952952
runner
953953
.expect_send_single_signature()
954954
.once()
955-
.returning(|_, _| Ok(()));
955+
.returning(|_, _, _| Ok(()));
956956
runner
957957
.expect_can_sign_signed_entity_type()
958958
.once()

0 commit comments

Comments
 (0)