RollingHash

Struct RollingHash 

Source
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.

Specifically, RollingHash implements the rolling hash implemented in ssdeep version 2.13 or later. This is the first version that officially supported ≧4GiB files 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 AddAssign<&[u8]> for RollingHash

Source§

fn add_assign(&mut self, buffer: &[u8])

Updates the hash value by processing a slice of u8.

Source§

impl<const N: usize> AddAssign<&[u8; N]> for RollingHash

Source§

fn add_assign(&mut self, buffer: &[u8; N])

Updates the hash value by processing an array of u8.

Source§

impl AddAssign<u8> for RollingHash

Source§

fn add_assign(&mut self, byte: u8)

Updates the hash value by processing a byte.

Source§

impl Clone for RollingHash

Source§

fn clone(&self) -> RollingHash

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
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
Source§

impl PartialEq for RollingHash

Source§

fn eq(&self, other: &RollingHash) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for RollingHash

Source§

impl Eq for RollingHash

Source§

impl StructuralPartialEq for RollingHash

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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 T
where 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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.