Files
guara/crates/guara-core/src/hashing.rs
T
Lucas RayanandClaude Sonnet 5.5 45d535bdb7
Release / Cria a release (push) Canceled after 0s
Release / CLI (linux-aarch64) (push) Canceled after 0s
Release / CLI (linux-x86_64) (push) Canceled after 0s
Release / CLI (macos-aarch64) (push) Canceled after 0s
Release / CLI (macos-x86_64) (push) Canceled after 0s
Release / CLI (windows-x86_64) (push) Canceled after 0s
Release / App desktop (linux-x86_64) (push) Canceled after 0s
Release / App desktop (macos-aarch64) (push) Canceled after 0s
Release / App desktop (macos-x86_64) (push) Canceled after 0s
Release / App desktop (windows-x86_64) (push) Canceled after 0s
Release / Publica a release (push) Canceled after 0s
feat: explorador de arquivos, miniaturas, metadados e recursos periciais (0.3.0)
- Explorador com grade/lista virtualizada, navegação por tipo, data EXIF, pasta e
  câmera, seleção estilo gerenciador de arquivos e visualização rápida.
- Miniaturas no núcleo, metadados (EXIF, PDF, Office, MP4), datas MACB do NTFS/FAT/exFAT.
- Hashes MD5/SHA-1/SHA-256, busca de texto no disco, exportação CSV, relatório HTML,
  detecção de duplicadas, tema, correções de interface e textos sem travessões.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 16:16:20 -03:00

46 lines
1.1 KiB
Rust

//! Hashes de integridade usados em perícia: MD5, SHA-1 e SHA-256 numa única passada.
use md5::Md5;
use serde::{Deserialize, Serialize};
use sha1::Sha1;
use sha2::{Digest, Sha256};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Hashes {
pub md5: String,
pub sha1: String,
pub sha256: String,
}
#[derive(Default)]
pub struct MultiHasher {
md5: Md5,
sha1: Sha1,
sha256: Sha256,
}
impl MultiHasher {
pub fn new() -> Self {
Self::default()
}
pub fn update(&mut self, data: &[u8]) {
self.md5.update(data);
self.sha1.update(data);
self.sha256.update(data);
}
pub fn finalize(self) -> Hashes {
let hex = |b: &[u8]| b.iter().map(|x| format!("{x:02x}")).collect::<String>();
Hashes {
md5: hex(&self.md5.finalize()),
sha1: hex(&self.sha1.finalize()),
sha256: hex(&self.sha256.finalize()),
}
}
}
pub fn hash_bytes(data: &[u8]) -> Hashes {
let mut h = MultiHasher::new();
h.update(data);
h.finalize()
}