pub struct RollingHash { /* private fields */ }
Expand description

Hasher which computes a variant of 32-bit rolling hash as used in ssdeep.

In ssdeep, this is the most important hash function to decide whether to trigger a context update based on the last 7 bytes it met.

To be specific, RollingHash implements the rolling hash implemented in ssdeep version 2.13 or later. This is the first version which officially supported inputs larger than (or as large as) 4GiB and implemented a true rolling hash function.

Implementations§

source§

impl RollingHash

source

pub const WINDOW_SIZE: usize = 7usize

The window size of the rolling hash.

This is 7 bytes in ssdeep.

source

pub fn new() -> Self

Creates a new RollingHash with the initial value.

source

pub fn update_by_byte(&mut self, ch: u8) -> &mut Self

Updates the hash value by processing a byte.

source

pub fn update_by_iter(&mut self, iter: impl Iterator<Item = u8>) -> &mut Self

Updates the hash value by processing an iterator of u8.

source

pub fn update(&mut self, buf: &[u8]) -> &mut Self

Updates the hash value by processing a slice of u8.

source

pub fn value(&self) -> u32

Returns the current hash value.

Note that there’s no “finalization” on this rolling hash. You can even continue updating after reading the hash value.

This is the sum of its three internal states (h1, h2 and h3). See the source code and the private documentation for its mathematical details.

Trait Implementations§

source§

impl Debug for RollingHash

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for RollingHash

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.