@@ -5,29 +5,42 @@ use blake2::{digest::consts::U64, Blake2b, Digest};
55use pallas_network:: miniprotocols:: localmsgsubmission:: DmqMsg ;
66
77use mithril_cardano_node_chain:: chain_observer:: ChainObserver ;
8- use mithril_common:: StdResult ;
8+ use mithril_common:: {
9+ crypto_helper:: { KesSigner , TryToBytes } ,
10+ StdResult ,
11+ } ;
912
1013/// The TTL (Time To Live) for DMQ messages in blocks.
1114const DMQ_MESSAGE_TTL_IN_BLOCKS : u16 = 100 ;
1215
1316/// A builder for creating DMQ messages.
1417pub struct DmqMessageBuilder {
18+ kes_signer : Arc < dyn KesSigner > ,
1519 chain_observer : Arc < dyn ChainObserver > ,
1620 ttl_blocks : u16 ,
1721}
1822
1923impl DmqMessageBuilder {
2024 /// Creates a new instance of `DmqMessageBuilder`.
21- pub fn new ( chain_observer : Arc < dyn ChainObserver > , ttl_blocks : u16 ) -> Self {
25+ pub fn new (
26+ kes_signer : Arc < dyn KesSigner > ,
27+ chain_observer : Arc < dyn ChainObserver > ,
28+ ttl_blocks : u16 ,
29+ ) -> Self {
2230 Self {
31+ kes_signer,
2332 chain_observer,
2433 ttl_blocks,
2534 }
2635 }
2736
2837 /// Creates a new instance of `DmqMessageBuilder` with default TTL.
29- pub fn new_with_default_ttl ( chain_observer : Arc < dyn ChainObserver > ) -> Self {
38+ pub fn new_with_default_ttl (
39+ kes_signer : Arc < dyn KesSigner > ,
40+ chain_observer : Arc < dyn ChainObserver > ,
41+ ) -> Self {
3042 Self {
43+ kes_signer,
3144 chain_observer,
3245 ttl_blocks : DMQ_MESSAGE_TTL_IN_BLOCKS ,
3346 }
@@ -57,15 +70,17 @@ impl DmqMessageBuilder {
5770 let block_number = ( * block_number)
5871 . try_into ( )
5972 . map_err ( |_| anyhow ! ( "Failed to convert block number to u32" ) ) ?;
60- let kes_signature = vec ! [ ] ; // TO DO: create a KES signature
61- let operational_certificate = vec ! [ ] ; // TO DO: create an operational certificate
73+ let ( kes_signature, operational_certificate) = self
74+ . kes_signer
75+ . sign ( message_bytes, block_number)
76+ . with_context ( || "Failed to KES sign message while building DMQ message" ) ?;
6277 let mut dmq_message = DmqMsg {
6378 msg_id : vec ! [ ] ,
6479 msg_body : message_bytes. to_vec ( ) ,
6580 block_number,
6681 ttl : self . ttl_blocks ,
67- kes_signature,
68- operational_certificate,
82+ kes_signature : kes_signature . to_bytes_vec ( ) ? ,
83+ operational_certificate : operational_certificate . to_bytes_vec ( ) ? ,
6984 } ;
7085 dmq_message. msg_id = compute_msg_id ( & dmq_message) ;
7186
@@ -77,7 +92,7 @@ impl DmqMessageBuilder {
7792mod tests {
7893 use mithril_cardano_node_chain:: test:: double:: FakeChainObserver ;
7994 use mithril_common:: {
80- crypto_helper:: TryToBytes ,
95+ crypto_helper:: { FakeKesSigner , TryToBytes } ,
8196 entities:: { BlockNumber , ChainPoint , TimePoint } ,
8297 } ;
8398
@@ -99,14 +114,19 @@ mod tests {
99114
100115 #[ tokio:: test]
101116 async fn test_build_dmq_message ( ) {
117+ let ( kes_signature, operational_certificate) = FakeKesSigner :: dummy_signature ( ) ;
118+ let kes_signer = Arc :: new ( FakeKesSigner :: new ( vec ! [ Ok ( (
119+ kes_signature. clone( ) ,
120+ operational_certificate. clone( ) ,
121+ ) ) ] ) ) ;
102122 let chain_observer = Arc :: new ( FakeChainObserver :: new ( Some ( TimePoint {
103123 chain_point : ChainPoint {
104124 block_number : BlockNumber ( 123 ) ,
105125 ..ChainPoint :: dummy ( )
106126 } ,
107127 ..TimePoint :: dummy ( )
108128 } ) ) ) ;
109- let builder = DmqMessageBuilder :: new ( chain_observer, 100 ) ;
129+ let builder = DmqMessageBuilder :: new ( kes_signer , chain_observer, 100 ) ;
110130 let message = test_utils:: TestMessage {
111131 content : b"test" . to_vec ( ) ,
112132 } ;
@@ -118,19 +138,17 @@ mod tests {
118138
119139 assert_eq ! (
120140 DmqMsg {
121- msg_id: vec![
122- 26 , 113 , 171 , 177 , 174 , 241 , 244 , 241 , 209 , 92 , 210 , 7 , 119 , 105 , 94 , 133 , 93 ,
123- 62 , 82 , 95 , 91 , 221 , 146 , 174 , 201 , 190 , 140 , 1 , 217 , 240 , 228 , 203 , 14 , 50 ,
124- 104 , 59 , 252 , 216 , 26 , 84 , 231 , 142 , 163 , 140 , 11 , 95 , 17 , 234 , 242 , 39 , 230 ,
125- 160 , 194 , 219 , 128 , 42 , 53 , 125 , 218 , 48 , 209 , 3 , 210 , 154
126- ] ,
141+ msg_id: vec![ ] ,
127142 msg_body: vec![ 116 , 101 , 115 , 116 ] ,
128143 block_number: 123 ,
129144 ttl: 100 ,
130- kes_signature: vec! [ ] ,
131- operational_certificate: vec! [ ] ,
145+ kes_signature: kes_signature . to_bytes_vec ( ) . unwrap ( ) ,
146+ operational_certificate: operational_certificate . to_bytes_vec ( ) . unwrap ( ) ,
132147 } ,
133- dmq_message
148+ DmqMsg {
149+ msg_id: vec![ ] ,
150+ ..dmq_message
151+ }
134152 ) ;
135153 }
136154}
0 commit comments