use crate::types::{AeadAlg, KdfAlg, KdfParams};
use serde::{Deserialize, Serialize};
pub const MAGIC: &[u8; 8] = b"ENCFILE\0";
pub const VERSION: u16 = 2;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamInfo {
pub chunk_size: u32,
pub nonce_prefix: Vec<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_id: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiskHeader {
pub magic: [u8; 8],
pub version: u16,
pub aead_alg: u8,
pub kdf_alg: u8,
pub kdf_params: KdfParams,
pub nonce: Vec<u8>,
pub salt: Vec<u8>,
pub ct_len: u64,
pub stream: Option<StreamInfo>,
}
impl DiskHeader {
pub fn new_nonstream(
aead_alg: AeadAlg,
kdf_alg: KdfAlg,
kdf_params: KdfParams,
salt: Vec<u8>,
nonce: Vec<u8>,
ct_len: u64,
) -> Self {
Self {
magic: *MAGIC,
version: VERSION,
aead_alg: aead_alg as u8,
kdf_alg: kdf_alg as u8,
kdf_params,
nonce,
salt,
ct_len,
stream: None,
}
}
pub fn new_stream(
aead_alg: AeadAlg,
kdf_alg: KdfAlg,
kdf_params: KdfParams,
salt: Vec<u8>,
stream: StreamInfo,
) -> Self {
Self {
magic: *MAGIC,
version: VERSION,
aead_alg: aead_alg as u8,
kdf_alg: kdf_alg as u8,
kdf_params,
nonce: Vec::new(), salt,
ct_len: 0, stream: Some(stream),
}
}
}