Crate rs_shake256

source ·
Expand description

SHAKE256 rs_shake256 - Secure Hash Algorithm KECCAK-based variant

The SHAKE256 hash function is part of the SHA-3 family, which was developed by the National Institute of Standards and Technology (NIST). It’s an Extendable Output Function (XOF), meaning it can generate a hash value of any length.

SHAKE256 is suitable for a range of cryptographic purposes, including generating unique identifiers and ensuring data integrity. It has not been deprecated for any uses and remains one of the most versatile hash functions available.

Usage

The crate provides a simple and intuitive API. Users can create a new SHAKE256 hasher instance, update it with input data, and finalize to get the resultant hash.

Example

Here is an example of how to use the SHAKE256 hash function in Rust:

let mut shake256hasher = Shake256State::<20>::default().build_hasher();
shake256hasher.write(b"hello world");
let result = shake256hasher.finish();
assert_eq!(result, 0x369771BB2CB9D2B0);

Or, as a HashSet:

let hello = "hello";
let shake256state = Shake256State::<20>::default();
let mut shake256hasher1 = shake256state.build_hasher();
let mut shake256hasher2 = shake256state.build_hasher();
let mut shake256hasher3 = shake256state.build_hasher();

shake256hasher1.write(hello.as_bytes());
hello.hash(&mut shake256hasher2);
shake256hasher3.write(hello.as_bytes());
shake256hasher3.write(&[0xFF]);

let u64result1 = shake256hasher1.finish();
let u64result2 = shake256hasher2.finish();
let u64result3 = shake256hasher3.finish();

assert_eq!(u64result1, 0x1234075AE4A1E773);
assert_eq!(u64result2, 0xC420BC53338A657A);
assert_eq!(u64result2, u64result3);
assert_ne!(u64result1, u64result2);

Use Cases

SHAKE256 is recommended for a wide variety of tasks, including:

  • Cryptographic security, due to its resistance to collision attacks.
  • Creating unique identifiers for data.
  • Ensuring data integrity in situations where a variable-length hash is beneficial.

NIST recommends SHAKE256 for cryptographic functions due to its security and versatility. Its extendable output makes it particularly suitable when a variable-length hash is required.

Structs

  • Shake256Hasher is a type that provides the SHAKE256 hashing algorithm in Rust.
  • Shake256State represents the state of a SHAKE256 hashing process.

Traits

  • Overloads the finish Hasher method for a version that mutates itself