Skip to content

Commit 97cf56c

Browse files
authored
Merge pull request #1161 from input-output-hk/damien/668/update-op-cert-crypto-entity
Protocol key for Operational Certificate
2 parents 894bf6b + 0b923cc commit 97cf56c

File tree

21 files changed

+138
-81
lines changed

21 files changed

+138
-81
lines changed

Cargo.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.3.67"
3+
version = "0.3.68"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/database/provider/signer_registration.rs

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ impl SignerRegistrationRecord {
5656
epoch_setting_id: epoch,
5757
verification_key: other.verification_key.to_json_hex().unwrap(),
5858
verification_key_signature: other.verification_key_signature,
59-
operational_certificate: other.operational_certificate,
59+
operational_certificate: other
60+
.operational_certificate
61+
.map(|o| o.to_json_hex().unwrap()),
6062
kes_period: other.kes_period,
6163
stake: Some(other.stake),
6264
created_at: Utc::now(),
@@ -70,7 +72,9 @@ impl From<SignerRegistrationRecord> for Signer {
7072
party_id: other.signer_id,
7173
verification_key: other.verification_key.try_into().unwrap(),
7274
verification_key_signature: other.verification_key_signature,
73-
operational_certificate: other.operational_certificate,
75+
operational_certificate: other
76+
.operational_certificate
77+
.map(|o| (o.try_into().unwrap())),
7478
kes_period: other.kes_period,
7579
}
7680
}
@@ -82,7 +86,9 @@ impl From<SignerRegistrationRecord> for SignerWithStake {
8286
party_id: other.signer_id,
8387
verification_key: other.verification_key.try_into().unwrap(),
8488
verification_key_signature: other.verification_key_signature,
85-
operational_certificate: other.operational_certificate,
89+
operational_certificate: other
90+
.operational_certificate
91+
.map(|o| (o.try_into().unwrap())),
8692
kes_period: other.kes_period,
8793
stake: other.stake.unwrap_or_default(),
8894
}
@@ -575,6 +581,41 @@ mod tests {
575581
Ok(())
576582
}
577583

