From d9cb5433b1556a7c652a02f0407c9d36f4cd4211 Mon Sep 17 00:00:00 2001 From: Nathaniel McCallum Date: Sun, 17 Mar 2019 14:47:07 -0400 Subject: [PATCH 1/2] Expose EVP_MD_type() This gives us the ability to get the Nid from a MessageDigest. --- openssl-sys/src/evp.rs | 1 + openssl/src/hash.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/openssl-sys/src/evp.rs b/openssl-sys/src/evp.rs index e8276afa..87469e0a 100644 --- a/openssl-sys/src/evp.rs +++ b/openssl-sys/src/evp.rs @@ -23,6 +23,7 @@ pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD { extern "C" { pub fn EVP_MD_size(md: *const EVP_MD) -> c_int; + pub fn EVP_MD_type(md: *const EVP_MD) -> c_int; #[cfg(any(ossl110, libressl273))] pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int; diff --git a/openssl/src/hash.rs b/openssl/src/hash.rs index 52d2ca09..5025de19 100644 --- a/openssl/src/hash.rs +++ b/openssl/src/hash.rs @@ -106,6 +106,11 @@ impl MessageDigest { pub fn size(&self) -> usize { unsafe { ffi::EVP_MD_size(self.0) as usize } } + + /// The name of the digest + pub fn type_(&self) -> Nid { + Nid::from_raw(unsafe { ffi::EVP_MD_type(self.0) }) + } } unsafe impl Sync for MessageDigest {} From 702bc48b1c13af820f452b986aa900fffefaa0fc Mon Sep 17 00:00:00 2001 From: Nathaniel McCallum Date: Sun, 17 Mar 2019 14:30:00 -0400 Subject: [PATCH 2/2] Expose EC_GROUP_get_curve_name() This gives us the ability to get the Nid from an EcGroupRef. --- openssl-sys/src/ec.rs | 2 ++ openssl/src/ec.rs | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/openssl-sys/src/ec.rs b/openssl-sys/src/ec.rs index d422997a..ca4c09ea 100644 --- a/openssl-sys/src/ec.rs +++ b/openssl-sys/src/ec.rs @@ -30,6 +30,8 @@ extern "C" { ctx: *mut BN_CTX, ) -> c_int; + pub fn EC_GROUP_get_curve_name(group: *const EC_GROUP) -> c_int; + pub fn EC_GROUP_set_asn1_flag(key: *mut EC_GROUP, flag: c_int); pub fn EC_GROUP_get_curve_GFp( diff --git a/openssl/src/ec.rs b/openssl/src/ec.rs index e6e0a119..d757e3ed 100644 --- a/openssl/src/ec.rs +++ b/openssl/src/ec.rs @@ -237,6 +237,16 @@ impl EcGroupRef { ffi::EC_GROUP_set_asn1_flag(self.as_ptr(), flag.0); } } + + /// Returns the name of the curve, if a name is associated. + /// + /// OpenSSL documentation at [`EC_GROUP_get_curve_name`] + /// + /// [`EC_GROUP_get_curve_name`]: https://www.openssl.org/docs/man1.1.0/crypto/EC_GROUP_get_curve_name.html + pub fn curve_name(&self) -> Option { + let nid = unsafe { ffi::EC_GROUP_get_curve_name(self.as_ptr()) }; + if nid > 0 { Some(Nid::from_raw(nid)) } else { None } + } } foreign_type_and_impl_send_sync! {