aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/nid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/src/nid.rs')
-rw-r--r--openssl/src/nid.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/openssl/src/nid.rs b/openssl/src/nid.rs
index 7c041236..78ffac96 100644
--- a/openssl/src/nid.rs
+++ b/openssl/src/nid.rs
@@ -1,6 +1,7 @@
//! A collection of numerical identifiers for OpenSSL objects.
use ffi;
use libc::c_int;
+use std::ptr;
/// A numerical identifier for an OpenSSL object.
///
@@ -42,6 +43,20 @@ impl Nid {
self.0
}
+ /// Returns the `Nid` of the digest algorithm associated with a signature ID.
+ ///
+ /// This corresponds to `OBJ_find_sigid_algs`.
+ pub fn digest_algorithm(&self) -> Option<Nid> {
+ unsafe {
+ let mut digest = 0;
+ if ffi::OBJ_find_sigid_algs(self.0, &mut digest, ptr::null_mut()) == 1 {
+ Some(Nid(digest))
+ } else {
+ None
+ }
+ }
+ }
+
pub const UNDEF: Nid = Nid(ffi::NID_undef);
pub const ITU_T: Nid = Nid(ffi::NID_itu_t);
pub const CCITT: Nid = Nid(ffi::NID_ccitt);
@@ -991,3 +1006,16 @@ impl Nid {
pub const AES_192_CBC_HMAC_SHA1: Nid = Nid(ffi::NID_aes_192_cbc_hmac_sha1);
pub const AES_256_CBC_HMAC_SHA1: Nid = Nid(ffi::NID_aes_256_cbc_hmac_sha1);
}
+
+#[cfg(test)]
+mod test {
+ use super::Nid;
+
+ #[test]
+ fn signature_digest() {
+ assert_eq!(
+ Nid::SHA256WITHRSAENCRYPTION.digest_algorithm(),
+ Some(Nid::SHA256)
+ );
+ }
+}