Loading openssl/src/hash.rs +27 −0 Original line number Diff line number Diff line use ffi; use std::ffi::CString; use std::fmt; use std::io; use std::io::prelude::*; Loading Loading @@ -46,6 +47,24 @@ impl MessageDigest { } } /// Returns the `MessageDigest` corresponding to an algorithm name. /// /// This corresponds to [`EVP_get_digestbyname`]. /// /// [`EVP_get_digestbyname`]: https://www.openssl.org/docs/man1.1.0/crypto/EVP_DigestInit.html pub fn from_name(name: &str) -> Option<MessageDigest> { ffi::init(); let name = CString::new(name).ok()?; unsafe { let ptr = ffi::EVP_get_digestbyname(name.as_ptr()); if ptr.is_null() { None } else { Some(MessageDigest(ptr)) } } } pub fn null() -> MessageDigest { unsafe { MessageDigest(ffi::EVP_md_null()) } } Loading Loading @@ -614,4 +633,12 @@ mod tests { MessageDigest::sha256().as_ptr() ); } #[test] fn from_name() { assert_eq!( MessageDigest::from_name("SHA256").unwrap().as_ptr(), MessageDigest::sha256().as_ptr() ) } } Loading
openssl/src/hash.rs +27 −0 Original line number Diff line number Diff line use ffi; use std::ffi::CString; use std::fmt; use std::io; use std::io::prelude::*; Loading Loading @@ -46,6 +47,24 @@ impl MessageDigest { } } /// Returns the `MessageDigest` corresponding to an algorithm name. /// /// This corresponds to [`EVP_get_digestbyname`]. /// /// [`EVP_get_digestbyname`]: https://www.openssl.org/docs/man1.1.0/crypto/EVP_DigestInit.html pub fn from_name(name: &str) -> Option<MessageDigest> { ffi::init(); let name = CString::new(name).ok()?; unsafe { let ptr = ffi::EVP_get_digestbyname(name.as_ptr()); if ptr.is_null() { None } else { Some(MessageDigest(ptr)) } } } pub fn null() -> MessageDigest { unsafe { MessageDigest(ffi::EVP_md_null()) } } Loading Loading @@ -614,4 +633,12 @@ mod tests { MessageDigest::sha256().as_ptr() ); } #[test] fn from_name() { assert_eq!( MessageDigest::from_name("SHA256").unwrap().as_ptr(), MessageDigest::sha256().as_ptr() ) } }