584+
fn insert_golden_signer_registration(connection: &Connection) {
585+
connection
586+
.execute(
587+
r#"
588+
insert into signer_registration
589+
values(
590+
'pool1t9uuagsat8hlr0n0ga4wzge0jxlyjuhl6mugrm8atc285vzkf2e',
591+
292,
592+
'7b22766b223a5b3132382c3134322c31352c37322c35342c37332c32392c3135372c39302c3134392c33342c3235352c35312c31382c34342c33322c36302c34362c3130302c31342c3136342c39362c3138362c31382c32372c3231312c3130322c3130362c35352c332c3137302c3234302c3131342c3134372c3134362c3234382c31352c32312c3232392c3133322c3234362c3230322c3136322c34312c3135312c3138362c3136332c3232302c31342c3231372c3235352c3234352c35352c3231362c3235322c342c3137302c31362c3137382c3230392c3134392c32302c3230352c39322c3232312c38302c32392c3139302c3131372c3138382c3132382c3234372c3133312c37382c3138372c3232332c3231382c3131362c3235352c34332c3130392c3132362c3233302c3130382c33372c3131342c332c3138362c3136352c33322c3133312c3139332c3139302c34342c3134362c3234315d2c22706f70223a5b3134322c3133352c38352c342c3134362c32342c37382c34332c36332c3233382c3235312c37382c3138312c37342c37302c362c39342c3138372c3137382c3133332c3135352c3233342c3235352c3134352c3139372c3137302c3135352c3132392c3234332c3137332c31322c31392c36382c3132392c3131342c36392c3231312c33372c3233322c3139332c3130372c3233332c32392c3130332c3232382c34392c36392c38362c3137322c35352c39342c3132332c372c36322c3135382c33352c31372c3131332c38312c3136312c34342c3234392c35332c36362c39332c37302c3136392c3133372c3135372c3233342c3234372c3232332c37312c3135302c3231362c3130322c3139302c3137362c3135322c34362c3134332c3233302c31322c3138382c33312c3234362c3137312c3130352c3230392c3133382c35352c32382c3134312c36302c3132312c3132305d7d',
593+
'7b227369676d61223a7b227369676d61223a7b227369676d61223a7b227369676d61223a7b227369676d61223a7b227369676d61223a5b35322c3230342c36342c3136342c3134382c36302c342c3133372c3132312c312c3130302c38352c3133382c3235302c33382c37352c39302c3133352c31392c35322c3135312c3130302c35392c372c33332c3131322c31332c3138342c3138342c32332c35352c37392c3134332c3231382c3231352c3136362c3137392c36312c3234312c3136342c38342c36302c3234312c3234302c3134362c33332c37342c3136372c37342c3230332c37382c34372c3231362c3132352c37382c31302c38312c3233322c3134332c37302c3234362c382c3130352c345d2c226c68735f706b223a5b3130342c3131332c39302c32332c3231392c3235342c382c3137352c3136372c3133312c3136382c3131322c3130392c3137362c31342c35372c38362c3139372c34392c35312c3136382c3131352c3138372c3137382c392c3233322c38362c3139352c3130362c3134322c3232372c3139365d2c227268735f706b223a5b38372c3136392c39392c3133382c3130352c3133312c3133322c3132362c3139382c3138352c3137302c3132352c39372c3137372c38342c3231302c3137362c3134322c3133382c32312c38362c3133312c3135382c3132332c36332c3131322c39392c3133322c3134352c3231322c382c3233315d7d2c226c68735f706b223a5b34302c38382c39392c372c31362c32302c37352c3132302c3234372c3233302c32372c3233392c35332c3235352c3137302c3132302c3131392c33372c3138362c3130322c35302c33362c39382c3139332c3130332c33372c352c3131362c3134322c3134382c3233322c32355d2c227268735f706b223a5b3130372c3135372c3234342c3230342c3133362c3139332c38382c3130322c3234312c3135392c39392c3233342c38342c3139322c3133302c34372c32302c3136362c322c3230302c37392c3133352c3230352c312c3235332c3233352c32382c3134372c3135352c3132322c33392c3234345d7d2c226c68735f706b223a5b3133332c3131362c3131342c36342c3132322c31332c3138362c3130342c39322c3233372c39372c38322c3232312c38322c35342c3132352c34352c3234342c3139322c39332c35362c3132362c34302c3134362c3131312c3132392c3232312c3234382c362c35342c3233372c3138355d2c227268735f706b223a5b3137312c3137302c33382c3232302c3133302c34372c3133362c3233362c37322c35332c36332c33382c32392c34362c3230352c32392c3234382c3235342c37362c32372c322c3132382c3130372c3131392c3132382c3137302c32322c3131322c3137362c3130322c3136332c37335d7d2c226c68735f706b223a5b3231312c3138392c38342c3139372c302c3231382c3134382c312c34332c36332c38342c3234322c3231392c39342c31302c3134302c3134372c3137322c38342c35392c31352c3131342c3230392c3235302c3230372c31342c3134322c33362c3135372c3230332c37382c3137355d2c227268735f706b223a5b3137302c3132392c3132332c342c3131332c3135322c3232392c3133372c392c32342c3133372c3136362c32352c3136352c34332c3132322c3132332c3230312c3234322c3231302c3137382c3234382c31342c3233302c33392c3231322c31382c33362c34382c38372c39302c3230365d7d2c226c68735f706b223a5b33332c3234322c3130372c39312c3130372c3130322c3136332c36342c33332c3231372c3233342c3138302c33382c312c3138352c3135382c3230372c3234352c3136372c3130352c3134322c33382c3233342c37362c34322c32322c372c3130342c39362c3139382c3234322c35335d2c227268735f706b223a5b39352c34302c392c3131372c3130382c3135362c3138342c3133392c39302c3138382c31352c32312c3131322c31382c3130302c3134362c3130342c352c3135362c39372c3134392c33322c34322c3234302c3134392c3138382c35322c33312c39312c39392c3131382c365d7d2c226c68735f706b223a5b3139332c3234322c37362c3230392c3134312c33372c3130312c36382c37302c392c3134312c33392c3230372c39342c3232362c33392c3136302c3131382c32332c3233302c3234342c3231302c31382c38322c3137332c3135382c3233312c3137392c3138322c31392c32322c3134365d2c227268735f706b223a5b3133322c3232392c3130382c3139392c37312c36392c3233362c36352c31382c3131372c39332c3234332c3234332c37342c36392c39382c3134302c3234392c342c33372c37372c38372c35382c31322c3132302c37332c3230332c39362c36312c3233302c39322c3132385d7d',
594+
'5b5b5b3138362c39352c3232362c3137342c3132352c3235302c31302c3232322c3130322c3234302c36352c3235352c34372c3133382c38392c3131302c31342c3131302c32322c3138322c33322c3136362c3231312c392c32302c32302c35352c35382c3232392c3132302c3235302c37315d2c312c3136352c5b3130352c35342c3234352c35362c3231352c3130362c3133392c3231322c3137342c3232332c39302c3234392c3138372c34372c3134382c35302c34302c31352c3131372c3231372c3134392c3132362c3231382c3232352c3133362c36352c3231392c3136302c3134382c39332c3232382c3235312c31392c3231332c3136382c332c3233362c38392c3132302c3135392c3139382c38302c3234342c3138302c33332c3131392c3132382c3230312c3138362c3132302c32312c3130322c36322c3232392c32382c3135352c37362c31392c3235322c3232312c3234372c3137342c3135392c365d5d2c5b3234312c32372c31332c34342c3131342c37382c3138392c3234392c3135302c3135302c35332c3134342c3233362c3135312c38382c3134302c3132382c3136322c36302c3232382c38382c3131312c392c3134342c3233322c38332c39342c3231302c3135362c3136382c33352c3234325d5d',
595+
29,
596+
9497629046,
597+
'2023-08-12T00:03:51.236860002+00:00'
598+
);
599+
"#,
600+
)
601+
.unwrap();
602+
}
603+
604+
#[tokio::test]
605+
async fn test_golden_master() {
606+
let connection = Connection::open(":memory:").unwrap();
607+
apply_all_migrations_to_db(&connection).unwrap();
608+
disable_foreign_key_support(&connection).unwrap();
609+
insert_golden_signer_registration(&connection);
610+
611+
let repository = SignerRegistrationStore::new(Arc::new(Mutex::new(connection)));
612+
repository
613+
.get_verification_keys(Epoch(292))
614+
.await
615+
.expect("Getting Golden signer registration should not fail")
616+
.expect("Signer registration should exist for this epoch");
617+
}
618+
578619
#[test]
579620
fn test_convert_signer_registrations() {
580621
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();

mithril-aggregator/src/message_adapters/from_register_signer.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSigner
1414
party_id: register_signer_message.party_id,
1515
verification_key: register_signer_message.verification_key.try_into()?,
1616
verification_key_signature: register_signer_message.verification_key_signature,
17-
operational_certificate: register_signer_message.operational_certificate,
17+
operational_certificate: match register_signer_message.operational_certificate {
18+
Some(operational_certificate) => Some(operational_certificate.try_into()?),
19+
_ => None,
20+
},
1821
kes_period: register_signer_message.kes_period,
1922
})
2023
}

