use crate::error::VfsResult;
use crate::source::DynSource;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EncryptionScheme {
Bitlocker,
Luks1,
Luks2,
FileVault,
ApfsEncrypted,
VeraCrypt,
}
#[non_exhaustive]
#[derive(Debug, Clone)]
pub enum Credential {
Password(String),
RecoveryKey(String),
KeyBytes(Vec<u8>),
KeyFile(std::path::PathBuf),
}
pub trait CredentialSource: Send + Sync {
fn credentials_for(&self, scheme: EncryptionScheme, target: &str) -> Vec<Credential>;
}
pub trait EncryptionLayer: Send + Sync {
fn scheme(&self) -> EncryptionScheme;
fn open(&self, creds: &dyn CredentialSource) -> VfsResult<DynSource>;
#[cfg(feature = "findings")]
fn findings(&self) -> VfsResult<Vec<forensicnomicon::report::Finding>> {
Ok(Vec::new())
}
}