pub struct Hasher { /* private fields */ }
Expand description
Provides message digest (hash) computation.
§Examples
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())?;
h.update(data[0])?;
h.update(data[1])?;
let res = h.finish()?;
assert_eq!(&*res, 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 Hasher::finish_xof
instead of Hasher::finish
and provide a buf
to store the hash. The hash will be as long as
the buf
.
Implementations§
Source§impl Hasher
impl Hasher
Sourcepub fn new(ty: MessageDigest) -> Result<Hasher, ErrorStack>
pub fn new(ty: MessageDigest) -> Result<Hasher, ErrorStack>
Creates a new Hasher
with the specified hash type.
Sourcepub fn squeeze_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack>
pub fn squeeze_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack>
Squeezes buf out of the hasher. Can be called multiple times, unlike finish_xof
.
The output will be as long as the buf.
Sourcepub fn finish(&mut self) -> Result<DigestBytes, ErrorStack>
pub fn finish(&mut self) -> Result<DigestBytes, ErrorStack>
Returns the hash of the data written and resets the non-XOF hasher.
Sourcepub fn finish_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack>
pub fn finish_xof(&mut self, buf: &mut [u8]) -> Result<(), ErrorStack>
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§
Source§impl Write for Hasher
impl Write for Hasher
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)impl Send for Hasher
impl Sync for Hasher
Auto Trait Implementations§
impl Freeze for Hasher
impl RefUnwindSafe for Hasher
impl Unpin for Hasher
impl UnwindSafe for Hasher
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes