Expand description
This crate provides an implementation of SHA-2 hash functions based on FIPS PUB 180-4: Secure Hash Standard.
§Setup
To use this crate, add the following entry to your Cargo.toml
file in the dependencies
section:
[dependencies]
chksum-hash-sha2 = "0.0.1"
Alternatively, you can use the cargo add
subcommand:
cargo add chksum-hash-sha2
§Batch Processing
The digest of known-size data can be calculated with the hash
function.
use chksum_hash_sha2::sha2_256;
let digest = sha2_256::hash("example data");
assert_eq!(
digest.to_hex_lowercase(),
"44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);
§Stream Processing
The digest of data streams can be calculated chunk-by-chunk with a consumer created by calling the default
function.
// Import all necessary items
use std::fs::File;
use std::io::Read;
use chksum_hash_sha2::sha2_512;
// Create a hash instance
let mut hash = sha2_512::default();
// Open a file and create a buffer for incoming data
let mut file = File::open(path)?;
let mut buffer = vec![0; 64];
// Iterate chunk by chunk
while let Ok(count) = file.read(&mut buffer) {
// EOF reached, exit loop
if count == 0 {
break;
}
// Update the hash with data
hash.update(&buffer[..count]);
}
// Calculate the digest
let digest = hash.digest();
// Cast the digest to hex and compare
assert_eq!(
digest.to_hex_lowercase(),
"ed59c5759a9ece516cec0c0623142d0e9fe70a27d750eee7fd38f4550d50addd873d0fa1a51fc823c1e3d5cada203f4a05d8325caacb7d3e0727a701f3f07e5f"
);
§Algorithms
§SHA-2 224
use chksum_hash_sha2::sha2_224;
let digest = sha2_224::hash("example data");
assert_eq!(
digest.to_hex_lowercase(),
"90382cbfda2656313ad61fd74b32ddfa4bcc118f660bd4fba9228ced"
);
§SHA-2 256
use chksum_hash_sha2::sha2_256;
let digest = sha2_256::hash("example data");
assert_eq!(
digest.to_hex_lowercase(),
"44752f37272e944fd2c913a35342eaccdd1aaf189bae50676b301ab213fc5061"
);
§SHA-2 384
use chksum_hash_sha2::sha2_384;
let digest = sha2_384::hash("example data");
assert_eq!(
digest.to_hex_lowercase(),
"12ecdfd463a85a301b7c29a43bf4b19cdfc6e5e86a5f40396aa6ae3368a7e5b0ed31f3bef2eb3071577ba610b4ed1cb8"
);
§SHA-2 512
use chksum_hash_sha2::sha2_512;
let digest = sha2_512::hash("example data");
assert_eq!(
digest.to_hex_lowercase(),
"ed59c5759a9ece516cec0c0623142d0e9fe70a27d750eee7fd38f4550d50addd873d0fa1a51fc823c1e3d5cada203f4a05d8325caacb7d3e0727a701f3f07e5f"
);
§Features
Cargo features are utilized to enable or disable specific SHA-2 algorithm variants.
224
enables SHA-2 224, accessible via thesha2_224
module.256
enables SHA-2 256, accessible via thesha2_256
module.384
enables SHA-2 384, accessible via thesha2_384
module.512
enables SHA-2 512, accessible via thesha2_512
module.
By default, all of these features are enabled.
To customize your setup, disable the default features and enable only those that you need in your Cargo.toml
file:
[dependencies]
chksum-hash-sha2 = { version = "0.0.1", default-features = false, features = ["256", "512"] }
Alternatively, you can use the cargo add
subcommand:
cargo add chksum-hash-sha2 --no-default-features --features 256,512
§License
This crate is licensed under the MIT License.
Re-exports§
pub use chksum_hash_sha2_224 as sha2_224;
224
pub use chksum_hash_sha2_256 as sha2_256;
256
pub use chksum_hash_sha2_384 as sha2_384;
384
pub use chksum_hash_sha2_512 as sha2_512;
512