Skip to main content

FileHeader

Struct FileHeader 

Source
pub struct FileHeader { /* private fields */ }
Expand description

Complete v3 file header.

Differences from v2: the content is encrypted as a sequence of AEAD chunks (see crate::v3::stream) using a 16-byte nonce prefix stored here, and the bare filename ciphertext is replaced by an encrypted metadata envelope carrying the filename plus optional mtime and Unix mode. All fixed fields are authenticated as associated data via HeaderBinding, with distinct domains for metadata and content.

The struct holds only the header’s actual information content; the layout artifacts of the serialized form (magic, version byte, length fields) are computed during (de)serialization and never stored.

Serialized layout:

fieldsize
magic (“SHADOW”)6 bytes
version (3)1 byte
header_length4 bytes
salt16 bytes
kdf_memory4 bytes
kdf_iterations4 bytes
kdf_parallelism4 bytes
kdf_key_length1 byte
nonce_prefix16 bytes
chunk_size4 bytes
metadata_nonce24 bytes
metadata_ciphertext_length2 bytes
metadata_ciphertextvariable

Implementations§

Source§

impl FileHeader

Source

pub fn new( salt: [u8; 16], kdf_params: KeyDerivationParams, nonce_prefix: [u8; 16], chunk_size: u32, metadata_nonce: [u8; 24], metadata_ciphertext: Vec<u8>, ) -> Result<Self, HeaderError>

Builds a v3 header. Fails with HeaderError::MetadataTooLong if the metadata ciphertext does not fit the u16 length field, and with HeaderError::InvalidData for a chunk size outside 1..=MAX_ACCEPTED_CHUNK_SIZE.

Source

pub fn header_length(&self) -> usize

Total length of this header’s serialized form.

Source

pub fn serialize(&self) -> Vec<u8>

Source

pub fn try_deserialize(bytes: &[u8]) -> Result<FileHeader, HeaderError>

Source

pub fn salt(&self) -> &[u8; 16]

Source

pub fn kdf_params(&self) -> &KeyDerivationParams

The key derivation parameters recorded in this header.

Source

pub fn nonce_prefix(&self) -> &[u8; 16]

Source

pub fn chunk_size(&self) -> u32

Source

pub fn metadata_nonce(&self) -> &[u8; 24]

Source

pub fn metadata_ciphertext(&self) -> &[u8]

Source

pub fn decrypt_metadata( &self, key: &SecureKey, ) -> Result<FileMetadata, FileError>

Decrypts and parses the metadata envelope stored in this header, verifying the header binding under the metadata domain.

Source

pub fn binding(&self) -> HeaderBinding<'_>

The header binding used as associated data for this header’s AEAD operations.

Trait Implementations§

Source§

impl Clone for FileHeader

Source§

fn clone(&self) -> FileHeader

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FileHeader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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, <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.