mithril-aggregator/src/message_adapters/to_certificate_pending_message.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ impl ToCertificatePendingMessageAdapter {
3131
verification_key: signer.verification_key.try_into().unwrap(),
3232
verification_key_signature: signer.verification_key_signature,
3333
kes_period: signer.kes_period,
34-
operational_certificate: signer.operational_certificate,
34+
operational_certificate: signer
35+
.operational_certificate
36+
.map(|o| o.try_into().unwrap()),
3537
})
3638
.collect()
3739
}

mithril-aggregator/src/signer_registerer.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,10 @@ impl SignerRegisterer for MithrilSignerRegisterer {
231231
),
232232
_ => None,
233233
};
234-
let operational_certificate = match &signer.operational_certificate {
235-
Some(operational_certificate) => Some(
236-
key_decode_hex(operational_certificate).map_err(SignerRegistrationError::Codec)?,
237-
),
238-
_ => None,
239-
};
234+
let operational_certificate = signer
235+
.operational_certificate
236+
.as_ref()
237+
.map(|op_cert| op_cert.to_owned().into());
240238
let kes_period = match &operational_certificate {
241239
Some(operational_certificate) => Some(
242240
self.chain_observer

mithril-client/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-client"
3-
version = "0.3.29"
3+
version = "0.3.30"
44
description = "A Mithril Client"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-common"
3-
version = "0.2.89"
3+
version = "0.2.90"
44
authors = { workspace = true }
55
edition = { workspace = true }
66
documentation = { workspace = true }

mithril-common/src/crypto_helper/tests_setup.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,11 @@ fn setup_signer_with_stake(
7777
party_id: &str,
7878
stake: Stake,
7979
protocol_initializer: &ProtocolInitializer,
80-
operational_certificate: Option<OpCert>,
80+
operational_certificate: Option<ProtocolOpCert>,
8181
kes_period: u32,
8282
) -> SignerWithStake {
83+
let kes_period = operational_certificate.as_ref().and(Some(kes_period));
84+
8385
SignerWithStake::new(
8486
party_id.to_owned(),
8587
protocol_initializer.verification_key().into(),
@@ -90,13 +92,8 @@ fn setup_signer_with_stake(
9092
key_encode_hex(verification_key_signature)
9193
.expect("key_encode_hex of verification_key_signature should not fail")
9294
}),
93-
operational_certificate
94-
.as_ref()
95-
.map(|operational_certificate| {
96-
key_encode_hex(operational_certificate)
97-
.expect("key_encode_hex of operational_certificate should not fail")
98-
}),
99-
operational_certificate.as_ref().map(|_| kes_period),
95+
operational_certificate,
96+
kes_period,
10097
stake,
10198
)
10299
}
@@ -131,7 +128,7 @@ pub fn setup_signers_from_stake_distribution(
131128
party_id,
132129
*stake,
133130
&protocol_initializer,
134-
operational_certificate.clone(),
131+
operational_certificate.as_ref().map(|o| o.clone().into()),
135132
kes_period,
136133
);
137134

mithril-common/src/crypto_helper/types/wrappers.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use anyhow::Context;
22
use hex::{FromHex, ToHex};
33
use mithril_stm::stm::{StmAggrSig, StmSig, StmVerificationKeyPoP};
44

5-
use crate::crypto_helper::{ProtocolKey, ProtocolKeyCodec, D};
5+
use crate::crypto_helper::{OpCert, ProtocolKey, ProtocolKeyCodec, D};
66
use crate::StdResult;
77

88
/// Wrapper of [MithrilStm:StmVerificationKeyPoP](type@StmVerificationKeyPoP) to add serialization
@@ -18,6 +18,9 @@ pub type ProtocolMultiSignature = ProtocolKey<StmAggrSig<D>>;
1818
/// Wrapper of [Ed25519:Signature](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.Signature.html).
1919
pub type ProtocolGenesisSignature = ProtocolKey<ed25519_dalek::Signature>;
2020

21+
/// Wrapper of [OpCert] to add serialization utilities.
22+
pub type ProtocolOpCert = ProtocolKey<OpCert>;
23+
2124
impl ProtocolGenesisSignature {
2225
/// Create an instance from a bytes hex representation
2326
pub fn from_bytes_hex(hex_string: &str) -> StdResult<Self> {
@@ -62,6 +65,6 @@ impl ProtocolKeyCodec<ed25519_dalek::Signature> for ed25519_dalek::Signature {
6265
}
6366

6467
impl_codec_and_type_conversions_for_protocol_key!(
65-
json_hex_codec => StmVerificationKeyPoP, StmSig, StmAggrSig<D>
68+
json_hex_codec => StmVerificationKeyPoP, StmSig, StmAggrSig<D>, OpCert
6669
);
6770
impl_codec_and_type_conversions_for_protocol_key!(no_default_codec => ed25519_dalek::Signature);

0 commit comments

Comments
 (0)