Discohash – Fast Hash
source link: https://github.com/cris691/discohash
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
:dancers: Discohash
Discohash( also known as BEBB4185 ) is a super simple and super fast hash that passes all of SMHasher, and runs at 2-5GB/s (depending on hardware) in this naive, portable, serial implementation.
Link to the SUPERCOP ECRYPT benchmark for bebb4185
CLI app included
Quick Facts
- A super-fast 64-bit hash.
- one of the fastest hashes ever benchmarked at ecrypt
- ECRYPT benchmark is 4x faster than BLAKE3
- Mix is super simple.
- Tested at ~ 5GB/s @ 3Gz, (Google Cloud Platform, N1 CPU)
- Passes all SMHasher tests.
- Also known as : BEBB4185
- Implemented in C++, and also a port to JS
- This repo includes a simple CLI app for hashing files or stdin from the command line.
Simplicity
The main 128-bit-to-128-bit mixing function is just this:
mix(const int A) { const int B = A+1; ds[A] *= P; ds[A] = rot(ds[A], 23); ds[A] *= Q; ds[B] ^= ds[A]; ds[B] *= P; ds[B] = rot(ds[B], 23); ds[B] *= Q; }
which is just multiplications by two 64-bit primes, P and Q, bit rotation, and xor.
P, and Q are:
- P = 0xFFFFFFFFFFFFFFFF - 58
- Q = 13166748625691186689
The internal state is 256-bits and the mixing function windows across that.
The standard digest is 64-bits, but you can modify it to take 128-bits if you want a cryptographically secure hash.
Using
Use the C code from this repository, either in your project or as a CL-app (included):
cd src ./build.sh ./bin/bebbsum < 0xa2a647993898a3df.txt > 0xa2a647993898a3df ./bin/bebbsum 0xa2a647993898a3df.txt > 0xa2a647993898a3df
or, for a JS implementation:
npm i --save bebb4185
Use in Node.JS:
import {discohash} from 'bebb4185'
Or using Snowpack as a webmodule:
import {discohash} from './web_modules/bebb4185.js';
Then call it:
const hash = discohash(string_or_typed_array_key, optional_seed);
JS Implementation
uint64_t
SMHasher verification value
The value is: BEBB4185
Possible future work
Make a parallel version using Merkle tree
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK