@@ -233,7 +233,11 @@ impl DecryptedReader {
233233 // EOF.
234234 return Ok ( None ) . into ( ) ;
235235 } else if header_buf. len ( ) != header_len {
236- return Err ( io:: Error :: new ( ErrorKind :: InvalidData , "header too short" ) ) . into ( ) ;
236+ return Err ( io:: Error :: new (
237+ ErrorKind :: Other ,
238+ format ! ( "header too short, {}B, should >= {}B" , header_buf. len( ) , header_len) ,
239+ ) )
240+ . into ( ) ;
237241 }
238242
239243 let ( salt, header_chunk) = header_buf. split_at_mut ( salt_len) ;
@@ -255,7 +259,14 @@ impl DecryptedReader {
255259 StreamType :: Server => 0 ,
256260 } ;
257261 if stream_ty != expected_stream_ty {
258- return Err ( io:: Error :: new ( ErrorKind :: Other , "invalid stream type" ) ) . into ( ) ;
262+ return Err ( io:: Error :: new (
263+ ErrorKind :: Other ,
264+ format ! (
265+ "invalid stream type {:#x}, expecting {:#x}" ,
266+ stream_ty, expected_stream_ty
267+ ) ,
268+ ) )
269+ . into ( ) ;
259270 }
260271
261272 let timestamp = header_reader. get_u64 ( ) ;
@@ -278,6 +289,14 @@ impl DecryptedReader {
278289
279290 let data_length = header_reader. get_u16 ( ) ;
280291
292+ trace ! (
293+ "got AEAD header stream_type: {}, timestamp: {}, length: {}, request_salt: {:?}" ,
294+ stream_ty,
295+ timestamp,
296+ data_length,
297+ self . request_salt. as_deref( ) . map( ByteStr :: new)
298+ ) ;
299+
281300 // Check repeated salt after first successful decryption #442
282301 //
283302 // If we check salt right here will allow attacker to flood our filter and eventually block all of our legitimate clients' requests.
0 commit comments