Skip to main content

KeyMaterial

Struct KeyMaterial 

Source
pub struct KeyMaterial(/* private fields */);
Expand description

The secret bytes behind one encrypted file: the AES-256 file key, the four revision-6 salts (ISO 32000-2 §7.6.4.4.7, algorithms 8 and 9), and four random bytes for /Perms (Algorithm 10).

The bytes come from the operating system’s cryptographic generator and from nowhere else. There is no constructor taking a seed, a slice or a byte array, so a caller cannot substitute a derived sequence: an unguessable file key is a property of the type, not of the call site. Neither Clone nor Debug, so the bytes are neither duplicated across two files nor printed. Drop wipes them.

Implementations§

Source§

impl KeyMaterial

Source

pub fn from_os() -> Result<Self, Error>

Sixty-eight fresh bytes from the operating system.

§Errors

Error::NoEntropy when the platform’s generator is unavailable — the only outcome besides success, since a partial read is not one the underlying interface reports.

Trait Implementations§

Source§

impl Drop for KeyMaterial

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.