@@ -55,13 +55,20 @@ impl DmqMessageBuilder {
55
55
let mut hasher = Blake2b :: < U64 > :: new ( ) ;
56
56
hasher. update ( & dmq_message_payload. msg_body ) ;
57
57
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 ) ;
60
58
hasher. update ( dmq_message_payload. expires_at . to_be_bytes ( ) ) ;
61
59
62
60
hasher. finalize ( ) . to_vec ( )
63
61
}
64
62
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
+
65
72
/// Builds a DMQ message from the provided message bytes.
66
73
pub async fn build ( & self , message_bytes : & [ u8 ] ) -> StdResult < DmqMessage > {
67
74
let expires_at: u32 = ( self . timestamp_provider . current_timestamp ( ) ?
@@ -74,40 +81,28 @@ impl DmqMessageBuilder {
74
81
. await
75
82
. with_context ( || "Failed to get KES period while building DMQ message" ) ?
76
83
. unwrap_or_default ( ) ;
77
- let mut dmq_message_payload = DmqMsgPayload {
84
+ let dmq_message_payload = Self :: enrich_msg_payload_with_id ( DmqMsgPayload {
78
85
msg_id : vec ! [ ] ,
79
86
msg_body : message_bytes. to_vec ( ) ,
80
87
kes_period : kes_period as u64 ,
81
- operational_certificate : vec ! [ ] ,
82
- cold_verification_key : vec ! [ ] ,
83
88
expires_at,
84
- } ;
85
- dmq_message_payload. msg_id = Self :: compute_msg_id ( & dmq_message_payload) ;
89
+ } ) ;
86
90
87
91
let ( kes_signature, operational_certificate) = self
88
92
. kes_signer
89
93
. sign ( & dmq_message_payload. bytes_to_sign ( ) ?, kes_period)
90
94
. with_context ( || "Failed to KES sign message while building DMQ message" ) ?;
91
95
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
-
96
96
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
+ } ) ,
110
103
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
111
106
} ;
112
107
113
108
Ok ( dmq_message. into ( ) )
@@ -173,36 +168,23 @@ mod tests {
173
168
174
169
let dmq_message = builder. build ( & message. to_bytes_vec ( ) . unwrap ( ) ) . await . unwrap ( ) ;
175
170
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
+ } ) ;
181
177
assert_eq ! (
182
178
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( ) ,
191
180
kes_signature: kes_signature. to_bytes_vec( ) . unwrap( ) ,
181
+ operational_certificate: operational_certificate. to_bytes_vec( ) . unwrap( ) ,
182
+ cold_verification_key: vec![ ] ,
192
183
} ,
193
184
dmq_message. clone( ) . into( )
194
185
) ;
195
186
196
187
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) ;
206
188
assert_eq ! (
207
189
vec![ expected_msg_payload. bytes_to_sign( ) . unwrap( ) ] ,
208
190
signed_messages
0 commit comments