Skip to content

Commit 9b4e6b2

Browse files
committed
chore(dmq): update 'DmqMsg' with new layout
1 parent cb52fa1 commit 9b4e6b2

File tree

6 files changed

+142
-40
lines changed

6 files changed

+142
-40
lines changed

internal/mithril-dmq/src/consumer/client/pallas.rs

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,13 @@ impl<M: TryFromBytes + Debug> DmqConsumerClientPallas<M> {
115115
.0
116116
.into_iter()
117117
.map(|dmq_message| {
118-
let opcert_without_verification_key =
119-
OpCertWithoutColdVerificationKey::try_from_bytes(
120-
&dmq_message.operational_certificate,
121-
)
122-
.with_context(|| "Failed to parse operational certificate")?;
118+
let opcert_without_verification_key = OpCertWithoutColdVerificationKey::try_new(
119+
&dmq_message.operational_certificate.kes_vk,
120+
dmq_message.operational_certificate.issue_number,
121+
dmq_message.operational_certificate.start_kes_period,
122+
&dmq_message.operational_certificate.cert_sig,
123+
)
124+
.with_context(|| "Failed to parse operational certificate")?;
123125
let cold_verification_key =
124126
Ed25519VerificationKey::from_bytes(&dmq_message.cold_verification_key)
125127
.with_context(|| "Failed to parse cold verification key")?
@@ -171,7 +173,7 @@ mod tests {
171173
facades::DmqServer,
172174
miniprotocols::{
173175
localmsgnotification,
174-
localmsgsubmission::{DmqMsg, DmqMsgPayload},
176+
localmsgsubmission::{DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload},
175177
},
176178
};
177179
use tokio::{net::UnixListener, task::JoinHandle, time::sleep};
@@ -194,14 +196,20 @@ mod tests {
194196
expires_at: 100,
195197
},
196198
kes_signature: vec![0, 1, 2, 3],
197-
operational_certificate: vec![
198-
132, 88, 32, 230, 80, 215, 83, 21, 9, 187, 108, 255, 215, 153, 140, 40, 198,
199-
142, 78, 200, 250, 98, 26, 9, 82, 32, 110, 161, 30, 176, 63, 205, 125, 203, 41,
200-
0, 0, 88, 64, 212, 171, 206, 39, 218, 5, 255, 3, 193, 52, 44, 198, 171, 83, 19,
201-
80, 114, 225, 186, 191, 156, 192, 84, 146, 245, 159, 31, 240, 9, 247, 4, 87,
202-
170, 168, 98, 199, 21, 139, 19, 190, 12, 251, 65, 215, 169, 26, 86, 37, 137,
203-
188, 17, 14, 178, 205, 175, 93, 39, 86, 4, 138, 187, 234, 95, 5,
204-
],
199+
operational_certificate: DmqMsgOperationalCertificate {
200+
kes_vk: vec![
201+
50, 45, 160, 42, 80, 78, 184, 20, 210, 77, 140, 152, 63, 49, 165, 168, 5,
202+
131, 101, 152, 110, 242, 144, 157, 176, 210, 5, 10, 166, 91, 196, 168,
203+
],
204+
issue_number: 0,
205+
start_kes_period: 0,
206+
cert_sig: vec![
207+
207, 135, 144, 168, 238, 41, 179, 216, 245, 74, 164, 231, 4, 158, 234, 141,
208+
5, 19, 166, 11, 78, 34, 210, 211, 183, 72, 127, 83, 185, 156, 107, 55, 160,
209+
190, 73, 251, 204, 47, 197, 86, 174, 231, 13, 49, 7, 83, 173, 177, 27, 53,
210+
209, 66, 24, 203, 226, 152, 3, 91, 66, 56, 244, 206, 79, 0,
211+
],
212+
},
205213
cold_verification_key: vec![
206214
32, 253, 186, 201, 177, 11, 117, 135, 187, 167, 181, 188, 22, 59, 206, 105,
207215
231, 150, 215, 30, 78, 212, 76, 16, 252, 180, 72, 134, 137, 247, 161, 68,
@@ -215,14 +223,20 @@ mod tests {
215223
expires_at: 101,
216224
},
217225
kes_signature: vec![1, 2, 3, 4],
218-
operational_certificate: vec![
219-
132, 88, 32, 230, 80, 215, 83, 21, 9, 187, 108, 255, 215, 153, 140, 40, 198,
220-
142, 78, 200, 250, 98, 26, 9, 82, 32, 110, 161, 30, 176, 63, 205, 125, 203, 41,
221-
0, 0, 88, 64, 212, 171, 206, 39, 218, 5, 255, 3, 193, 52, 44, 198, 171, 83, 19,
222-
80, 114, 225, 186, 191, 156, 192, 84, 146, 245, 159, 31, 240, 9, 247, 4, 87,
223-
170, 168, 98, 199, 21, 139, 19, 190, 12, 251, 65, 215, 169, 26, 86, 37, 137,
224-
188, 17, 14, 178, 205, 175, 93, 39, 86, 4, 138, 187, 234, 95, 5,
225-
],
226+
operational_certificate: DmqMsgOperationalCertificate {
227+
kes_vk: vec![
228+
50, 45, 160, 42, 80, 78, 184, 20, 210, 77, 140, 152, 63, 49, 165, 168, 5,
229+
131, 101, 152, 110, 242, 144, 157, 176, 210, 5, 10, 166, 91, 196, 168,
230+
],
231+
issue_number: 0,
232+
start_kes_period: 0,
233+
cert_sig: vec![
234+
207, 135, 144, 168, 238, 41, 179, 216, 245, 74, 164, 231, 4, 158, 234, 141,
235+
5, 19, 166, 11, 78, 34, 210, 211, 183, 72, 127, 83, 185, 156, 107, 55, 160,
236+
190, 73, 251, 204, 47, 197, 86, 174, 231, 13, 49, 7, 83, 173, 177, 27, 53,
237+
209, 66, 24, 203, 226, 152, 3, 91, 66, 56, 244, 206, 79, 0,
238+
],
239+
},
226240
cold_verification_key: vec![
227241
77, 75, 24, 6, 47, 133, 2, 89, 141, 224, 69, 202, 123, 105, 240, 103, 245, 159,
228242
147, 177, 110, 58, 248, 115, 58, 152, 138, 220, 35, 65, 245, 200,

internal/mithril-dmq/src/consumer/server/queue.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ mod tests {
122122
use std::{ops::RangeInclusive, time::Duration};
123123

124124
use anyhow::anyhow;
125-
use pallas_network::miniprotocols::localmsgsubmission::{DmqMsg, DmqMsgPayload};
125+
use pallas_network::miniprotocols::localmsgsubmission::{
126+
DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload,
127+
};
126128
use tokio::time::sleep;
127129

128130
use crate::model::MockUnixTimestampProvider;
@@ -138,7 +140,12 @@ mod tests {
138140
expires_at: 100,
139141
},
140142
kes_signature: vec![0, 1, 2, 3],
141-
operational_certificate: vec![0, 1, 2, 3, 4],
143+
operational_certificate: DmqMsgOperationalCertificate {
144+
kes_vk: vec![12, 13, 14],
145+
issue_number: 15,
146+
start_kes_period: 16,
147+
cert_sig: vec![17],
148+
},
142149
cold_verification_key: vec![0, 1, 2, 3, 4, 5],
143150
}
144151
}

internal/mithril-dmq/src/model/builder.rs

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ use std::sync::Arc;
22

33
use anyhow::Context;
44
use blake2::{Blake2b, Digest, digest::consts::U64};
5-
use pallas_network::miniprotocols::localmsgsubmission::{DmqMsg, DmqMsgPayload};
5+
use pallas_network::miniprotocols::localmsgsubmission::{
6+
DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload,
7+
};
68

79
use mithril_cardano_node_chain::chain_observer::ChainObserver;
810
use mithril_common::{
911
StdResult,
10-
crypto_helper::{KesSigner, SerDeShelleyFileFormat, TryToBytes},
12+
crypto_helper::{KesSigner, TryToBytes},
1113
};
1214

1315
use crate::model::{DmqMessage, SystemUnixTimestampProvider, UnixTimestampProvider};
@@ -99,8 +101,19 @@ impl DmqMessageBuilder {
99101
let dmq_message = DmqMsg {
100102
msg_payload: dmq_message_payload,
101103
kes_signature: kes_signature.to_bytes_vec()?,
102-
operational_certificate: operational_certificate_without_cold_verification_key
103-
.to_cbor_bytes()?,
104+
operational_certificate: DmqMsgOperationalCertificate {
105+
kes_vk: operational_certificate_without_cold_verification_key
106+
.kes_vk()
107+
.as_bytes()
108+
.to_vec(),
109+
issue_number: operational_certificate_without_cold_verification_key.issue_number(),
110+
start_kes_period: operational_certificate_without_cold_verification_key
111+
.start_kes_period(),
112+
cert_sig: operational_certificate_without_cold_verification_key
113+
.cert_sig()
114+
.to_bytes()
115+
.to_vec(),
116+
},
104117
cold_verification_key: cold_verification_key.to_bytes().to_vec(),
105118
};
106119

@@ -177,10 +190,24 @@ mod tests {
177190
DmqMsg {
178191
msg_payload: expected_msg_payload.clone(),
179192
kes_signature: kes_signature.to_bytes_vec().unwrap(),
180-
operational_certificate: operational_certificate
181-
.get_opcert_without_cold_verification_key()
182-
.to_cbor_bytes()
183-
.unwrap(),
193+
operational_certificate: DmqMsgOperationalCertificate {
194+
kes_vk: operational_certificate
195+
.get_opcert_without_cold_verification_key()
196+
.kes_vk()
197+
.as_bytes()
198+
.to_vec(),
199+
issue_number: operational_certificate
200+
.get_opcert_without_cold_verification_key()
201+
.issue_number(),
202+
start_kes_period: operational_certificate
203+
.get_opcert_without_cold_verification_key()
204+
.start_kes_period(),
205+
cert_sig: operational_certificate
206+
.get_opcert_without_cold_verification_key()
207+
.cert_sig()
208+
.to_bytes()
209+
.to_vec(),
210+
},
184211
cold_verification_key: operational_certificate
185212
.get_cold_verification_key()
186213
.to_bytes()

internal/mithril-dmq/src/model/message.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ impl<'de> Deserialize<'de> for DmqMessage {
7272

7373
#[cfg(test)]
7474
mod tests {
75-
use pallas_network::miniprotocols::localmsgsubmission::DmqMsgPayload;
75+
use pallas_network::miniprotocols::localmsgsubmission::{
76+
DmqMsgOperationalCertificate, DmqMsgPayload,
77+
};
7678

7779
use super::*;
7880

@@ -86,7 +88,12 @@ mod tests {
8688
expires_at: 100,
8789
},
8890
kes_signature: vec![0, 1, 2, 3],
89-
operational_certificate: vec![0, 1, 2, 3, 4],
91+
operational_certificate: DmqMsgOperationalCertificate {
92+
kes_vk: vec![12, 13, 14],
93+
issue_number: 15,
94+
start_kes_period: 16,
95+
cert_sig: vec![17],
96+
},
9097
cold_verification_key: vec![0, 1, 2, 3, 4, 5],
9198
};
9299

internal/mithril-dmq/src/publisher/server/pallas.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ mod tests {
243243
use pallas_network::{
244244
facades::DmqClient,
245245
miniprotocols::{
246-
localmsgsubmission::{DmqMsg, DmqMsgPayload},
246+
localmsgsubmission::{DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload},
247247
localtxsubmission,
248248
},
249249
};
@@ -268,7 +268,12 @@ mod tests {
268268
expires_at: 100,
269269
},
270270
kes_signature: vec![0, 1, 2, 3],
271-
operational_certificate: vec![0, 1, 2, 3, 4],
271+
operational_certificate: DmqMsgOperationalCertificate {
272+
kes_vk: vec![12, 13, 14],
273+
issue_number: 15,
274+
start_kes_period: 16,
275+
cert_sig: vec![17],
276+
},
272277
cold_verification_key: vec![0, 1, 2, 3, 4, 5],
273278
}
274279
}

mithril-common/src/crypto_helper/cardano/opcert.rs

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
//! Module to (de)serialise, OpCert using the same structure as used in Cardano.
22
3-
use super::SerDeShelleyFileFormat;
4-
use crate::crypto_helper::cardano::ProtocolRegistrationErrorWrapper;
5-
use crate::crypto_helper::{ProtocolPartyId, encode_bech32};
6-
3+
use anyhow::anyhow;
74
use blake2::{Blake2b, Digest, digest::consts::U28};
85
use ed25519_dalek::{
96
Signature as EdSignature, Signer, SigningKey as EdSecretKey, Verifier,
@@ -16,6 +13,12 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
1613
use sha2::Sha256;
1714
use thiserror::Error;
1815

16+
use crate::StdResult;
17+
use crate::crypto_helper::cardano::ProtocolRegistrationErrorWrapper;
18+
use crate::crypto_helper::{ProtocolPartyId, encode_bech32};
19+
20+
use super::SerDeShelleyFileFormat;
21+
1922
/// Operational certificate error
2023
#[derive(Error, Debug, PartialEq, Eq)]
2124
pub enum OpCertError {
@@ -47,6 +50,45 @@ pub struct OpCertWithoutColdVerificationKey {
4750
pub(crate) cert_sig: EdSignature,
4851
}
4952

53+
impl OpCertWithoutColdVerificationKey {
54+
/// OpCertWithoutColdVerificationKey factory
55+
pub fn try_new(
56+
kes_vk: &[u8],
57+
issue_number: u64,
58+
start_kes_period: u64,
59+
cert_sig: &[u8],
60+
) -> StdResult<Self> {
61+
Ok(Self {
62+
kes_vk: KesPublicKey::from_bytes(kes_vk)
63+
.map_err(|_| anyhow!("KES vk serialisation error"))?,
64+
issue_number,
65+
start_kes_period,
66+
cert_sig: EdSignature::from_slice(cert_sig)
67+
.map_err(|_| anyhow!("ed25519 signature serialisation error"))?,
68+
})
69+
}
70+
71+
/// Get the KES verification key
72+
pub fn kes_vk(&self) -> KesPublicKey {
73+
self.kes_vk
74+
}
75+
76+
/// Get the issue number
77+
pub fn issue_number(&self) -> u64 {
78+
self.issue_number
79+
}
80+
81+
/// Get the start KES period
82+
pub fn start_kes_period(&self) -> u64 {
83+
self.start_kes_period
84+
}
85+
86+
/// Get the certificate signature
87+
pub fn cert_sig(&self) -> EdSignature {
88+
self.cert_sig
89+
}
90+
}
91+
5092
impl SerDeShelleyFileFormat for OpCertWithoutColdVerificationKey {
5193
const TYPE: &'static str = "NodeOperationalCertificateWithoutColdVerificationKey";
5294
const DESCRIPTION: &'static str = "";

0 commit comments

Comments
 (0)