Rust port of the TLSH library. The code is kept close to the original C++ version, to limit bugs and help maintainability
This crate is no_std
and different configurations of bucket numbers and checksum length
are handled as generics, making every configuration properly optimized.
```rust // The default builder uses 128 buckets and a 1-byte checksum. // Other builders are also available. let mut builder = tlsh2::TlshDefaultBuilder::new(); builder.update(b"Sed ut perspiciatis unde omnis iste natus"); builder.update(b"error sit voluptatem accusantium"); let tlsh = builder.build() .okorelse(|| "could not generate TLSH from payload")?;
// Alternatively, a TLSH object can be generated directly from // a byte slice. let tlsh2 = tlsh2::TlshDefaultBuilder::buildfrom( b"odit aut fugit, sed quia consequuntur magni dolores" ).okor_else(|| "could not generate TLSH from second payload")?;
// Then, the TLSH object can be used to generated a hash or compute
// distances
asserteq!(
tlsh.hash(),
b"T184A022B383C2A2A20ACB0830880CF0202CCAC080033A023800338\
A30B0880AA8E0BE38".asslice(),
);
// The diff
feature is required for this computation.
assert_eq!(tlsh.diff(&tlsh2, true), 209);
```
Those configurations are available: - 128 buckets and 1-byte checksum (default). - 128 buckets and 3-byte checksum. - 256 buckets and 1-byte checksum. - 256 buckets and 3-byte checksum. - 48 buckets and 1-byte checksum.
The threaded
and private
options that exists in the original TLSH version
are not yet implemented.