@@ -97,21 +97,21 @@ pub trait QuantumLink<C>: minicbor::Encode<C> {
9797 Ok ( message)
9898 }
9999
100- fn seal ( & self , sender : QuantumLinkIdentity , recipient : QuantumLinkIdentity ) -> Envelope
100+ fn seal (
101+ & self ,
102+ ( sender_pk, sender_xid) : ( & PrivateKeys , & XIDDocument ) ,
103+ recipient : & XIDDocument ,
104+ ) -> Envelope
101105 where
102106 Self : minicbor:: Encode < ( ) > ,
103107 {
104108 let valid_until = Date :: with_duration_from_now ( EXPIRATION_DURATION ) ;
105109
106110 let event: SealedEvent < Expression > =
107- SealedEvent :: new ( QuantumLink :: encode ( self ) , ARID :: new ( ) , sender . xid_document )
111+ SealedEvent :: new ( QuantumLink :: encode ( self ) , ARID :: new ( ) , sender_xid )
108112 . with_date ( & valid_until) ;
109113 event
110- . to_envelope (
111- Some ( & valid_until) ,
112- Some ( & sender. private_keys . unwrap ( ) ) ,
113- Some ( & recipient. xid_document ) ,
114- )
114+ . to_envelope ( Some ( & valid_until) , Some ( sender_pk) , Some ( recipient) )
115115 . unwrap ( )
116116 }
117117
@@ -142,7 +142,10 @@ pub trait QuantumLink<C>: minicbor::Encode<C> {
142142
143143 // Check for replay attack
144144 let arid = event. id ( ) ;
145- let event_date = event. date ( ) . unwrap ( ) . datetime ( ) ;
145+ let event_date = event
146+ . date ( )
147+ . ok_or_else ( || anyhow:: anyhow!( "event missing date" ) ) ?
148+ . datetime ( ) ;
146149 if arid_cache. check_and_store ( arid, event_date, now) {
147150 bail ! ( "Replay attack detected: ARID has been seen before" ) ;
148151 }
@@ -285,7 +288,11 @@ mod tests {
285288 } ;
286289
287290 // Seal the message
288- let envelope = QuantumLink :: seal ( & original_message, envoy. clone ( ) , passport. clone ( ) ) ;
291+ let envelope = QuantumLink :: seal (
292+ & original_message,
293+ ( envoy. private_keys . as_ref ( ) . unwrap ( ) , & envoy. xid_document ) ,
294+ & passport. xid_document ,
295+ ) ;
289296
290297 // Decode the message
291298 let decoded_message =
@@ -327,7 +334,11 @@ mod tests {
327334 } ;
328335
329336 // Seal the message
330- let envelope = QuantumLink :: seal ( & original_message, envoy. clone ( ) , passport. clone ( ) ) ;
337+ let envelope = QuantumLink :: seal (
338+ & original_message,
339+ ( envoy. private_keys . as_ref ( ) . unwrap ( ) , & envoy. xid_document ) ,
340+ & passport. xid_document ,
341+ ) ;
331342
332343 // First unseal should succeed
333344 let result1 = EnvoyMessage :: unseal_envoy_message_with_replay_check (
@@ -367,8 +378,17 @@ mod tests {
367378 timestamp : 123457 ,
368379 } ;
369380
370- let envelope1 = QuantumLink :: seal ( & message1, envoy. clone ( ) , passport. clone ( ) ) ;
371- let envelope2 = QuantumLink :: seal ( & message2, envoy. clone ( ) , passport. clone ( ) ) ;
381+ let envelope1 = QuantumLink :: seal (
382+ & message1,
383+ ( envoy. private_keys . as_ref ( ) . unwrap ( ) , & envoy. xid_document ) ,
384+ & passport. xid_document ,
385+ ) ;
386+
387+ let envelope2 = QuantumLink :: seal (
388+ & message2,
389+ ( envoy. private_keys . as_ref ( ) . unwrap ( ) , & envoy. xid_document ) ,
390+ & passport. xid_document ,
391+ ) ;
372392
373393 // Unseal both messages
374394 let _result1 = EnvoyMessage :: unseal_envoy_message_with_replay_check (
@@ -427,7 +447,11 @@ fn test_replay_check() {
427447 timestamp : 123456 ,
428448 } ;
429449
430- let envelope = QuantumLink :: seal ( & message, envoy. clone ( ) , passport. clone ( ) ) ;
450+ let envelope = QuantumLink :: seal (
451+ & message,
452+ ( envoy. private_keys . as_ref ( ) . unwrap ( ) , & envoy. xid_document ) ,
453+ & passport. xid_document ,
454+ ) ;
431455
432456 let result1 = EnvoyMessage :: unseal_envoy_message_with_replay_check (
433457 & envelope,
0 commit comments