Skip to content

Commit 8434956

Browse files
committed
Store raw key bytes of ChaCha object when setKey
1 parent 4cf5da9 commit 8434956

File tree

1 file changed

+7
-3
lines changed
  • rustls-wolfcrypt-provider/src/aead

1 file changed

+7
-3
lines changed

rustls-wolfcrypt-provider/src/aead/quic.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub static CHACHA20: HPAlgorithm = HPAlgorithm {
127127
};
128128

129129
fn 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

Comments
 (0)