AesWriter

Struct AesWriter 

Source
pub struct AesWriter<E: BlockEncryptor, W: Write> { /* private fields */ }
Expand description

Wraps a Write implementation with CBC based on given BlockEncryptor

§Examples

Write encrypted to a file.

let key: [u8; 16] = OsRng::new()?.gen();
let file = File::create("...")?;
let encryptor = AesSafe128Encryptor::new(&key);
let mut writer = AesWriter::new(file, encryptor)?;
writer.write_all("Hello World!".as_bytes())?;

Encrypt in-memory.

let key: [u8; 16] = OsRng::new()?.gen();
let encryptor = AesSafe128Encryptor::new(&key);
let mut encrypted = Vec::new();
{
    let mut writer = AesWriter::new(&mut encrypted, encryptor)?;
    writer.write_all("Hello World!".as_bytes())?;
}

Implementations§

Source§

impl<E: BlockEncryptor, W: Write> AesWriter<E, W>

Source

pub fn new(writer: W, enc: E) -> Result<AesWriter<E, W>>

Creates a new AesWriter with a random IV.

The IV will be written as first block of the file.

§Parameters
  • writer: Writer to write encrypted data into
  • enc: BlockEncryptor to use for encyrption
§Examples
let key: [u8; 16] = OsRng::new()?.gen();
let encryptor = AesSafe128Encryptor::new(&key);
let file = File::create("...")?;
let mut writer = AesWriter::new(file, encryptor)?;

Trait Implementations§

Source§

impl<E: BlockEncryptor, W: Write> Drop for AesWriter<E, W>

Source§

fn drop(&mut self)

Drops this AesWriter trying to finish encryption and to write everything to the underlying writer.

Source§

impl<E: BlockEncryptor, W: Write> Write for AesWriter<E, W>

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Encrypts the passed buffer and writes the result to the underlying writer.

Due to the blocksize of CBC not all data will be written instantaneously. For example if 17 bytes are passed, the first 16 will be encrypted as one block and written the underlying writer, but the last byte won’t be encrypted and written yet.

If flush has been called, this method will always return an error.

Source§

fn flush(&mut self) -> Result<()>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

Warning: When this method is called, the encryption will finish and insert final padding. After calling flush, this writer cannot be written to anymore and will always return an error.

1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

§

impl<E, W> Freeze for AesWriter<E, W>
where W: Freeze, E: Freeze,

§

impl<E, W> RefUnwindSafe for AesWriter<E, W>

§

impl<E, W> Send for AesWriter<E, W>
where W: Send, E: Send,

§

impl<E, W> Sync for AesWriter<E, W>
where W: Sync, E: Sync,

§

impl<E, W> Unpin for AesWriter<E, W>
where W: Unpin, E: Unpin,

§

impl<E, W> UnwindSafe for AesWriter<E, W>
where W: UnwindSafe, E: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.