@lib-q/hash
v0.0.2
Published
Post-quantum Hash Functions for Node.js (SHA-3, SHAKE, cSHAKE, KMAC, TupleHash, ParallelHash)
Maintainers
Readme
lib-q-hash
Post-quantum hash functions for lib-Q.
Features
- SHA-3: SHA3-224, SHA3-256, SHA3-384, SHA3-512
- SHAKE: SHAKE128, SHAKE256
- cSHAKE: Customizable SHAKE functions
- TurboSHAKE: Accelerated SHAKE variant
- KangarooTwelve: Fast hash function based on Keccak
- KMAC: Keyed Message Authentication Code (128/256)
- TupleHash: Tuple-based hashing (128/256)
- ParallelHash: Parallel processing for large data (128/256)
WebAssembly
The parallelhash feature enables Rayon and must not be used on wasm32-unknown-unknown; the crate fails to compile with that feature on WASM. Use serial builds for browser targets.
Usage
Basic Hashing
use lib_q_hash::{Sha3_256, Digest};
let mut hasher = Sha3_256::new();
hasher.update(b"Hello, world!");
let result = hasher.finalize();KMAC
use lib_q_hash::{Kmac128, digest::{Update, ExtendableOutput}};
let mut kmac = Kmac128::new(b"key", b"custom");
kmac.update(b"message");
let mut output = [0u8; 32];
kmac.finalize(&mut output);TupleHash
use lib_q_hash::{TupleHash128, digest::{Update, ExtendableOutput}};
let mut tuplehash = TupleHash128::new(b"custom");
let tuple = vec![b"first", b"second"];
tuplehash.update_tuple(&tuple);
let mut output = [0u8; 32];
tuplehash.finalize(&mut output);ParallelHash
use lib_q_hash::{ParallelHash128, digest::{Update, ExtendableOutput}};
let mut parallelhash = ParallelHash128::new(b"custom", 8192);
parallelhash.update(b"large data");
let mut output = [0u8; 32];
parallelhash.finalize(&mut output);State Serialization
use lib_q_hash::{Kmac128, digest::SerializableState};
let mut kmac = Kmac128::new(b"key", b"custom");
kmac.update(b"partial data");
let serialized = kmac.serialize();
let mut kmac2 = Kmac128::deserialize(&serialized).unwrap();
kmac2.update(b"more data");Features
default- Enables alloc and OID supportalloc- Heap allocation for dynamic output sizesoid- Object Identifier support for ASN.1zeroize- Secure memory wipingparallelhash- Rayon-based parallel processingasm- ARMv8 assembly optimizations
Workspace
lib-q-sha3, lib-q-keccak, and lib-q-k12 supply the Keccak/SHA-3 family implementations this crate integrates (see also lib-q-keccak-digest). ML-DSA and lattice crates consume the same XOF stack via those dependencies. Index: repository README.
License
Apache-2.0
Subresource integrity (SHA-384)
Paths in integrity-manifest.json are relative to the package root.
