Skip to content

Commit 0685e4a

Browse files
committed
AEAD-2022 header check error with detailed message
1 parent 30c4b83 commit 0685e4a

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

crates/shadowsocks/src/relay/tcprelay/aead_2022.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)