An implementation of the [SHA-2][1] cryptographic hash algorithms.
There are 6 standard algorithms specified in the SHA-2 standard:
* `Sha224`, which is the 32-bit `Sha256` algorithm with the result truncated
to 224 bits.
* `Sha256`, which is the 32-bit `Sha256` algorithm.
* `Sha384`, which is the 64-bit `Sha512` algorithm with the result truncated
to 384 bits.
* `Sha512`, which is the 64-bit `Sha512` algorithm.
* `Sha512Trunc224`, which is the 64-bit `Sha512` algorithm with the result
truncated to 224 bits.
* `Sha512Trunc256`, which is the 64-bit `Sha512` algorithm with the result
truncated to 256 bits.
Algorithmically, there are only 2 core algorithms: `Sha256` and `Sha512`.
All other algorithms are just applications of these with different initial
hash values, and truncated to different digest bit lengths.
# Usage
```rust
# #[macro_use] extern crate hex_literal;
# extern crate sha2;
# fn main() {
use sha2::{Sha256, Sha512, Digest};
// create a Sha256 object
let mut hasher = Sha256::new();
// write input message
hasher.input(b"hello world");
// read hash digest and consume hasher
let result = hasher.result();
assert_eq!(result[..], hex!("
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
")[..]);
// same for Sha512
let mut hasher = Sha512::new();
hasher.input(b"hello world");
let result = hasher.result();
assert_eq!(result[..], hex!("
309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f
989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
")[..]);
# }
```
Also see [RustCrypto/hashes][2] readme.
[1]: https://en.wikipedia.org/wiki/SHA-2
[2]: https://github.com/RustCrypto/hashes