keyhog-scanner 0.5.40

keyhog-scanner: high-performance SIMD-accelerated secret detection engine
Documentation
use keyhog_core::{Chunk, ChunkMetadata, DetectorSpec, PatternSpec, Severity};
use keyhog_scanner::CompiledScanner;

fn main() -> Result<(), keyhog_scanner::ScanError> {
    let scanner = CompiledScanner::compile(vec![DetectorSpec {
        tests: Vec::new(),
        id: "demo-token".into(),
        name: "Demo Token".into(),
        service: "demo".into(),
        severity: Severity::High,
        patterns: vec![PatternSpec {
            regex: "demo_[A-Z0-9]{8}".into(),
            description: None,
            group: None,
            client_safe: false,
        }],
        companions: Vec::new(),
        verify: None,
        keywords: vec!["demo_".into()],
        min_confidence: None,
    }])?;

    let matches = scanner.scan(&Chunk {
        data: "TOKEN=demo_ABC12345".into(),
        metadata: ChunkMetadata {
            base_offset: 0,
            base_line: 0,
            source_type: "example".into(),
            path: Some("example.env".into()),
            commit: None,
            author: None,
            date: None,
            mtime_ns: None,
            size_bytes: None,
        },
    });

    println!(
        "detectors={} patterns={}",
        scanner.detector_count(),
        scanner.pattern_count()
    );
    println!("matches={}", matches.len());
    Ok(())
}