Skip to content

Commit

Permalink
Merge pull request #1075 from input-output-hk/ensemble/668/refacto_cr…
Browse files Browse the repository at this point in the history
…ypto_entities

Refactor Signer verification key into a dedicated type.
  • Loading branch information
ghubertpalo authored Jul 24, 2023
2 parents 9fe2a48 + b125a2b commit c2e8686
Show file tree
Hide file tree
Showing 46 changed files with 702 additions and 589 deletions.
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion mithril-aggregator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-aggregator"
version = "0.3.53"
version = "0.3.54"
description = "A Mithril Aggregator server"
authors = { workspace = true }
edition = { workspace = true }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ impl SignerRegistrationRecord {
SignerRegistrationRecord {
signer_id: other.party_id,
epoch_setting_id: epoch,
verification_key: other.verification_key,
verification_key: other.verification_key.to_json_hex().unwrap(),
verification_key_signature: other.verification_key_signature,
operational_certificate: other.operational_certificate,
kes_period: other.kes_period,
Expand All @@ -67,7 +67,7 @@ impl From<SignerRegistrationRecord> for Signer {
fn from(other: SignerRegistrationRecord) -> Self {
Self {
party_id: other.signer_id,
verification_key: other.verification_key,
verification_key: other.verification_key.try_into().unwrap(),
verification_key_signature: other.verification_key_signature,
operational_certificate: other.operational_certificate,
kes_period: other.kes_period,
Expand All @@ -79,7 +79,7 @@ impl From<SignerRegistrationRecord> for SignerWithStake {
fn from(other: SignerRegistrationRecord) -> Self {
Self {
party_id: other.signer_id,
verification_key: other.verification_key,
verification_key: other.verification_key.try_into().unwrap(),
verification_key_signature: other.verification_key_signature,
operational_certificate: other.operational_certificate,
kes_period: other.kes_period,
Expand Down
20 changes: 17 additions & 3 deletions mithril-aggregator/src/http_server/routes/signer_routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ mod handlers {
use crate::event_store::{EventMessage, TransmitterService};
use crate::FromRegisterSignerAdapter;
use crate::{http_server::routes::reply, SignerRegisterer, SignerRegistrationError};
use mithril_common::messages::{FromMessageAdapter, RegisterSignerMessage};
use mithril_common::messages::{RegisterSignerMessage, TryFromMessageAdapter};
use mithril_common::BeaconProvider;
use slog_scope::{debug, warn};
use std::convert::Infallible;
Expand Down Expand Up @@ -67,7 +67,17 @@ mod handlers {
},
};

let signer = FromRegisterSignerAdapter::adapt(register_signer_message);
let signer = match FromRegisterSignerAdapter::try_adapt(register_signer_message) {
Ok(signer) => signer,
Err(err) => {
warn!("register_signer::payload decoding error"; "error" => ?err);
return Ok(reply::bad_request(
"Could not decode signer payload".to_string(),
err.to_string(),
));
}
};

let mut headers: Vec<(&str, &str)> = match signer_node_version.as_ref() {
Some(version) => vec![("signer-node-version", version)],
None => Vec::new(),
Expand Down Expand Up @@ -199,7 +209,11 @@ mod tests {
let mut mock_signer_registerer = MockSignerRegisterer::new();
mock_signer_registerer
.expect_register_signer()
.return_once(|_, _| Err(SignerRegistrationError::ExistingSigner(signer_with_stake)));
.return_once(|_, _| {
Err(SignerRegistrationError::ExistingSigner(Box::new(
signer_with_stake,
)))
});
mock_signer_registerer
.expect_get_current_round()
.return_once(|| None);
Expand Down
18 changes: 10 additions & 8 deletions mithril-aggregator/src/message_adapters/from_register_signer.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
use mithril_common::{
entities::Signer,
messages::{FromMessageAdapter, RegisterSignerMessage},
messages::{RegisterSignerMessage, TryFromMessageAdapter},
StdResult,
};

/// Adapter to convert [RegisterSignerMessage] to [Signer] instances.
pub struct FromRegisterSignerAdapter;

impl FromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter {
impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter {
/// Method to trigger the conversion.
fn adapt(register_signer_message: RegisterSignerMessage) -> Signer {
Signer {
fn try_adapt(register_signer_message: RegisterSignerMessage) -> StdResult<Signer> {
Ok(Signer {
party_id: register_signer_message.party_id,
verification_key: register_signer_message.verification_key,
verification_key: register_signer_message.verification_key.try_into()?,
verification_key_signature: register_signer_message.verification_key_signature,
operational_certificate: register_signer_message.operational_certificate,
kes_period: register_signer_message.kes_period,
}
})
}
}

Expand All @@ -27,10 +28,11 @@ mod tests {
fn test_simple_message() {
let register_signer_message = RegisterSignerMessage {
party_id: "one".to_string(),
..Default::default()
..RegisterSignerMessage::dummy()
};

let signer = FromRegisterSignerAdapter::adapt(register_signer_message);
let signer = FromRegisterSignerAdapter::try_adapt(register_signer_message)
.expect("Converting message to signer should not fail");

assert_eq!("one".to_string(), signer.party_id);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use mithril_common::entities::Certificate;
use mithril_common::messages::{CertificateMessage, CertificateMetadataMessage, ToMessageAdapter};
use mithril_common::messages::{
CertificateMessage, CertificateMetadataMessage, SignerWithStakeMessagePart, ToMessageAdapter,
};

/// Adapter to convert [Certificate] to [CertificateMessage] instances
pub struct ToCertificateMessageAdapter;
Expand All @@ -12,7 +14,7 @@ impl ToMessageAdapter<Certificate, CertificateMessage> for ToCertificateMessageA
protocol_parameters: certificate.metadata.protocol_parameters,
initiated_at: certificate.metadata.initiated_at,
sealed_at: certificate.metadata.sealed_at,
signers: certificate.metadata.signers,
signers: SignerWithStakeMessagePart::from_signers(certificate.metadata.signers),
};

CertificateMessage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl ToCertificatePendingMessageAdapter {
.into_iter()
.map(|signer| SignerMessage {
party_id: signer.party_id,
verification_key: signer.verification_key,
verification_key: signer.verification_key.try_into().unwrap(),
verification_key_signature: signer.verification_key_signature,
kes_period: signer.kes_period,
operational_certificate: signer.operational_certificate,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use mithril_common::entities::{MithrilStakeDistribution, SignedEntity};
use mithril_common::messages::{MithrilStakeDistributionMessage, ToMessageAdapter};
use mithril_common::messages::{
MithrilStakeDistributionMessage, SignerWithStakeMessagePart, ToMessageAdapter,
};

/// Adapter to convert [MithrilStakeDistribution] to [MithrilStakeDistributionMessage] instances
pub struct ToMithrilStakeDistributionMessageAdapter;
Expand All @@ -11,7 +13,9 @@ impl ToMessageAdapter<SignedEntity<MithrilStakeDistribution>, MithrilStakeDistri
fn adapt(from: SignedEntity<MithrilStakeDistribution>) -> MithrilStakeDistributionMessage {
MithrilStakeDistributionMessage {
epoch: from.artifact.epoch,
signers_with_stake: from.artifact.signers_with_stake,
signers_with_stake: SignerWithStakeMessagePart::from_signers(
from.artifact.signers_with_stake,
),
hash: from.artifact.hash,
certificate_hash: from.certificate_id,
created_at: from.created_at,
Expand Down Expand Up @@ -47,7 +51,9 @@ mod tests {
};
let mithril_stake_distribution_message_expected = MithrilStakeDistributionMessage {
epoch: Epoch(1),
signers_with_stake: fake_data::signers_with_stakes(2),
signers_with_stake: SignerWithStakeMessagePart::from_signers(
fake_data::signers_with_stakes(2),
),
hash: "hash-123".to_string(),
certificate_hash: "cert-hash-123".to_string(),
created_at: DateTime::<Utc>::default(),
Expand Down
10 changes: 5 additions & 5 deletions mithril-aggregator/src/signer_registerer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ pub enum SignerRegistrationError {

/// Signer is already registered.
#[error("signer already registered")]
ExistingSigner(SignerWithStake),
ExistingSigner(Box<SignerWithStake>),

/// Store error.
#[error("store error: {0}")]
Expand Down Expand Up @@ -224,8 +224,6 @@ impl SignerRegisterer for MithrilSignerRegisterer {
"" => None,
party_id => Some(party_id.to_string()),
};
let verification_key =
key_decode_hex(&signer.verification_key).map_err(SignerRegistrationError::Codec)?;
let verification_key_signature = match &signer.verification_key_signature {
Some(verification_key_signature) => Some(
key_decode_hex(verification_key_signature)
Expand Down Expand Up @@ -255,7 +253,7 @@ impl SignerRegisterer for MithrilSignerRegisterer {
operational_certificate,
verification_key_signature,
kes_period,
verification_key,
signer.verification_key.clone(),
)?;
let mut signer_save = SignerWithStake::from_signer(
signer.to_owned(),
Expand All @@ -276,7 +274,9 @@ impl SignerRegisterer for MithrilSignerRegisterer {
.save_verification_key(registration_round.epoch, signer_save.clone())
.await?
{
Some(_) => Err(SignerRegistrationError::ExistingSigner(signer_save)),
Some(_) => Err(SignerRegistrationError::ExistingSigner(Box::new(
signer_save,
))),
None => Ok(signer_save),
}
}
Expand Down
8 changes: 4 additions & 4 deletions mithril-aggregator/src/store/verification_key_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ pub mod test_suite {
party_id.clone(),
SignerWithStake {
party_id: party_id.clone(),
verification_key: format!("vkey {party_id}"),
verification_key: "7b22766b223a5b3134352c32332c3135382c31322c3138332c3230392c33322c3134302c33372c3132342c3136362c3231352c3136302c3231352c3235302c3133342c3135342c3235302c3234312c3230362c3139342c3232322c382c35392c33332c392c35382c322c3235312c31302c33322c3135352c3232372c3134332c3232362c35372c3135312c37342c3139392c3131372c37352c3136382c3134302c34362c3233392c3134352c37322c31362c32312c3138312c3139332c3134362c38362c3231332c3230342c3139332c3232332c32352c3135372c33342c33332c3232372c35312c3132362c3132362c3135362c36342c3232302c3139392c3231332c31362c34352c3131302c3234332c33352c3134382c37312c3231382c3132342c3132332c31362c3132312c3135322c31382c32362c3231322c3231342c3230312c3139302c3137342c3131352c39372c3234392c3235342c3131362c3234335d2c22706f70223a5b3138332c3134352c3133392c3234322c3132302c3136302c35362c3131382c3234322c3230342c39312c38392c32312c3138342c382c34372c3231332c3130352c36332c3135302c32312c3231372c352c382c3231392c3138382c3131342c3230352c3136362c31362c3234302c3234302c3231342c31362c3230342c3231382c3139332c3138312c32342c35362c34352c39392c3234342c38312c32352c35322c3232342c36372c3136382c3136392c3130392c3132322c38372c34392c3137302c3138312c3135312c31352c3235322c3139352c3231312c3233342c3139352c34392c39312c31392c35312c3234312c33332c35382c3134302c3235322c3234322c362c342c34302c32312c3136372c3234392c3235312c33362c38372c36302c39362c36392c3135322c3231302c39382c3136352c352c362c34312c39362c3233352c37352c3138335d7d".try_into().unwrap(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None,
Expand All @@ -178,7 +178,7 @@ pub mod test_suite {
Epoch(0),
SignerWithStake {
party_id: "0".to_string(),
verification_key: "OK".to_string(),
verification_key: "7b22766b223a5b3134352c32332c3135382c31322c3138332c3230392c33322c3134302c33372c3132342c3136362c3231352c3136302c3231352c3235302c3133342c3135342c3235302c3234312c3230362c3139342c3232322c382c35392c33332c392c35382c322c3235312c31302c33322c3135352c3232372c3134332c3232362c35372c3135312c37342c3139392c3131372c37352c3136382c3134302c34362c3233392c3134352c37322c31362c32312c3138312c3139332c3134362c38362c3231332c3230342c3139332c3232332c32352c3135372c33342c33332c3232372c35312c3132362c3132362c3135362c36342c3232302c3139392c3231332c31362c34352c3131302c3234332c33352c3134382c37312c3231382c3132342c3132332c31362c3132312c3135322c31382c32362c3231322c3231342c3230312c3139302c3137342c3131352c39372c3234392c3235342c3131362c3234335d2c22706f70223a5b3138332c3134352c3133392c3234322c3132302c3136302c35362c3131382c3234322c3230342c39312c38392c32312c3138342c382c34372c3231332c3130352c36332c3135302c32312c3231372c352c382c3231392c3138382c3131342c3230352c3136362c31362c3234302c3234302c3231342c31362c3230342c3231382c3139332c3138312c32342c35362c34352c39392c3234342c38312c32352c35322c3232342c36372c3136382c3136392c3130392c3132322c38372c34392c3137302c3138312c3135312c31352c3235322c3139352c3231312c3233342c3139352c34392c39312c31392c35312c3234312c33332c35382c3134302c3235322c3234322c362c342c34302c32312c3136372c3234392c3235312c33362c38372c36302c39362c36392c3135322c3231302c39382c3136352c352c362c34312c39362c3233352c37352c3138335d7d".try_into().unwrap(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None,
Expand All @@ -199,7 +199,7 @@ pub mod test_suite {
Epoch(1),
SignerWithStake {
party_id: "party_id:e1:1".to_string(),
verification_key: "new_vkey".to_string(),
verification_key: "7b22766b223a5b3134352c35362c3137352c33322c3132322c3138372c3231342c3232362c3235312c3134382c38382c392c312c3130332c3135392c3134362c38302c3136362c3130372c3234332c3235312c3233362c34312c32382c3131312c3132382c3230372c3136342c3133322c3134372c3232382c38332c3234362c3232382c3137302c36382c38392c37382c36302c32382c3132332c3133302c38382c3233342c33382c39372c34322c36352c312c3130302c35332c31382c37382c3133312c382c36312c3132322c3133312c3233382c38342c3233332c3232332c3135342c3131382c3131382c37332c32382c32372c3130312c37382c38302c3233332c3132332c3230362c3232302c3137342c3133342c3230352c37312c3131302c3131322c3138302c39372c39382c302c3131332c36392c3134352c3233312c3136382c34332c3137332c3137322c35362c3130342c3230385d2c22706f70223a5b3133372c3231342c37352c37352c3134342c3136312c3133372c37392c39342c3134302c3138312c34372c33312c38312c3231332c33312c3137312c3231362c32342c3137342c37382c3234382c3133302c37352c3235352c31312c3134352c3132342c36312c38302c3139302c32372c3231362c3130352c3130362c3234382c39312c3134332c3230342c3130322c3230332c3136322c37362c3130372c31352c35322c36312c38322c3134362c3133302c3132342c37342c382c33342c3136342c3138372c3230332c38322c36342c3130382c3139312c3138352c3138382c37372c3132322c352c3234362c3235352c3130322c3131392c3234372c3139392c3131372c36372c3234312c3134332c32392c3136382c36372c39342c3135312c37382c3132392c3133312c33302c3130312c3137332c31302c36392c36382c3137352c39382c33372c3233392c3139342c32395d7d".try_into().unwrap(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None,
Expand All @@ -212,7 +212,7 @@ pub mod test_suite {
assert_eq!(
Some(SignerWithStake {
party_id: "party_id:e1:1".to_string(),
verification_key: "vkey party_id:e1:1".to_string(),
verification_key: "7b22766b223a5b3134352c35362c3137352c33322c3132322c3138372c3231342c3232362c3235312c3134382c38382c392c312c3130332c3135392c3134362c38302c3136362c3130372c3234332c3235312c3233362c34312c32382c3131312c3132382c3230372c3136342c3133322c3134372c3232382c38332c3234362c3232382c3137302c36382c38392c37382c36302c32382c3132332c3133302c38382c3233342c33382c39372c34322c36352c312c3130302c35332c31382c37382c3133312c382c36312c3132322c3133312c3233382c38342c3233332c3232332c3135342c3131382c3131382c37332c32382c32372c3130312c37382c38302c3233332c3132332c3230362c3232302c3137342c3133342c3230352c37312c3131302c3131322c3138302c39372c39382c302c3131332c36392c3134352c3233312c3136382c34332c3137332c3137322c35362c3130342c3230385d2c22706f70223a5b3133372c3231342c37352c37352c3134342c3136312c3133372c37392c39342c3134302c3138312c34372c33312c38312c3231332c33312c3137312c3231362c32342c3137342c37382c3234382c3133302c37352c3235352c31312c3134352c3132342c36312c38302c3139302c32372c3231362c3130352c3130362c3234382c39312c3134332c3230342c3130322c3230332c3136322c37362c3130372c31352c35322c36312c38322c3134362c3133302c3132342c37342c382c33342c3136342c3138372c3230332c38322c36342c3130382c3139312c3138352c3138382c37372c3132322c352c3234362c3235352c3130322c3131392c3234372c3139392c3131372c36372c3234312c3134332c32392c3136382c36372c39342c3135312c37382c3132392c3133312c33302c3130312c3137332c31302c36392c36382c3137352c39382c33372c3233392c3139342c32395d7d".try_into().unwrap(),
verification_key_signature: None,
operational_certificate: None,
kes_period: None,
Expand Down
2 changes: 1 addition & 1 deletion mithril-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-client"
version = "0.3.20"
version = "0.3.21"
description = "A Mithril Client"
authors = { workspace = true }
edition = { workspace = true }
Expand Down
10 changes: 6 additions & 4 deletions mithril-client/src/aggregator_client/certificate_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use async_trait::async_trait;
use mithril_common::{
certificate_chain::{CertificateRetriever, CertificateRetrieverError},
entities::Certificate,
messages::{CertificateMessage, FromMessageAdapter},
messages::{CertificateMessage, TryFromMessageAdapter},
StdResult,
};
use slog_scope::{crit, debug};
Expand Down Expand Up @@ -41,7 +41,7 @@ impl CertificateClient {
e
})?;

Ok(Some(FromCertificateMessageAdapter::adapt(message)))
Ok(Some(FromCertificateMessageAdapter::try_adapt(message)?))
}
}
}
Expand All @@ -66,7 +66,7 @@ impl CertificateRetriever for CertificateClient {

#[cfg(test)]
mod tests {
use mithril_common::messages::CertificateMetadataMessage;
use mithril_common::messages::{CertificateMetadataMessage, SignerWithStakeMessagePart};
use mithril_common::test_utils::fake_data;

use crate::aggregator_client::MockAggregatorHTTPClient;
Expand All @@ -92,7 +92,9 @@ mod tests {
protocol_parameters: certificate.metadata.protocol_parameters.clone(),
initiated_at: certificate.metadata.initiated_at,
sealed_at: certificate.metadata.sealed_at,
signers: certificate.metadata.signers.clone(),
signers: SignerWithStakeMessagePart::from_signers(
certificate.metadata.signers.clone(),
),
},
protocol_message: certificate.protocol_message.clone(),
signed_message: certificate.signed_message.clone(),
Expand Down
Loading

0 comments on commit c2e8686

Please sign in to comment.