Expand description
Rust library for reading and writing Expert Witness Format forensic images.
ewf_image provides direct Rust APIs for working with Expert Witness Format
images. It can open physical, logical, SMART, and EWF2 segment families,
expose metadata and stored hashes, read the logical media stream, walk
logical single-file catalogs, and create EWF output. CLI and mount layers
are not currently implemented.
§Terminology
Logical media size is the decoded byte length exposed by Image::media_size
and ImageInfo::logical_size. Segment set size is the total byte length of
the opened EWF container files, as reported by Image::segment_set_size.
Chunks are the stored allocation units used by EWF tables. Logical EWF
images can also contain a single-file catalog, where each entry describes a
file-like object stored inside the image.
§Supported container families
- EWF1 physical
.E01/ EVF images. - EWF1 logical
.L01/ LVF images. - EWF1 SMART
.S01images. - EWF2 physical
.Ex01images. - EWF2 logical
.Lx01images.
§Reading
use std::io::Read;
fn main() -> ewf_image::Result<()> {
let image = ewf_image::Image::open("case.E01")?;
let info = image.info();
println!("{:?}: {} bytes", info.format, info.logical_size);
println!("segments: {}", image.number_of_segments());
let mut sector = vec![0; 512];
image.cursor().read_exact(&mut sector)?;
let mut later_sector = vec![0; 512];
image.read_at(&mut later_sector, 4096)?;
Ok(())
}§Metadata and hashes
fn main() -> ewf_image::Result<()> {
let image = ewf_image::Image::open("case.E01")?;
if let Some(case_number) = image.header_value("case_number") {
println!("case: {case_number}");
}
if let Some(md5) = image.hash_value("MD5") {
println!("stored MD5: {md5}");
}
#[cfg(feature = "verify")]
{
let verification = image.verify()?;
println!("MD5 match: {:?}", verification.md5_match);
println!("SHA1 match: {:?}", verification.sha1_match);
}
Ok(())
}§Writing
use std::fs::File;
fn main() -> ewf_image::Result<()> {
let mut input = File::open("disk.raw")?;
let mut options = ewf_image::WriteOptions::default();
options.format = ewf_image::WriteFormat::Ewf2Physical;
options.compression = ewf_image::WriteCompression::Zlib;
options.metadata.set_header_value("case_number", "CASE-001");
let mut writer = ewf_image::EwfWriter::create("case.Ex01", options)?;
std::io::copy(&mut input, &mut writer)?;
writer.finish()?;
Ok(())
}§Feature flags
verifyis enabled by default and addsImage::verify()plusVerifyResultfor streamed MD5/SHA1 verification. Stored hash parsing, EWF2 section integrity checks, and writer hash support are available without this feature.external-fixturesenables ignored integration tests that require local EWF corpora and external EWF tools. It does not change library behavior.
§Limitations
Encrypted EWF2 images are detected and rejected, but decryption and encrypted writing are not implemented. Secondary/shadow target mirroring is supported by the file-backed writer. Base-plus-overlay delta/shadow images are not implemented.
Structs§
- Acquisition
Error - Acquisition error range recorded in image metadata.
- Compression
Flags - Compression flags recorded in EWF metadata.
- Compression
Values - Compression level and flags recorded together.
- Data
Chunk - Decoded logical data chunk.
- Encoded
Data Chunk - Encoded data chunk as stored in an EWF segment.
- EwfMetadata
- Parsed case and acquisition metadata.
- EwfWriter
- Incremental EWF writer.
- Image
- Opened EWF image and logical media reader.
- Image
Cursor - Seekable cursor over an
Imagelogical media stream. - Image
Info - Parsed summary of an opened EWF image.
- Media
Flags - Media flags recorded for an image.
- Media
Info - Parsed media geometry and storage metadata.
- Memory
Extent - Memory acquisition extent recorded in pages.
- Open
Options - Options that control how an image is opened and read.
- Reader
Cache Info - Configured and observed payload bytes for one shared EWF reader cache set.
- Reader
Statistics - Cumulative performance counters for one shared EWF image reader.
- Sector
Range - Inclusive start plus count sector range.
- Segment
File Version - EWF2 segment file version.
- Single
File Attribute - Extended attribute for a logical single-file entry.
- Single
File Cursor - Seekable cursor over one logical single-file catalog entry.
- Single
File Entry - Entry in a logical single-file catalog.
- Single
File Extent - Data extent for a logical single-file entry.
- Single
File Permission - Access-control entry for a logical single-file entry.
- Single
File Permission Group - Access-control group for logical single-file entries.
- Single
File Source - Source record for logical single-file metadata.
- Single
File Subject - Subject record for logical single-file metadata.
- Single
Files AuxTables - Preserved auxiliary EWF2 single-file tables.
- Single
Files Info - Logical single-file catalog metadata.
- Stored
Hashes - Stored hash values parsed from an image.
- Verify
Result - Result of streamed logical media hash verification.
- Write
Compression Values - Compression settings for writer output.
- Write
Hashes - Hash values configured for writer output.
- Write
Media Profile - Media type and acquisition flags configured for writer output.
- Write
Options - Configuration used to create an
EwfWriter. - Write
Result - Result returned after finalizing writer output.
Enums§
- Chunk
Cache Capacity - Capacity policy for the decoded-chunk cache.
- Compression
Level - Compression level recorded in EWF metadata.
- Compression
Method - Compression method recorded for stored chunks.
- Data
Chunk Encoding - Encoding used for a data chunk payload.
- EwfError
- Error type used by EWF readers, writers, and probe helpers.
- Format
- Top-level EWF container generation.
- Format
Profile - Producer/profile inferred from EWF metadata and section layout.
- Header
Codepage - Codepage used for EWF1 textual header values.
- Header
Date Format - Formatting applied when returning parsed EWF header date values.
- Media
Type - Media type recorded for an image.
- Open
Strictness - Strictness used while opening an image.
- Single
File Entry Type - Type of a logical single-file catalog entry.
- Write
Compression - Compression method for writer output.
- Write
Compression Level - Compression level for writer output.
- Write
Format - Output EWF format selected for writing.
Constants§
- SINGLE_
FILE_ PATH_ SEPARATOR - Path separator used by EWF2 logical single-file catalogs.
Traits§
- Segment
Reader - Reader type accepted by
Image::open_readers.
Functions§
- check_
file_ corruption - Returns whether a single segment appears corrupt based on structural checks.
- check_
file_ encryption - Returns whether a file appears to be an encrypted EWF2 segment.
- check_
file_ signature - Returns whether a file starts with a recognized EWF segment signature.
- check_
segment_ files_ corruption - Returns whether a segment set appears corrupt based on structural checks.
- check_
segment_ files_ encryption - Returns whether any segment in a segment set appears to be encrypted.
Type Aliases§
- Result
- Result type returned by fallible
ewf_imageAPIs.