From c28410f6de9e290050e33017a70c4246fc151641 Mon Sep 17 00:00:00 2001 From: Simon Wicky Date: Wed, 2 Aug 2023 13:59:06 +0200 Subject: [PATCH] allow multiple messages decryption --- common/nymnoise/src/lib.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/common/nymnoise/src/lib.rs b/common/nymnoise/src/lib.rs index 356f3da059..95e6912ad0 100644 --- a/common/nymnoise/src/lib.rs +++ b/common/nymnoise/src/lib.rs @@ -96,26 +96,26 @@ impl AsyncRead for NoiseStream { } enc_storage.extend(&tcp_buf[..tcp_len]); //we can at least read the length - if enc_storage.len() >= HEADER_SIZE { + while enc_storage.len() >= HEADER_SIZE { let msg_len = ((enc_storage[0] as usize) << 8) + (enc_storage[1] as usize); - //we have a full message to decrypt - if enc_storage.len() >= HEADER_SIZE + msg_len { - //remove size - enc_storage.pop_front(); - enc_storage.pop_front(); - - let noise_msg = enc_storage.drain(..msg_len).collect::>(); - let mut dec_msg = vec![0u8; MAXMSGLEN]; - let len = match projected_self - .noise - .read_message(&noise_msg, &mut dec_msg) - { - Ok(len) => len, - Err(_) => return Poll::Ready(Err(ErrorKind::InvalidData.into())), - }; - projected_self.dec_storage.extend(&dec_msg[..len]); + //no more messages to read + if enc_storage.len() < HEADER_SIZE + msg_len { + break; } + //we have a full message to decrypt + //remove size + enc_storage.pop_front(); + enc_storage.pop_front(); + + let noise_msg = enc_storage.drain(..msg_len).collect::>(); + let mut dec_msg = vec![0u8; MAXMSGLEN]; + let len = match projected_self.noise.read_message(&noise_msg, &mut dec_msg) + { + Ok(len) => len, + Err(_) => return Poll::Ready(Err(ErrorKind::InvalidData.into())), + }; + projected_self.dec_storage.extend(&dec_msg[..len]); } } }