11use chacha20poly1305:: { aead:: generic_array:: GenericArray , AeadInPlace , ChaCha20Poly1305 , KeyInit } ;
2+ use crypto_bigint:: consts:: U12 ;
23
34use self :: p2p_network_noise_state:: ResponderConsumeOutput ;
45
@@ -9,6 +10,8 @@ use super::p2p_network_noise_state::{
910 P2pNetworkNoiseStateInner , P2pNetworkNoiseStateResponder , ResponderOutput ,
1011} ;
1112
13+ const MAX_CHUNK_SIZE : usize = u16:: MAX as usize - 19 ;
14+
1215impl P2pNetworkNoiseState {
1316 pub fn reducer ( & mut self , action : redux:: ActionWithMeta < & P2pNetworkNoiseAction > ) {
1417 match action. action ( ) {
@@ -68,6 +71,7 @@ impl P2pNetworkNoiseState {
6871 let mut offset = 0 ;
6972 loop {
7073 let buf = & self . buffer [ offset..] ;
74+ // TODO: add bug_condition
7175 let len = buf
7276 . get ( ..2 )
7377 . and_then ( |buf| Some ( u16:: from_be_bytes ( buf. try_into ( ) . ok ( ) ?) ) ) ;
@@ -189,22 +193,22 @@ impl P2pNetworkNoiseState {
189193 ..
190194 } => {
191195 let aead = ChaCha20Poly1305 :: new ( & send_key. 0 . into ( ) ) ;
192- let chunk_max_size = u16:: MAX as usize - 19 ;
193196 let mut chunks = vec ! [ ] ;
194197
195- for data in data. chunks ( chunk_max_size) {
196- let mut chunk = Vec :: with_capacity ( 18 + data. len ( ) ) ;
197- chunk. extend_from_slice ( & ( ( data. len ( ) + 16 ) as u16 ) . to_be_bytes ( ) ) ;
198- chunk. extend_from_slice ( data) ;
198+ for data_chunk in data. chunks ( MAX_CHUNK_SIZE ) {
199+ let mut chunk = Vec :: with_capacity ( 18 + data_chunk. len ( ) ) ;
200+ chunk
201+ . extend_from_slice ( & ( ( data_chunk. len ( ) + 16 ) as u16 ) . to_be_bytes ( ) ) ;
202+ chunk. extend_from_slice ( data_chunk) ;
199203
200- let mut nonce = GenericArray :: default ( ) ;
204+ let mut nonce: GenericArray < u8 , U12 > = GenericArray :: default ( ) ;
201205 nonce[ 4 ..] . clone_from_slice ( & send_nonce. to_le_bytes ( ) ) ;
202206 * send_nonce += 1 ;
203207
204208 let tag = aead. encrypt_in_place_detached (
205209 & nonce,
206210 & [ ] ,
207- & mut chunk[ 2 ..( 2 + data . len ( ) ) ] ,
211+ & mut chunk[ 2 ..( 2 + data_chunk . len ( ) ) ] ,
208212 ) ;
209213
210214 let tag = match tag {
0 commit comments