aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/crypto/pkcs12.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/src/crypto/pkcs12.rs')
-rw-r--r--openssl/src/crypto/pkcs12.rs34
1 files changed, 30 insertions, 4 deletions
diff --git a/openssl/src/crypto/pkcs12.rs b/openssl/src/crypto/pkcs12.rs
index 89bcbd5c..5f03a3d5 100644
--- a/openssl/src/crypto/pkcs12.rs
+++ b/openssl/src/crypto/pkcs12.rs
@@ -44,13 +44,14 @@ impl Pkcs12 {
let pkey = PKey::from_ptr(pkey);
let cert = X509::from_ptr(cert);
+ let chain = chain as *mut _;
let mut chain_out = vec![];
- for i in 0..(*chain).stack.num {
- let x509 = *(*chain).stack.data.offset(i as isize) as *mut _;
- chain_out.push(X509::from_ptr(x509));
+ for i in 0..compat::OPENSSL_sk_num(chain) {
+ let x509 = compat::OPENSSL_sk_value(chain, i);
+ chain_out.push(X509::from_ptr(x509 as *mut _));
}
- ffi::sk_free(&mut (*chain).stack);
+ compat::OPENSSL_sk_free(chain as *mut _);
Ok(ParsedPkcs12 {
pkey: pkey,
@@ -69,6 +70,31 @@ pub struct ParsedPkcs12 {
_p: (),
}
+#[cfg(ossl110)]
+mod compat {
+ pub use ffi::OPENSSL_sk_free;
+ pub use ffi::OPENSSL_sk_num;
+ pub use ffi::OPENSSL_sk_value;
+}
+
+#[cfg(ossl10x)]
+#[allow(bad_style)]
+mod compat {
+ use libc::{c_int, c_void};
+ use ffi;
+
+ pub use ffi::sk_free as OPENSSL_sk_free;
+
+ pub unsafe fn OPENSSL_sk_num(stack: *mut ffi::_STACK) -> c_int {
+ (*stack).num
+ }
+
+ pub unsafe fn OPENSSL_sk_value(stack: *const ffi::_STACK, idx: c_int)
+ -> *mut c_void {
+ *(*stack).data.offset(idx as isize) as *mut c_void
+ }
+}
+
#[cfg(test)]
mod test {
use crypto::hash::Type::SHA1;