diff options
| author | mredlek <[email protected]> | 2017-01-26 20:59:32 +0100 |
|---|---|---|
| committer | mredlek <[email protected]> | 2017-01-26 21:05:33 +0100 |
| commit | 557b936e27177718b62d31dcf3364f481bb15c2c (patch) | |
| tree | 5fe955c16e192434f30ed93b3ff968ca9c7d3c6a /openssl/src | |
| parent | Merge pull request #566 from sfackler/pkcs12-tweaks (diff) | |
| download | rust-openssl-557b936e27177718b62d31dcf3364f481bb15c2c.tar.xz rust-openssl-557b936e27177718b62d31dcf3364f481bb15c2c.zip | |
Added X509ReqRef.subject_name and X509ReqRef.version
Diffstat (limited to 'openssl/src')
| -rw-r--r-- | openssl/src/asn1.rs | 22 | ||||
| -rw-r--r-- | openssl/src/x509/mod.rs | 27 | ||||
| -rw-r--r-- | openssl/src/x509/tests.rs | 9 |
3 files changed, 56 insertions, 2 deletions
diff --git a/openssl/src/asn1.rs b/openssl/src/asn1.rs index d177885e..f5d6a102 100644 --- a/openssl/src/asn1.rs +++ b/openssl/src/asn1.rs @@ -75,6 +75,28 @@ impl Asn1StringRef { } } +type_!(Asn1Integer, Asn1IntegerRef, ffi::ASN1_INTEGER, ffi::ASN1_INTEGER_free); + +impl Asn1IntegerRef { + pub fn get(&self) -> i64 { + unsafe { + return ::ffi::ASN1_INTEGER_get(self.as_ptr()); + } + } + + pub fn set(&self, value: i64) -> Result<(), ErrorStack> + { + unsafe { + let res = ::ffi::ASN1_INTEGER_set(self.as_ptr(), value); + if res < 0 { + return Err(ErrorStack::get()); + } + + Ok(()) + } + } +} + #[cfg(any(ossl101, ossl102))] use ffi::ASN1_STRING_data; diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs index e75dcf5d..2edfa675 100644 --- a/openssl/src/x509/mod.rs +++ b/openssl/src/x509/mod.rs @@ -599,6 +599,21 @@ impl X509Req { impl X509ReqRef { to_pem!(ffi::PEM_write_bio_X509_REQ); to_der!(ffi::i2d_X509_REQ); + + pub fn version(&self) -> i64 + { + unsafe { + let version = compat::X509_REQ_get_version(self.as_ptr()); + version + } + } + + pub fn subject_name(&self) -> &X509NameRef { + unsafe { + let name = compat::X509_REQ_get_subject_name(self.as_ptr()); + X509NameRef::from_ptr(name) + } + } } /// A collection of X.509 extensions. @@ -779,6 +794,8 @@ mod compat { pub use ffi::X509_getm_notBefore as X509_get_notBefore; pub use ffi::X509_up_ref; pub use ffi::X509_get0_extensions; + pub use ffi::X509_REQ_get_version; + pub use ffi::X509_REQ_get_subject_name; } #[cfg(ossl10x)] @@ -812,4 +829,14 @@ mod compat { (*info).extensions } } + + pub unsafe fn X509_REQ_get_version(x: *mut ffi::X509_REQ) -> ::libc::c_long + { + ::ffi::ASN1_INTEGER_get((*(*x).req_info).version) + } + + pub unsafe fn X509_REQ_get_subject_name(x: *mut ffi::X509_REQ) -> *mut ::ffi::X509_NAME + { + (*(*x).req_info).subject + } } diff --git a/openssl/src/x509/tests.rs b/openssl/src/x509/tests.rs index 01cbf2ec..14fbb173 100644 --- a/openssl/src/x509/tests.rs +++ b/openssl/src/x509/tests.rs @@ -6,7 +6,7 @@ use nid::X9_62_PRIME256V1; use pkey::PKey; use rsa::Rsa; use ssl::{SslMethod, SslContextBuilder}; -use x509::{X509, X509Generator}; +use x509::{X509, X509Generator, X509Req}; use x509::extension::Extension::{KeyUsage, ExtKeyUsage, SubjectAltName, OtherNid, OtherStr}; use x509::extension::AltNameOption as SAN; use x509::extension::KeyUsageOption::{DigitalSignature, KeyEncipherment}; @@ -75,7 +75,12 @@ fn test_req_gen() { let pkey = pkey(); let req = get_generator().request(&pkey).unwrap(); - req.to_pem().unwrap(); + let reqpem = req.to_pem().unwrap(); + + let req = X509Req::from_pem(&reqpem).ok().expect("Failed to load PEM"); + let cn = (*req).subject_name().entries_by_nid(nid::COMMONNAME).next().unwrap(); + assert_eq!(0, (*req).version()); + assert_eq!(cn.data().as_slice(), b"test_me"); // FIXME: check data in result to be correct, needs implementation // of X509_REQ getters |