From 42e004a23c1cb64d8a8bf386c46e610ef42cbd30 Mon Sep 17 00:00:00 2001 From: Ericson Soares Date: Thu, 15 Aug 2024 00:46:40 -0300 Subject: [PATCH] More tweaks on crypto crate --- crates/crypto/src/cloud/secret_key.rs | 8 ++++---- crates/crypto/src/erase.rs | 4 ++-- crates/crypto/src/error.rs | 6 +++++- crates/crypto/src/lib.rs | 2 ++ crates/crypto/src/rng/csprng.rs | 26 ++++++++++++++++---------- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/crates/crypto/src/cloud/secret_key.rs b/crates/crypto/src/cloud/secret_key.rs index dcef9e90e..9fbf78b21 100644 --- a/crates/crypto/src/cloud/secret_key.rs +++ b/crates/crypto/src/cloud/secret_key.rs @@ -117,7 +117,7 @@ mod tests { #[test] fn one_shot_test() { use super::super::{decrypt::OneShotDecryption, encrypt::OneShotEncryption}; - let mut rng = CryptoRng::new(); + let mut rng = CryptoRng::new().unwrap(); let message = b"Eu queria um apartamento no Guarujah; \ Mas o melhor que eu consegui foi um barraco em Itaquah."; @@ -161,12 +161,12 @@ mod tests { E como aquele ditado que jah dizia; \ Pau que nasce torto mija fora da bacia"; - stream_test(&mut CryptoRng::new(), message).await; + stream_test(&mut CryptoRng::new().unwrap(), message).await; } #[tokio::test] async fn stream_test_big() { - let mut rng = CryptoRng::new(); + let mut rng = CryptoRng::new().unwrap(); let mut message = vec![0u8; EncryptedBlock::PLAIN_TEXT_SIZE * 10 + EncryptedBlock::PLAIN_TEXT_SIZE / 2]; @@ -178,7 +178,7 @@ mod tests { #[tokio::test] async fn stream_test_big_exact() { - let mut rng = CryptoRng::new(); + let mut rng = CryptoRng::new().unwrap(); let mut message = vec![0u8; EncryptedBlock::PLAIN_TEXT_SIZE * 20]; diff --git a/crates/crypto/src/erase.rs b/crates/crypto/src/erase.rs index d13b7c086..f9a327f61 100644 --- a/crates/crypto/src/erase.rs +++ b/crates/crypto/src/erase.rs @@ -26,7 +26,7 @@ pub async fn erase(stream: &mut RW, size: usize, passes: usize) -> Result(stream: &mut RW, size: usize, passes: usize) -> Result Self { - Self(ChaCha20Rng::from_os_rng()) + pub fn new() -> Result { + ChaCha20Rng::try_from_os_rng().map(Self).map_err(Into::into) } /// Used to generate completely random bytes, with the use of [`ChaCha20Rng`] @@ -57,10 +58,21 @@ impl RngCore for CryptoRng { } } +impl SeedableRng for CryptoRng { + type Seed = ::Seed; + + fn from_seed(seed: Self::Seed) -> Self { + Self(ChaCha20Rng::from_seed(seed)) + } +} + impl Zeroize for CryptoRng { #[inline] fn zeroize(&mut self) { - self.0 = ChaCha20Rng::from_os_rng(); + let mut seed = ::Seed::default(); + self.0.fill_bytes(&mut seed); + + self.0 = ChaCha20Rng::from_seed(seed); } } @@ -68,12 +80,6 @@ impl rand::CryptoRng for CryptoRng {} impl_try_crypto_rng_from_crypto_rng!(CryptoRng); -impl Default for CryptoRng { - fn default() -> Self { - Self::new() - } -} - impl Drop for CryptoRng { #[inline] fn drop(&mut self) {