Skip to main content

Decrypter

Struct Decrypter 

Source
pub struct Decrypter<In>
where In: Read,
{ /* private fields */ }
Available on crate feature stream only.
Expand description

A streaming AES-GCM-SIV 256-bits decrypter.

Implements the Read trait to provide streaming, while internally keeping a buffer of the chunk to decrypt as a single message.

Note: The size of the chunk used must match the chunk size used by the Encrypter. The decryption will fail if there is a mismatch.

§Examples

use std::io::BufRead;

let key = get_key();
let decrypter = crypter::stream::Decrypter::new(&key, stdin())
   .expect("Failed to read from stdin");
let reader = std::io::BufReader::new(decrypter);

for line in reader.lines() {
    let line = line.expect("Failed to read from stdin");
    println!("{line}");
}

Implementations§

Source§

impl<In> Decrypter<In>
where In: Read,

Source

pub fn new<'k, Key>(key: Key, input: In) -> Result<Self>
where Key: Into<&'k Key<Aes256GcmSiv>>,

Creates a new Decrypter using the reader input and a default size DEFAULT_CHUNK decrypted with the cryptographic key key.

§Errors

When initializing, the Decrypter will read the first few bytes of input. If any error happens at that stage, this function will fail.

Source

pub fn new_with_password<Password>( password: Password, input: In, ) -> Result<Self>
where Password: AsRef<[u8]>,

Available on crate feature argon only.

Creates a new Decrypter using the reader input and a default size DEFAULT_CHUNK decrypted with the cryptographic key derived from password using Argon2.

§Errors
  • If the key derivation fails, an InvalidData is returned;
  • When initializing, the Decrypter will read the first few bytes of input. If any error happens at that stage, this function will fail.
Source

pub fn with_chunk<'k, Key>(key: Key, input: In, chunk: usize) -> Result<Self>
where Key: Into<&'k Key<Aes256GcmSiv>>,

Creates a new Decrypter using the reader input and a chunk size chunk decrypted with the cryptographic key key.

§Errors
  • If the value of chunk is less than 32, an InvalidInput is returned.
  • When initializing, the Decrypter will read the first few bytes of input. If any error happens at that stage, this function will fail.
Source

pub fn with_chunk_with_password<Password>( password: Password, input: In, chunk: usize, ) -> Result<Self>
where Password: AsRef<[u8]>,

Available on crate feature argon only.

Creates a new Decrypter using the reader input and a chunk size chunk decrypted with the cryptographic key derived from password using Argon2.

§Errors
  • If the value of chunk is less than 32, an InvalidInput is returned.
  • If the key derivation fails, an InvalidData is returned;
  • When initializing, the Decrypter will read the first few bytes of input. If any error happens at that stage, this function will fail.

Trait Implementations§

Source§

impl<In> Read for Decrypter<In>
where In: Read,

Source§

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

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

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

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

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

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

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

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_, u8>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact( &mut self, cursor: BorrowedCursor<'_, u8>, ) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. 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 Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

fn read_array<const N: usize>(&mut self) -> Result<[u8; N], Error>
where Self: Sized,

🔬This is a nightly-only experimental API. (read_array)
Read and return a fixed array of bytes from this source. Read more
Source§

fn read_le<T>(&mut self) -> Result<T, Error>
where T: FromEndianBytes, Self: Sized,

🔬This is a nightly-only experimental API. (read_le)
Read and return a type (e.g. an integer) in little-endian order. Read more
Source§

fn read_be<T>(&mut self) -> Result<T, Error>
where T: FromEndianBytes, Self: Sized,

🔬This is a nightly-only experimental API. (read_le)
Read and return a type (e.g. an integer) in big-endian order. Read more

Auto Trait Implementations§

§

impl<In> Freeze for Decrypter<In>
where In: Freeze,

§

impl<In> RefUnwindSafe for Decrypter<In>
where In: RefUnwindSafe,

§

impl<In> Send for Decrypter<In>
where In: Send,

§

impl<In> Sync for Decrypter<In>
where In: Sync,

§

impl<In> Unpin for Decrypter<In>
where In: Unpin,

§

impl<In> UnsafeUnpin for Decrypter<In>
where In: UnsafeUnpin,

§

impl<In> UnwindSafe for Decrypter<In>
where In: 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> Same for T

Source§

type Output = T

Should always be Self
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.