Skip to content

Commit ec8d488

Browse files
committed
refactor(dmq): update the message builder and KES signature
Following the move of operational certificate and cold verification out of the signed payload.
1 parent 76befa1 commit ec8d488

File tree

1 file changed

+28
-46
lines changed

1 file changed

+28
-46
lines changed

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

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,20 @@ impl DmqMessageBuilder {
5555
let mut hasher = Blake2b::<U64>::new();
5656
hasher.update(&dmq_message_payload.msg_body);
5757
hasher.update(dmq_message_payload.kes_period.to_be_bytes());
58-
hasher.update(&dmq_message_payload.operational_certificate);
59-
hasher.update(&dmq_message_payload.cold_verification_key);
6058
hasher.update(dmq_message_payload.expires_at.to_be_bytes());
6159

6260
hasher.finalize().to_vec()
6361
}
6462

63+
/// Enriches a DMQ message payload with a computed message ID.
64+
fn enrich_msg_payload_with_id(dmq_message_payload: DmqMsgPayload) -> DmqMsgPayload {
65+
let msg_id = Self::compute_msg_id(&dmq_message_payload);
66+
let mut dmq_message_payload_with_id = dmq_message_payload;
67+
dmq_message_payload_with_id.msg_id = msg_id;
68+
69+
dmq_message_payload_with_id
70+
}
71+
6572
/// Builds a DMQ message from the provided message bytes.
6673
pub async fn build(&self, message_bytes: &[u8]) -> StdResult<DmqMessage> {
6774
let expires_at: u32 = (self.timestamp_provider.current_timestamp()?
@@ -74,40 +81,28 @@ impl DmqMessageBuilder {
7481
.await
7582
.with_context(|| "Failed to get KES period while building DMQ message")?
7683
.unwrap_or_default();
77-
let mut dmq_message_payload = DmqMsgPayload {
84+
let dmq_message_payload = Self::enrich_msg_payload_with_id(DmqMsgPayload {
7885
msg_id: vec![],
7986
msg_body: message_bytes.to_vec(),
8087
kes_period: kes_period as u64,
81-
operational_certificate: vec![],
82-
cold_verification_key: vec![],
8388
expires_at,
84-
};
85-
dmq_message_payload.msg_id = Self::compute_msg_id(&dmq_message_payload);
89+
});
8690

8791
let (kes_signature, operational_certificate) = self
8892
.kes_signer
8993
.sign(&dmq_message_payload.bytes_to_sign()?, kes_period)
9094
.with_context(|| "Failed to KES sign message while building DMQ message")?;
9195

92-
// TODO: remove the cold verification key in the op cert
93-
dmq_message_payload.operational_certificate = operational_certificate.to_bytes_vec()?;
94-
dmq_message_payload.cold_verification_key = vec![];
95-
9696
let dmq_message = DmqMsg {
97-
msg_payload: {
98-
let mut dmq_message_payload = DmqMsgPayload {
99-
msg_id: vec![],
100-
msg_body: message_bytes.to_vec(),
101-
kes_period: kes_period as u64,
102-
operational_certificate: operational_certificate.to_bytes_vec()?, // TODO: remove the cold verification key in the op cert
103-
cold_verification_key: vec![], // TODO: fix
104-
expires_at,
105-
};
106-
dmq_message_payload.msg_id = Self::compute_msg_id(&dmq_message_payload);
107-
108-
dmq_message_payload
109-
},
97+
msg_payload: Self::enrich_msg_payload_with_id(DmqMsgPayload {
98+
msg_id: vec![],
99+
msg_body: message_bytes.to_vec(),
100+
kes_period: kes_period as u64,
101+
expires_at,
102+
}),
110103
kes_signature: kes_signature.to_bytes_vec()?,
104+
operational_certificate: operational_certificate.to_bytes_vec()?, // TODO: remove the cold verification key in the op cert
105+
cold_verification_key: vec![], // TODO: fix
111106
};
112107

113108
Ok(dmq_message.into())
@@ -173,36 +168,23 @@ mod tests {
173168

174169
let dmq_message = builder.build(&message.to_bytes_vec().unwrap()).await.unwrap();
175170

176-
let DmqMsg {
177-
msg_payload,
178-
kes_signature: _,
179-
} = &*dmq_message;
180-
171+
let expected_msg_payload = DmqMessageBuilder::enrich_msg_payload_with_id(DmqMsgPayload {
172+
msg_id: vec![],
173+
msg_body: b"test".to_vec(),
174+
kes_period: 0,
175+
expires_at: 1234,
176+
});
181177
assert_eq!(
182178
DmqMsg {
183-
msg_payload: DmqMsgPayload {
184-
msg_id: DmqMessageBuilder::compute_msg_id(msg_payload),
185-
msg_body: b"test".to_vec(),
186-
kes_period: 0,
187-
operational_certificate: operational_certificate.to_bytes_vec().unwrap(),
188-
cold_verification_key: vec![], // TODO: fix
189-
expires_at: 1234,
190-
},
179+
msg_payload: expected_msg_payload.clone(),
191180
kes_signature: kes_signature.to_bytes_vec().unwrap(),
181+
operational_certificate: operational_certificate.to_bytes_vec().unwrap(),
182+
cold_verification_key: vec![],
192183
},
193184
dmq_message.clone().into()
194185
);
195186

196187
let signed_messages = kes_signer.get_signed_messages();
197-
let mut expected_msg_payload = DmqMsgPayload {
198-
msg_id: vec![],
199-
msg_body: b"test".to_vec(),
200-
kes_period: 0,
201-
operational_certificate: vec![], // TODO: fix
202-
cold_verification_key: vec![], // TODO: fix
203-
expires_at: 1234,
204-
};
205-
expected_msg_payload.msg_id = DmqMessageBuilder::compute_msg_id(&expected_msg_payload);
206188
assert_eq!(
207189
vec![expected_msg_payload.bytes_to_sign().unwrap()],
208190
signed_messages

0 commit comments

Comments
 (0)