aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/pkcs12.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/src/pkcs12.rs')
-rw-r--r--openssl/src/pkcs12.rs22
1 files changed, 6 insertions, 16 deletions
diff --git a/openssl/src/pkcs12.rs b/openssl/src/pkcs12.rs
index 9c224ccd..ee9ae124 100644
--- a/openssl/src/pkcs12.rs
+++ b/openssl/src/pkcs12.rs
@@ -1,12 +1,10 @@
//! PKCS #12 archives.
use ffi;
-use libc::{c_long, c_uchar};
-use std::cmp;
use std::ptr;
use std::ffi::CString;
-use {cvt, cvt_p};
+use cvt;
use pkey::PKey;
use error::ErrorStack;
use x509::X509;
@@ -15,21 +13,9 @@ use stack::Stack;
type_!(Pkcs12, Pkcs12Ref, ffi::PKCS12, ffi::PKCS12_free);
-impl Pkcs12 {
- /// Deserializes a `Pkcs12` structure from DER-encoded data.
- pub fn from_der(der: &[u8]) -> Result<Pkcs12, ErrorStack> {
- unsafe {
- ffi::init();
- let mut ptr = der.as_ptr() as *const c_uchar;
- let length = cmp::min(der.len(), c_long::max_value() as usize) as c_long;
- let p12 = try!(cvt_p(ffi::d2i_PKCS12(ptr::null_mut(), &mut ptr, length)));
- Ok(Pkcs12(p12))
- }
- }
-}
-
impl Pkcs12Ref {
/// Extracts the contents of the `Pkcs12`.
+ // FIXME should take an &[u8]
pub fn parse(&self, pass: &str) -> Result<ParsedPkcs12, ErrorStack> {
unsafe {
let pass = CString::new(pass).unwrap();
@@ -57,6 +43,10 @@ impl Pkcs12Ref {
}
}
+impl Pkcs12 {
+ from_der!(Pkcs12, ffi::d2i_PKCS12);
+}
+
pub struct ParsedPkcs12 {
pub pkey: PKey,
pub cert: X509,