Traits which describe functionality of cryptographic hash functions, a.k.a. digest algorithms.
See RustCrypto/hashes for implementations which use this trait.
Rust 1.57 or higher.
Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.
Let us demonstrate how to use crates in this repository using Sha256 as an example.
First add the sha2
crate to your Cargo.toml
:
toml
[dependencies]
sha2 = "0.11"
sha2
and other crates re-export digest
crate and Digest
trait for
convenience, so you don't have to add digest
crate as an explicit dependency.
Now you can write the following code:
```rust use sha2::{Sha256, Digest};
let mut hasher = Sha256::new();
let data = b"Hello world!";
hasher.update(data);
// input
can be called repeatedly and is generic over AsRef<[u8]>
hasher.update("String data");
// Note that calling finalize()
consumes hasher
let hash = hasher.finalize();
println!("Result: {:x}", hash);
```
In this example hash
has type GenericArray<u8, U64>
, which is a generic
alternative to [u8; 64]
.
Alternatively you can use chained approach, which is equivalent to the previous example:
```rust let hash = Sha256::new() .chainupdate(b"Hello world!") .chainupdate("String data") .finalize();
println!("Result: {:x}", hash); ```
If the whole message is available you also can use convenience digest
method:
rust
let hash = Sha256::digest(b"my message");
println!("Result: {:x}", hash);
Read
-able objectsIf you want to hash data from Read
trait (e.g. from file) you can rely on
implementation of Write
trait (requires enabled-by-default std
feature):
```rust use sha2::{Sha256, Digest}; use std::{fs, io};
let mut file = fs::File::open(&path)?; let mut hasher = Sha256::new(); let n = io::copy(&mut file, &mut hasher)?; let hash = hasher.finalize();
println!("Path: {}", path); println!("Bytes processed: {}", n); println!("Hash value: {:x}", hash); ```
You can write generic code over Digest
(or other traits from digest
crate)
trait which will work over different hash functions:
```rust use digest::Digest;
// Toy example, do not use it in practice!
// Instead use crates from: https://github.com/RustCrypto/password-hashing
fn hashpassword
let mut buf1 = [0u8; 32]; let mut buf2 = [0u8; 64];
hashpassword::
If you want to use hash functions with trait objects, use digest::DynDigest
trait.
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.