[−][src]Crate blake2
An implementation of the BLAKE2 hash functions.
Usage
Blake2b
can be used in the following way:
use blake2::{Blake2b, Blake2s, Digest}; // create a Blake2b object let mut hasher = Blake2b::new(); // write input message hasher.input(b"hello world"); // read hash digest and consume hasher let res = hasher.result(); assert_eq!(res[..], hex!(" 021ced8799296ceca557832ab941a50b4a11f83478cf141f51f933f653ab9fbc c05a037cddbed06e309bf334942c4e58cdf1a46e237911ccd7fcf9787cbc7fd0 ")[..]); // same example for `Blake2s`: let mut hasher = Blake2s::new(); hasher.input(b"hello world"); let res = hasher.result(); assert_eq!(res[..], hex!(" 9aec6806794561107e594b1f6a8a6b0c92a0cba9acf5e5e93cca06f781813b0b ")[..]);
Also see RustCrypto/hashes readme.
Variable output size
If you need variable sized output you can use VarBlake2b
and VarBlake2s
which support variable output sizes through VariableOutput
trait. Input
trait has to be imported as well.
use blake2::VarBlake2b; use blake2::digest::{Input, VariableOutput}; let mut hasher = VarBlake2b::new(10).unwrap(); hasher.input(b"my_input"); hasher.variable_result(|res| { assert_eq!(res, [44, 197, 92, 132, 228, 22, 146, 78, 100, 0]) })
Message Authentication Code (MAC)
BLAKE2 can be used as a MAC without any additional constructs:
use blake2::Blake2b; use blake2::crypto_mac::Mac; let mut hasher = Blake2b::new_varkey(b"my key").unwrap(); hasher.input(b"hello world"); // `result` has type `MacResult` which is a thin wrapper around array of // bytes for providing constant time equality check let result = hasher.result(); // To get underlying array use `code` method, but be carefull, since // incorrect use of the code value may permit timing attacks which defeat // the security provided by the `MacResult` let code_bytes = result.code(); // To verify the message it's recommended to use `verify` method let mut hasher = Blake2b::new_varkey(b"my key").unwrap(); hasher.input(b"hello world"); // `verify` return `Ok(())` if code is correct, `Err(MacError)` otherwise hasher.verify(&code_bytes).unwrap();
Acknowledgment
Based on the blake2-rfc crate.
Re-exports
pub extern crate digest; |
pub extern crate crypto_mac; |
Structs
Blake2b | Blake2b instance with a fixed output. |
Blake2s | Blake2s instance with a fixed output. |
VarBlake2b | Blake2b instance with a variable output. |
VarBlake2s | Blake2s instance with a variable output. |
Traits
Digest | The |