diff options
author | jiegec <noc@jiegec.ac.cn> | 2021-03-08 19:09:51 +0800 |
---|---|---|
committer | jiegec <noc@jiegec.ac.cn> | 2021-03-08 19:16:05 +0800 |
commit | 7103b6adf3c52649970d66d3d424bbea2aa40368 (patch) | |
tree | c3f0fc462579f0fc92fb10a611fcf3ca4cc86ccb | |
parent | ad741f88f2136a82c0557179fb420cd6283b610a (diff) | |
download | rust-openssl-7103b6adf3c52649970d66d3d424bbea2aa40368.zip |
Add sm3 cryptographic hash support
-rw-r--r-- | openssl-sys/src/evp.rs | 2 | ||||
-rw-r--r-- | openssl/src/hash.rs | 17 |
2 files changed, 19 insertions, 0 deletions
diff --git a/openssl-sys/src/evp.rs b/openssl-sys/src/evp.rs index ec5df30a..3808c6bf 100644 --- a/openssl-sys/src/evp.rs +++ b/openssl-sys/src/evp.rs @@ -243,6 +243,8 @@ extern "C" { #[cfg(ossl111)] pub fn EVP_shake256() -> *const EVP_MD; pub fn EVP_ripemd160() -> *const EVP_MD; + #[cfg(all(ossl111, not(osslconf = "OPENSSL_NO_SM3")))] + pub fn EVP_sm3() -> *const EVP_MD; pub fn EVP_des_ecb() -> *const EVP_CIPHER; pub fn EVP_des_ede3() -> *const EVP_CIPHER; pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER; diff --git a/openssl/src/hash.rs b/openssl/src/hash.rs index 317d20e2..30ba8fcf 100644 --- a/openssl/src/hash.rs +++ b/openssl/src/hash.rs @@ -128,6 +128,11 @@ impl MessageDigest { unsafe { MessageDigest(ffi::EVP_ripemd160()) } } + #[cfg(all(ossl111, not(osslconf = "OPENSSL_NO_SM3")))] + pub fn sm3() -> MessageDigest { + unsafe { MessageDigest(ffi::EVP_sm3()) } + } + #[allow(clippy::trivially_copy_pass_by_ref)] pub fn as_ptr(&self) -> *const ffi::EVP_MD { self.0 @@ -627,6 +632,18 @@ mod tests { } #[test] + fn test_sm3() { + let tests = [( + "616263", + "66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0", + )]; + + for test in tests.iter() { + hash_test(MessageDigest::sm3(), test); + } + } + + #[test] fn from_nid() { assert_eq!( MessageDigest::from_nid(Nid::SHA256).unwrap().as_ptr(), |