99
1010//! Structs and enums useful for constructing and reading an onion message packet.
1111
12- use bitcoin:: secp256k1:: PublicKey ;
1312use bitcoin:: secp256k1:: ecdh:: SharedSecret ;
13+ use bitcoin:: secp256k1:: PublicKey ;
1414
15- use crate :: blinded_path:: message:: { BlindedMessagePath , ForwardTlvs , NextMessageHop , ReceiveTlvs } ;
16- use crate :: blinded_path:: utils:: Padding ;
17- use crate :: ln:: msgs:: DecodeError ;
18- use crate :: ln:: onion_utils;
1915#[ cfg( async_payments) ]
2016use super :: async_payments:: AsyncPaymentsMessage ;
2117use super :: dns_resolution:: DNSResolverMessage ;
2218use super :: messenger:: CustomOnionMessageHandler ;
2319use super :: offers:: OffersMessage ;
20+ use crate :: blinded_path:: message:: { BlindedMessagePath , ForwardTlvs , NextMessageHop , ReceiveTlvs } ;
21+ use crate :: blinded_path:: utils:: Padding ;
2422use crate :: crypto:: streams:: { ChaChaPolyReadAdapter , ChaChaPolyWriteAdapter } ;
23+ use crate :: ln:: msgs:: DecodeError ;
24+ use crate :: ln:: onion_utils;
2525use crate :: util:: logger:: Logger ;
26- use crate :: util:: ser:: { BigSize , FixedLengthReader , LengthRead , LengthReadable , LengthReadableArgs , Readable , ReadableArgs , Writeable , Writer } ;
26+ use crate :: util:: ser:: {
27+ BigSize , FixedLengthReader , LengthRead , LengthReadable , LengthReadableArgs , Readable ,
28+ ReadableArgs , Writeable , Writer ,
29+ } ;
2730
28- use core:: cmp;
29- use core:: fmt;
3031use crate :: io:: { self , Read } ;
3132use crate :: prelude:: * ;
33+ use core:: cmp;
34+ use core:: fmt;
3235
3336// Per the spec, an onion message packet's `hop_data` field length should be
3437// SMALL_PACKET_HOP_DATA_LEN if it fits, else BIG_PACKET_HOP_DATA_LEN if it fits.
@@ -56,18 +59,17 @@ pub struct Packet {
5659impl onion_utils:: Packet for Packet {
5760 type Data = Vec < u8 > ;
5861 fn new ( public_key : PublicKey , hop_data : Vec < u8 > , hmac : [ u8 ; 32 ] ) -> Packet {
59- Self {
60- version : 0 ,
61- public_key,
62- hop_data,
63- hmac,
64- }
62+ Self { version : 0 , public_key, hop_data, hmac }
6563 }
6664}
6765
6866impl fmt:: Debug for Packet {
6967 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
70- f. write_fmt ( format_args ! ( "Onion message packet version {} with hmac {:?}" , self . version, & self . hmac[ ..] ) )
68+ f. write_fmt ( format_args ! (
69+ "Onion message packet version {} with hmac {:?}" ,
70+ self . version,
71+ & self . hmac[ ..]
72+ ) )
7173 }
7274}
7375
@@ -100,12 +102,7 @@ impl LengthReadable for Packet {
100102 }
101103
102104 let hmac = Readable :: read ( r) ?;
103- Ok ( Packet {
104- version,
105- public_key,
106- hop_data,
107- hmac,
108- } )
105+ Ok ( Packet { version, public_key, hop_data, hmac } )
109106 }
110107}
111108
@@ -116,11 +113,7 @@ pub(super) enum Payload<T: OnionMessageContents> {
116113 /// This payload is for an intermediate hop.
117114 Forward ( ForwardControlTlvs ) ,
118115 /// This payload is for the final hop.
119- Receive {
120- control_tlvs : ReceiveControlTlvs ,
121- reply_path : Option < BlindedMessagePath > ,
122- message : T ,
123- }
116+ Receive { control_tlvs : ReceiveControlTlvs , reply_path : Option < BlindedMessagePath > , message : T } ,
124117}
125118
126119/// The contents of an [`OnionMessage`] as read from the wire.
@@ -225,12 +218,12 @@ impl<T: OnionMessageContents> Writeable for (Payload<T>, [u8; 32]) {
225218 fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
226219 match & self . 0 {
227220 Payload :: Forward ( ForwardControlTlvs :: Blinded ( encrypted_bytes) ) => {
228- _encode_varint_length_prefixed_tlv ! ( w, {
229- ( 4 , * encrypted_bytes, required_vec)
230- } )
221+ _encode_varint_length_prefixed_tlv ! ( w, { ( 4 , * encrypted_bytes, required_vec) } )
231222 } ,
232223 Payload :: Receive {
233- control_tlvs : ReceiveControlTlvs :: Blinded ( encrypted_bytes) , reply_path, message,
224+ control_tlvs : ReceiveControlTlvs :: Blinded ( encrypted_bytes) ,
225+ reply_path,
226+ message,
234227 } => {
235228 _encode_varint_length_prefixed_tlv ! ( w, {
236229 ( 2 , reply_path, option) ,
@@ -240,12 +233,12 @@ impl<T: OnionMessageContents> Writeable for (Payload<T>, [u8; 32]) {
240233 } ,
241234 Payload :: Forward ( ForwardControlTlvs :: Unblinded ( control_tlvs) ) => {
242235 let write_adapter = ChaChaPolyWriteAdapter :: new ( self . 1 , & control_tlvs) ;
243- _encode_varint_length_prefixed_tlv ! ( w, {
244- ( 4 , write_adapter, required)
245- } )
236+ _encode_varint_length_prefixed_tlv ! ( w, { ( 4 , write_adapter, required) } )
246237 } ,
247238 Payload :: Receive {
248- control_tlvs : ReceiveControlTlvs :: Unblinded ( control_tlvs) , reply_path, message,
239+ control_tlvs : ReceiveControlTlvs :: Unblinded ( control_tlvs) ,
240+ reply_path,
241+ message,
249242 } => {
250243 let write_adapter = ChaChaPolyWriteAdapter :: new ( self . 1 , & control_tlvs) ;
251244 _encode_varint_length_prefixed_tlv ! ( w, {
@@ -261,7 +254,8 @@ impl<T: OnionMessageContents> Writeable for (Payload<T>, [u8; 32]) {
261254
262255// Uses the provided secret to simultaneously decode and decrypt the control TLVs and data TLV.
263256impl < H : CustomOnionMessageHandler + ?Sized , L : Logger + ?Sized > ReadableArgs < ( SharedSecret , & H , & L ) >
264- for Payload < ParsedOnionMessageContents < <H as CustomOnionMessageHandler >:: CustomMessage > > {
257+ for Payload < ParsedOnionMessageContents < <H as CustomOnionMessageHandler >:: CustomMessage > >
258+ {
265259 fn read < R : Read > ( r : & mut R , args : ( SharedSecret , & H , & L ) ) -> Result < Self , DecodeError > {
266260 let ( encrypted_tlvs_ss, handler, logger) = args;
267261
@@ -311,13 +305,13 @@ for Payload<ParsedOnionMessageContents<<H as CustomOnionMessageHandler>::CustomM
311305
312306 match read_adapter {
313307 None => return Err ( DecodeError :: InvalidValue ) ,
314- Some ( ChaChaPolyReadAdapter { readable : ControlTlvs :: Forward ( tlvs) } ) => {
308+ Some ( ChaChaPolyReadAdapter { readable : ControlTlvs :: Forward ( tlvs) } ) => {
315309 if message_type. is_some ( ) {
316- return Err ( DecodeError :: InvalidValue )
310+ return Err ( DecodeError :: InvalidValue ) ;
317311 }
318312 Ok ( Payload :: Forward ( ForwardControlTlvs :: Unblinded ( tlvs) ) )
319313 } ,
320- Some ( ChaChaPolyReadAdapter { readable : ControlTlvs :: Receive ( tlvs) } ) => {
314+ Some ( ChaChaPolyReadAdapter { readable : ControlTlvs :: Receive ( tlvs) } ) => {
321315 Ok ( Payload :: Receive {
322316 control_tlvs : ReceiveControlTlvs :: Unblinded ( tlvs) ,
323317 reply_path,
@@ -366,11 +360,9 @@ impl Readable for ControlTlvs {
366360 next_blinding_override,
367361 } )
368362 } else if valid_recv_fmt {
369- ControlTlvs :: Receive ( ReceiveTlvs {
370- context,
371- } )
363+ ControlTlvs :: Receive ( ReceiveTlvs { context } )
372364 } else {
373- return Err ( DecodeError :: InvalidValue )
365+ return Err ( DecodeError :: InvalidValue ) ;
374366 } ;
375367
376368 Ok ( payload_fmt)
0 commit comments