11use crate :: crypto:: chacha20:: ChaCha20 ;
22use crate :: crypto:: chacha20poly1305rfc:: ChaCha20Poly1305RFC ;
33
4- use crate :: ln:: msgs:: DecodeError ;
5- use crate :: util:: ser:: { FixedLengthReader , LengthRead , LengthReadableArgs , Readable , Writeable , Writer } ;
64use crate :: io:: { self , Read , Write } ;
5+ use crate :: ln:: msgs:: DecodeError ;
6+ use crate :: util:: ser:: {
7+ FixedLengthReader , LengthRead , LengthReadableArgs , Readable , Writeable , Writer ,
8+ } ;
79
810pub ( crate ) struct ChaChaReader < ' a , R : io:: Read > {
911 pub chacha : & ' a mut ChaCha20 ,
@@ -58,7 +60,9 @@ impl<T: Readable> LengthReadableArgs<[u8; 32]> for ChaChaPolyReadAdapter<T> {
5860 // LengthRead must be used instead of std::io::Read because we need the total length to separate
5961 // out the tag at the end.
6062 fn read < R : LengthRead > ( r : & mut R , secret : [ u8 ; 32 ] ) -> Result < Self , DecodeError > {
61- if r. total_bytes ( ) < 16 { return Err ( DecodeError :: InvalidValue ) }
63+ if r. total_bytes ( ) < 16 {
64+ return Err ( DecodeError :: InvalidValue ) ;
65+ }
6266
6367 let mut chacha = ChaCha20Poly1305RFC :: new ( & secret, & [ 0 ; 12 ] , & [ ] ) ;
6468 let decrypted_len = r. total_bytes ( ) - 16 ;
@@ -70,14 +74,13 @@ impl<T: Readable> LengthReadableArgs<[u8; 32]> for ChaChaPolyReadAdapter<T> {
7074 let mut tag = [ 0 as u8 ; 16 ] ;
7175 r. read_exact ( & mut tag) ?;
7276 if !chacha. finish_and_check_tag ( & tag) {
73- return Err ( DecodeError :: InvalidValue )
77+ return Err ( DecodeError :: InvalidValue ) ;
7478 }
7579
7680 Ok ( Self { readable } )
7781 }
7882}
7983
80-
8184/// Enables simultaneously reading and decrypting a ChaCha20Poly1305RFC stream from a std::io::Read.
8285struct ChaChaPolyReader < ' a , R : Read > {
8386 pub chacha : & ' a mut ChaCha20Poly1305RFC ,
@@ -111,7 +114,9 @@ impl<'a, W: Writer> Writer for ChaChaPolyWriter<'a, W> {
111114 let mut src_idx = 0 ;
112115 while src_idx < src. len ( ) {
113116 let mut write_buffer = [ 0 ; 8192 ] ;
114- let bytes_written = ( & mut write_buffer[ ..] ) . write ( & src[ src_idx..] ) . expect ( "In-memory writes can't fail" ) ;
117+ let bytes_written = ( & mut write_buffer[ ..] )
118+ . write ( & src[ src_idx..] )
119+ . expect ( "In-memory writes can't fail" ) ;
115120 self . chacha . encrypt_in_place ( & mut write_buffer[ ..bytes_written] ) ;
116121 self . write . write_all ( & write_buffer[ ..bytes_written] ) ?;
117122 src_idx += bytes_written;
@@ -120,11 +125,10 @@ impl<'a, W: Writer> Writer for ChaChaPolyWriter<'a, W> {
120125 }
121126}
122127
123-
124128#[ cfg( test) ]
125129mod tests {
126- use crate :: ln:: msgs:: DecodeError ;
127130 use super :: { ChaChaPolyReadAdapter , ChaChaPolyWriteAdapter } ;
131+ use crate :: ln:: msgs:: DecodeError ;
128132 use crate :: util:: ser:: { self , FixedLengthReader , LengthReadableArgs , Writeable } ;
129133
130134 // Used for for testing various lengths of serialization.
@@ -155,34 +159,26 @@ mod tests {
155159
156160 // Now deserialize the object back and make sure it matches the original.
157161 let mut rd = FixedLengthReader :: new( encrypted_writeable, writeable_len) ;
158- let read_adapter = <ChaChaPolyReadAdapter <TestWriteable >>:: read( & mut rd, rho) . unwrap( ) ;
162+ let read_adapter =
163+ <ChaChaPolyReadAdapter <TestWriteable >>:: read( & mut rd, rho) . unwrap( ) ;
159164 assert_eq!( $obj, read_adapter. readable) ;
160165 } ;
161166 }
162167
163168 // Try a big object that will require multiple write buffers.
164- let big_writeable = TestWriteable {
165- field1 : vec ! [ 43 ] ,
166- field2 : vec ! [ 44 ; 4192 ] ,
167- field3 : vec ! [ 45 ; 4192 + 1 ] ,
168- } ;
169+ let big_writeable =
170+ TestWriteable { field1 : vec ! [ 43 ] , field2 : vec ! [ 44 ; 4192 ] , field3 : vec ! [ 45 ; 4192 + 1 ] } ;
169171 check_object_read_write ! ( big_writeable) ;
170172
171173 // Try a small object that fits into one write buffer.
172- let small_writeable = TestWriteable {
173- field1 : vec ! [ 43 ] ,
174- field2 : vec ! [ 44 ] ,
175- field3 : vec ! [ 45 ] ,
176- } ;
174+ let small_writeable =
175+ TestWriteable { field1 : vec ! [ 43 ] , field2 : vec ! [ 44 ] , field3 : vec ! [ 45 ] } ;
177176 check_object_read_write ! ( small_writeable) ;
178177 }
179178
180179 fn do_chacha_stream_adapters_ser_macros ( ) -> Result < ( ) , DecodeError > {
181- let writeable = TestWriteable {
182- field1 : vec ! [ 43 ] ,
183- field2 : vec ! [ 44 ; 4192 ] ,
184- field3 : vec ! [ 45 ; 4192 + 1 ] ,
185- } ;
180+ let writeable =
181+ TestWriteable { field1 : vec ! [ 43 ] , field2 : vec ! [ 44 ; 4192 ] , field3 : vec ! [ 45 ; 4192 + 1 ] } ;
186182
187183 // First, serialize the object into a TLV stream, encrypted with ChaCha20Poly1305.
188184 let rho = [ 42 ; 32 ] ;
0 commit comments