aboutsummaryrefslogtreecommitdiff
path: root/openssl
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-06-01 20:36:19 -0700
committerSteven Fackler <[email protected]>2018-06-01 20:36:19 -0700
commit10b2a34529110b3eaddcad0e17456929037e5d09 (patch)
tree3d399473124fd1d8c7f598de73b099769dfd0bb0 /openssl
parentFix types (diff)
downloadrust-openssl-10b2a34529110b3eaddcad0e17456929037e5d09.tar.xz
rust-openssl-10b2a34529110b3eaddcad0e17456929037e5d09.zip
Adjust Nid signature algorithm APIs
Diffstat (limited to 'openssl')
-rw-r--r--openssl/src/nid.rs75
1 files changed, 56 insertions, 19 deletions
diff --git a/openssl/src/nid.rs b/openssl/src/nid.rs
index 23068406..6c300c89 100644
--- a/openssl/src/nid.rs
+++ b/openssl/src/nid.rs
@@ -1,13 +1,23 @@
//! A collection of numerical identifiers for OpenSSL objects.
use ffi;
-use libc::{c_int,c_char};
-use std::ptr;
+use libc::{c_char, c_int};
use std::ffi::CStr;
use std::str;
-use error::ErrorStack;
use cvt_p;
+use error::ErrorStack;
+
+/// The digest and public-key algorithms associated with a signature.
+pub struct SignatureAlgorithms {
+ /// The signature's digest.
+ ///
+ /// If the signature does not specify a digest, this will be `NID::UNDEF`.
+ pub digest: Nid,
+
+ /// The signature's public-key.
+ pub pkey: Nid,
+}
/// A numerical identifier for an OpenSSL object.
///
@@ -49,14 +59,18 @@ impl Nid {
self.0
}
- /// Returns the `Nid` of the digest algorithm associated with a signature ID.
+ /// Returns the `Nid`s of the digest and public key algorithms associated with a signature ID.
///
/// This corresponds to `OBJ_find_sigid_algs`.
- pub fn digest_algorithm(&self) -> Option<Nid> {
+ pub fn signature_algorithms(&self) -> Option<SignatureAlgorithms> {
unsafe {
let mut digest = 0;
- if ffi::OBJ_find_sigid_algs(self.0, &mut digest, ptr::null_mut()) == 1 {
- Some(Nid(digest))
+ let mut pkey = 0;
+ if ffi::OBJ_find_sigid_algs(self.0, &mut digest, &mut pkey) == 1 {
+ Some(SignatureAlgorithms {
+ digest: Nid(digest),
+ pkey: Nid(pkey),
+ })
} else {
None
}
@@ -1041,10 +1055,9 @@ mod test {
#[test]
fn signature_digest() {
- assert_eq!(
- Nid::SHA256WITHRSAENCRYPTION.digest_algorithm(),
- Some(Nid::SHA256)
- );
+ let algs = Nid::SHA256WITHRSAENCRYPTION.signature_algorithms().unwrap();
+ assert_eq!(algs.digest, Nid::SHA256,);
+ assert_eq!(algs.pkey, Nid::RSAENCRYPTION);
}
#[test]
@@ -1057,11 +1070,26 @@ mod test {
let undefined_nid = Nid::from_raw(118);
assert_eq!(common_name.long_name().unwrap(), "commonName");
- assert_eq!(organizational_unit_name.long_name().unwrap(), "organizationalUnitName");
- assert_eq!(aes256_cbc_hmac_sha1.long_name().unwrap(), "aes-256-cbc-hmac-sha1");
- assert_eq!(id_cmc_lrapopwitness.long_name().unwrap(), "id-cmc-lraPOPWitness");
- assert_eq!(ms_ctl_sign.long_name().unwrap(), "Microsoft Trust List Signing");
- assert!(undefined_nid.long_name().is_err(), "undefined_nid should not return a valid value");
+ assert_eq!(
+ organizational_unit_name.long_name().unwrap(),
+ "organizationalUnitName"
+ );
+ assert_eq!(
+ aes256_cbc_hmac_sha1.long_name().unwrap(),
+ "aes-256-cbc-hmac-sha1"
+ );
+ assert_eq!(
+ id_cmc_lrapopwitness.long_name().unwrap(),
+ "id-cmc-lraPOPWitness"
+ );
+ assert_eq!(
+ ms_ctl_sign.long_name().unwrap(),
+ "Microsoft Trust List Signing"
+ );
+ assert!(
+ undefined_nid.long_name().is_err(),
+ "undefined_nid should not return a valid value"
+ );
}
#[test]
@@ -1075,9 +1103,18 @@ mod test {
assert_eq!(common_name.short_name().unwrap(), "CN");
assert_eq!(organizational_unit_name.short_name().unwrap(), "OU");
- assert_eq!(aes256_cbc_hmac_sha1.short_name().unwrap(), "AES-256-CBC-HMAC-SHA1");
- assert_eq!(id_cmc_lrapopwitness.short_name().unwrap(), "id-cmc-lraPOPWitness");
+ assert_eq!(
+ aes256_cbc_hmac_sha1.short_name().unwrap(),
+ "AES-256-CBC-HMAC-SHA1"
+ );
+ assert_eq!(
+ id_cmc_lrapopwitness.short_name().unwrap(),
+ "id-cmc-lraPOPWitness"
+ );
assert_eq!(ms_ctl_sign.short_name().unwrap(), "msCTLSign");
- assert!(undefined_nid.short_name().is_err(), "undefined_nid should not return a valid value");
+ assert!(
+ undefined_nid.short_name().is_err(),
+ "undefined_nid should not return a valid value"
+ );
}
}