[][src]Crate auditable_extract

Extracts the dependency tree information embedded in executables by the auditable crate.

This crate handles all binary format parsing for you and is designed to be resilient to malicious input. It is 100% safe Rust (including dependencies) and does not perform any heap allocations.

Usage

The following snippet demonstrates full extraction pipeline, including decompression using the safe-Rust miniz_oxide and optional JSON parsing via auditable-serde:

This example is not tested
use std::io::{Read, BufReader};
use std::{error::Error, fs::File, str::FromStr};

fn main() -> Result<(), Box<dyn Error>> {
    // Read the input
    let f = File::open("target/release/hello-auditable")?;
    let mut f = BufReader::new(f);
    let mut input_binary = Vec::new();
    f.read_to_end(&mut input_binary)?;
    // Extract the compressed audit data
    let compressed_audit_data = auditable_extract::raw_auditable_data(&input_binary)?;
    // Decompress it with your Zlib implementation of choice. We recommend miniz_oxide
    use miniz_oxide::inflate::decompress_to_vec_zlib;
    let decompressed_data = decompress_to_vec_zlib(&compressed_audit_data)
        .map_err(|_| "Failed to decompress audit data")?;
    let decompressed_data = String::from_utf8(decompressed_data)?;
    println!("{}", decompressed_data);
    // Parse the audit data to Rust data structures
    let dependency_tree = auditable_serde::VersionInfo::from_str(&decompressed_data);
    Ok(())
}

Enums

Error

Functions

raw_auditable_data

Extracts the Zlib-compressed dependency info from an executable.