| buffer.rs |
A highly optimized version of SeaHash. |
13489 |
- |
| helper.rs |
Helper functions. |
4493 |
- |
| impl_std.rs |
|
830 |
- |
| lib.rs |
|
8226 |
- |
| reference.rs |
A slow, but clear reference implementation of SeaHash.
# Specification
The input buffer is padded with null bytes until the length is divisible by 8.
We start out with state
```notest
a = 0x16f11fe89b0d677c
b = 0xb480a793d8e6c86c
c = 0x6fe2e5aaf078ebc9
d = 0x14f994a4c5259381
```
If a seed is given, each of the initial state component are modularly multiplied by the seed.
From the stream, we read one 64-bit block (in little-endian) at a time. This number, `n`,
determines the new state by:
```notest
a' = b
b' = c
c' = d
d' = g(a ⊕ n)
```
`g(x)` is defined as `g(x) = j(h(j(x)))` with `h(x) = (x ≫ 32) ≫ (x ≫ 60)` and `j(x) ≡ px (mod
2^64)` with `p = 0x7ed0e9fa0d94a33`.
Let the final state be `(x, y, z, w)`. Then the final result is given by `H = g(x ⊕ y ⊕ z ⊕ w ⊕
l)` where `l` is the number of bytes in the original buffer. |
4311 |
- |
| stream.rs |
|
9958 |
- |