AFF4: leitura (snappy/deflate/LZ4, mapas esparsos) e gravação; CLI --format aff4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Sonnet 5.5 committed 2026-10-19 00:11:36 -03:00
1 parent b02bbcb7d6
commit b89d5dd490
8 files changed
+846 -4

No files matched your search

+22
View File
@@ -48,6 +48,17 @@ pub enum ImageFormat {
#[serde(default = "default_compression")]
compression: u32,
},
/// AFF4 (padrão v1.0, blocos snappy).
Aff4 {
#[serde(default)]
case_number: String,
#[serde(default)]
examiner: String,
#[serde(default)]
evidence_number: String,
#[serde(default)]
notes: String,
},
}
fn default_segment_mib() -> u64 {
@@ -66,6 +77,17 @@ pub fn create_image_as(
) -> Result<ImageReport> {
match format {
ImageFormat::Raw => create_image(src, dest, cancelled, progress),
ImageFormat::Aff4 { case_number, examiner, evidence_number, notes } => {
let opts = crate::aff4::Aff4Options {
case_name: case_number.clone(),
examiner: examiner.clone(),
notes: notes.clone(),
evidence_number: evidence_number.clone(),
..Default::default()
};
let dest = if dest.extension().map_or(false, |e| e.eq_ignore_ascii_case("aff4")) { dest.to_path_buf() } else { dest.with_extension("aff4") };
crate::aff4::write_aff4(src, &dest, &opts, cancelled, progress)
}
ImageFormat::E01 { case_number, description, evidence_number, examiner, notes, segment_mib, compression } => {
let opts = crate::ewf::E01Options {
case_number: case_number.clone(),