@@ -127,7 +127,7 @@ pub static CHACHA20: HPAlgorithm = HPAlgorithm {
127127} ;
128128
129129fn init_hp_chacha20_cipher ( key : & [ u8 ] ) -> Result < Cipher , Error > {
130- let chacha_cipher = ChaChaCipher :: new ( None ) ?;
130+ let mut chacha_cipher = ChaChaCipher :: new ( None ) ?;
131131 chacha_cipher. set_key ( key) ?;
132132 Ok ( Cipher :: ChaCha20 ( chacha_cipher) )
133133}
@@ -696,7 +696,7 @@ impl ChaChaCipher {
696696 }
697697 }
698698
699- fn set_key ( & self , key : & [ u8 ] ) -> Result < ( ) , Error > {
699+ fn set_key ( & mut self , key : & [ u8 ] ) -> Result < ( ) , Error > {
700700 if key. len ( ) != CHACHA_KEY_LEN {
701701 return Err ( Error :: General ( "Invalid key length" . into ( ) ) ) ;
702702 }
@@ -709,6 +709,10 @@ impl ChaChaCipher {
709709 unsafe { wc_Chacha_SetKey ( chacha_cipher. as_ptr ( ) , key. as_ptr ( ) , key. len ( ) as word32 ) } ;
710710 check_if_zero ( ret)
711711 . map_err ( |_| rustls:: Error :: General ( "Function wc_Chacha_SetKey failed" . into ( ) ) ) ?;
712+ self . key = Some (
713+ key. try_into ( )
714+ . map_err ( |_| Error :: General ( "Key must be exactly 32 bytes" . into ( ) ) ) ?,
715+ ) ;
712716 Ok ( ( ) )
713717 }
714718
@@ -1636,7 +1640,7 @@ mod tests {
16361640 mask : hex ! ( "6409a6196d" ) ,
16371641 } ;
16381642
1639- let chacha_cipher = crate :: aead:: quic:: ChaChaCipher :: new ( None ) . unwrap ( ) ;
1643+ let mut chacha_cipher = crate :: aead:: quic:: ChaChaCipher :: new ( None ) . unwrap ( ) ;
16401644 let mut mask = mask_array ! ( ) ;
16411645
16421646 let _ = chacha_cipher. set_key ( & test_vector. key ) ;
0 commit comments