Implement Pkcs12 via type_!

This commit is contained in:
Steven Fackler 2016-11-05 18:46:34 -07:00
parent 4e2ffe5b9b
commit 96a5ccfc6b
1 changed files with 9 additions and 12 deletions

View File

@ -10,19 +10,10 @@ use {cvt, cvt_p};
use pkey::PKey;
use error::ErrorStack;
use x509::X509;
use types::OpenSslType;
use types::{OpenSslType, OpenSslTypeRef};
use stack::Stack;
/// A PKCS #12 archive.
pub struct Pkcs12(*mut ffi::PKCS12);
impl Drop for Pkcs12 {
fn drop(&mut self) {
unsafe {
ffi::PKCS12_free(self.0);
}
}
}
type_!(Pkcs12, Pkcs12Ref, ffi::PKCS12, ffi::PKCS12_free);
impl Pkcs12 {
/// Deserializes a `Pkcs12` structure from DER-encoded data.
@ -35,7 +26,9 @@ impl Pkcs12 {
Ok(Pkcs12(p12))
}
}
}
impl Pkcs12Ref {
/// Extracts the contents of the `Pkcs12`.
pub fn parse(&self, pass: &str) -> Result<ParsedPkcs12, ErrorStack> {
unsafe {
@ -45,7 +38,11 @@ impl Pkcs12 {
let mut cert = ptr::null_mut();
let mut chain = ptr::null_mut();
try!(cvt(ffi::PKCS12_parse(self.0, pass.as_ptr(), &mut pkey, &mut cert, &mut chain)));
try!(cvt(ffi::PKCS12_parse(self.as_ptr(),
pass.as_ptr(),
&mut pkey,
&mut cert,
&mut chain)));
let pkey = PKey::from_ptr(pkey);
let cert = X509::from_ptr(cert);