mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2025-12-11 20:15:30 +01:00
More tweaks on crypto crate
This commit is contained in:
parent
ea521095a3
commit
3f4d18fd9c
@ -117,7 +117,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn one_shot_test() {
|
fn one_shot_test() {
|
||||||
use super::super::{decrypt::OneShotDecryption, encrypt::OneShotEncryption};
|
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; \
|
let message = b"Eu queria um apartamento no Guarujah; \
|
||||||
Mas o melhor que eu consegui foi um barraco em Itaquah.";
|
Mas o melhor que eu consegui foi um barraco em Itaquah.";
|
||||||
@ -161,12 +161,12 @@ mod tests {
|
|||||||
E como aquele ditado que jah dizia; \
|
E como aquele ditado que jah dizia; \
|
||||||
Pau que nasce torto mija fora da bacia";
|
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]
|
#[tokio::test]
|
||||||
async fn stream_test_big() {
|
async fn stream_test_big() {
|
||||||
let mut rng = CryptoRng::new();
|
let mut rng = CryptoRng::new().unwrap();
|
||||||
|
|
||||||
let mut message =
|
let mut message =
|
||||||
vec![0u8; EncryptedBlock::PLAIN_TEXT_SIZE * 10 + EncryptedBlock::PLAIN_TEXT_SIZE / 2];
|
vec![0u8; EncryptedBlock::PLAIN_TEXT_SIZE * 10 + EncryptedBlock::PLAIN_TEXT_SIZE / 2];
|
||||||
@ -178,7 +178,7 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn stream_test_big_exact() {
|
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];
|
let mut message = vec![0u8; EncryptedBlock::PLAIN_TEXT_SIZE * 20];
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,7 @@ pub async fn erase<RW>(stream: &mut RW, size: usize, passes: usize) -> Result<us
|
|||||||
where
|
where
|
||||||
RW: AsyncReadExt + AsyncWriteExt + AsyncSeekExt + Unpin + Send,
|
RW: AsyncReadExt + AsyncWriteExt + AsyncSeekExt + Unpin + Send,
|
||||||
{
|
{
|
||||||
let mut rng = CryptoRng::new();
|
let mut rng = CryptoRng::new()?;
|
||||||
|
|
||||||
let mut buf = vec![0u8; BLOCK_LEN].into_boxed_slice();
|
let mut buf = vec![0u8; BLOCK_LEN].into_boxed_slice();
|
||||||
let mut end_buf = vec![0u8; size % BLOCK_LEN].into_boxed_slice();
|
let mut end_buf = vec![0u8; size % BLOCK_LEN].into_boxed_slice();
|
||||||
@ -87,7 +87,7 @@ pub fn erase_sync<RW>(stream: &mut RW, size: usize, passes: usize) -> Result<usi
|
|||||||
where
|
where
|
||||||
RW: Read + Write + Seek,
|
RW: Read + Write + Seek,
|
||||||
{
|
{
|
||||||
let mut rng = CryptoRng::new();
|
let mut rng = CryptoRng::new()?;
|
||||||
|
|
||||||
let mut buf = vec![0u8; BLOCK_LEN].into_boxed_slice();
|
let mut buf = vec![0u8; BLOCK_LEN].into_boxed_slice();
|
||||||
let mut end_buf = vec![0u8; size % BLOCK_LEN].into_boxed_slice();
|
let mut end_buf = vec![0u8; size % BLOCK_LEN].into_boxed_slice();
|
||||||
|
|||||||
@ -5,7 +5,6 @@ use tokio::io;
|
|||||||
/// This enum defines all possible errors that this crate can give
|
/// This enum defines all possible errors that this crate can give
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
// crypto errors
|
|
||||||
#[error("Block too big for oneshot encryption: size in bytes = {0}")]
|
#[error("Block too big for oneshot encryption: size in bytes = {0}")]
|
||||||
BlockTooBig(usize),
|
BlockTooBig(usize),
|
||||||
|
|
||||||
@ -16,6 +15,7 @@ pub enum Error {
|
|||||||
#[error("Decryption error")]
|
#[error("Decryption error")]
|
||||||
Decrypt,
|
Decrypt,
|
||||||
|
|
||||||
|
/// I/O error while encrypting
|
||||||
#[error("I/O error while encrypting: {{context: {context}, source: {source}}}")]
|
#[error("I/O error while encrypting: {{context: {context}, source: {source}}}")]
|
||||||
EncryptIo {
|
EncryptIo {
|
||||||
context: &'static str,
|
context: &'static str,
|
||||||
@ -29,6 +29,7 @@ pub enum Error {
|
|||||||
source: io::Error,
|
source: io::Error,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// I/O error while erasing a file
|
||||||
#[error("I/O error while erasing: {{context: {context}, source: {source}}}")]
|
#[error("I/O error while erasing: {{context: {context}, source: {source}}}")]
|
||||||
EraseIo {
|
EraseIo {
|
||||||
context: &'static str,
|
context: &'static str,
|
||||||
@ -38,4 +39,7 @@ pub enum Error {
|
|||||||
|
|
||||||
#[error("hex error: {0}")]
|
#[error("hex error: {0}")]
|
||||||
Hex(#[from] hex::FromHexError),
|
Hex(#[from] hex::FromHexError),
|
||||||
|
|
||||||
|
#[error("Entropy source error: {0}")]
|
||||||
|
EntropySource(#[from] rand_core::getrandom::Error),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,3 +40,5 @@ pub mod rng;
|
|||||||
pub use error::Error;
|
pub use error::Error;
|
||||||
pub use protected::Protected;
|
pub use protected::Protected;
|
||||||
pub use rng::CryptoRng;
|
pub use rng::CryptoRng;
|
||||||
|
|
||||||
|
pub use rand_core::{RngCore, SeedableRng};
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
use crate::Error;
|
||||||
|
|
||||||
use rand::RngCore;
|
use rand::RngCore;
|
||||||
use rand_chacha::ChaCha20Rng;
|
use rand_chacha::ChaCha20Rng;
|
||||||
use rand_core::{impl_try_crypto_rng_from_crypto_rng, SeedableRng};
|
use rand_core::{impl_try_crypto_rng_from_crypto_rng, SeedableRng};
|
||||||
@ -14,9 +16,8 @@ impl CryptoRng {
|
|||||||
/// This creates a new [`ChaCha20Rng`]-backed [`rand::CryptoRng`] from entropy
|
/// This creates a new [`ChaCha20Rng`]-backed [`rand::CryptoRng`] from entropy
|
||||||
/// (via the [getrandom](https://docs.rs/getrandom) crate).
|
/// (via the [getrandom](https://docs.rs/getrandom) crate).
|
||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
pub fn new() -> Result<Self, Error> {
|
||||||
pub fn new() -> Self {
|
ChaCha20Rng::try_from_os_rng().map(Self).map_err(Into::into)
|
||||||
Self(ChaCha20Rng::from_os_rng())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to generate completely random bytes, with the use of [`ChaCha20Rng`]
|
/// 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 = <ChaCha20Rng as SeedableRng>::Seed;
|
||||||
|
|
||||||
|
fn from_seed(seed: Self::Seed) -> Self {
|
||||||
|
Self(ChaCha20Rng::from_seed(seed))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Zeroize for CryptoRng {
|
impl Zeroize for CryptoRng {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn zeroize(&mut self) {
|
fn zeroize(&mut self) {
|
||||||
self.0 = ChaCha20Rng::from_os_rng();
|
let mut seed = <Self as SeedableRng>::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_try_crypto_rng_from_crypto_rng!(CryptoRng);
|
||||||
|
|
||||||
impl Default for CryptoRng {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Drop for CryptoRng {
|
impl Drop for CryptoRng {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user