Sha_256
A fast implementation of sha-256 in rust.
Features
- Partially unrolled loops for increased efficiency from cpu cache usage
- Bypass rust safety checks to eliminate array index safety checks
- Only use stack memory to avoid
malloccalls - Minimised memory footprint via array reuse across multiple stages of sha256
- No memory reallocation, so subsequent calls to sha256 reuse memory
- Optimised memory layout for increased cpu cache hits
- No needless byte array conversion (e.g. u8a to u32a)
- Pure rust, no fancy embedded assembly language or specific cpu instructions
- No dependencies
- No std requirements
Installation
In your project, run:
Usage
Import the library
use Sha256;
Create an instance of the sha256 struct.
let mut sha256: Sha256 = new;
Create your message in bytes.
let bytes = &;
Run sha256 to create a digest/hash.
let hash: = sha256.digest;
The general idea is "bytes in, bytes out". This is the most efficient input and output type to minimise conversions.
You will need to convert your input into bytes, e.g. string to bytes. See example project.
If you want the hash as a hex string you will need to convert it from bytes to hex afterwards. See example project.
Benchmark
How fast is this library? Up to 25% faster than the sha256 and sha. They contain use of Intel's SHA-NI cpu instructions (via a feature flag), whereas this library uses pure rust.
However, the above figures were obtained through some rough benchmarks on only my hardware. More thorough benchmarks are required, YMMV!
// TODO further benchmarks