Struct openssl::hash::Hasher [−][src]
pub struct Hasher { /* fields omitted */ }
Provides message digest (hash) computation.
Examples
Calculate a hash in one go:
use openssl::hash::{hash, MessageDigest}; let data = b"\x42\xF4\x97\xE0"; let spec = b"\x7c\x43\x0f\x17\x8a\xef\xdf\x14\x87\xfe\xe7\x14\x4e\x96\x41\xe2"; let res = hash(MessageDigest::md5(), data).unwrap(); assert_eq!(&*res, spec);
Supply the input in chunks:
use openssl::hash::{Hasher, MessageDigest}; let data = [b"\x42\xF4", b"\x97\xE0"]; let spec = b"\x7c\x43\x0f\x17\x8a\xef\xdf\x14\x87\xfe\xe7\x14\x4e\x96\x41\xe2"; let mut h = Hasher::new(MessageDigest::md5()).unwrap(); h.update(data[0]).unwrap(); h.update(data[1]).unwrap(); let res = h.finish().unwrap(); assert_eq!(&*res, spec);
Use an XOF hasher (OpenSSL 1.1.1+):
#[cfg(ossl111)] { use openssl::hash::{hash_xof, MessageDigest}; let data = b"\x41\x6c\x6c\x20\x79\x6f\x75\x72\x20\x62\x61\x73\x65\x20\x61\x72\x65\x20\x62\x65\x6c\x6f\x6e\x67\x20\x74\x6f\x20\x75\x73"; let spec = b"\x49\xd0\x69\x7f\xf5\x08\x11\x1d\x8b\x84\xf1\x5e\x46\xda\xf1\x35"; let mut buf = vec![0; 16]; hash_xof(MessageDigest::shake_128(), data, buf.as_mut_slice()).unwrap(); assert_eq!(buf, spec); }
Warning
Don’t actually use MD5 and SHA-1 hashes, they’re not secure anymore.
Don’t ever hash passwords, use the functions in the pkcs5
module or bcrypt/scrypt instead.
For extendable output functions (XOFs, i.e. SHAKE128/SHAKE256), you must use finish_xof instead of finish and provide a buf to store the hash. The hash will be as long as the buf.
Implementations
impl Hasher
[src]
impl Hasher
[src]pub fn new(ty: MessageDigest) -> Result<Hasher, ErrorStack>
[src]
Creates a new Hasher
with the specified hash type.
pub fn update(&mut self, data: &[u8]) -> Result<(), ErrorStack>
[src]
Feeds data into the hasher.
pub fn finish(&mut self) -> Result<DigestBytes, ErrorStack>
[src]
Returns the hash of the data written and resets the non-XOF hasher.
pub fn finish_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack>
[src]
Writes the hash of the data into the supplied buf and resets the XOF hasher. The hash will be as long as the buf.
Trait Implementations
impl Write for Hasher
[src]
impl Write for Hasher
[src]fn write(&mut self, buf: &[u8]) -> Result<usize>
[src]
fn flush(&mut self) -> Result<()>
[src]
pub fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>
1.36.0[src]
pub fn is_write_vectored(&self) -> bool
[src]
pub fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
1.0.0[src]
pub fn write_all_vectored(
&mut self,
bufs: &mut [IoSlice<'_>]
) -> Result<(), Error>
[src]
&mut self,
bufs: &mut [IoSlice<'_>]
) -> Result<(), Error>