From 9f4c4895883f2dbc86a3955cdefd68674fd25834 Mon Sep 17 00:00:00 2001 From: oberien Date: Wed, 4 Dec 2019 02:02:33 +0100 Subject: [PATCH] Use d2i_PKCS8_PRIV_KEY_INFO instead of *_bio --- openssl-sys/src/pem.rs | 7 ++++--- openssl/src/pkey.rs | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/openssl-sys/src/pem.rs b/openssl-sys/src/pem.rs index c7d79773..474cefd2 100644 --- a/openssl-sys/src/pem.rs +++ b/openssl-sys/src/pem.rs @@ -137,9 +137,10 @@ extern "C" { cb: pem_password_cb, u: *mut c_void, ) -> *mut EVP_PKEY; - pub fn d2i_PKCS8_PRIV_KEY_INFO_bio( - bp: *mut BIO, - x: *mut *mut PKCS8_PRIV_KEY_INFO, + pub fn d2i_PKCS8_PRIV_KEY_INFO( + k: *mut *mut PKCS8_PRIV_KEY_INFO, + buf: *mut *const u8, + length: c_long, ) -> *mut PKCS8_PRIV_KEY_INFO; pub fn PKCS8_PRIV_KEY_INFO_free( p8inf: *mut PKCS8_PRIV_KEY_INFO, diff --git a/openssl/src/pkey.rs b/openssl/src/pkey.rs index b5a12bf7..98eb6355 100644 --- a/openssl/src/pkey.rs +++ b/openssl/src/pkey.rs @@ -47,7 +47,7 @@ use ffi; use foreign_types::{ForeignType, ForeignTypeRef}; -use libc::c_int; +use libc::{c_int, c_long}; use std::ffi::CString; use std::mem; use std::ptr; @@ -533,10 +533,11 @@ impl PKey { { unsafe { ffi::init(); - let bio = MemBioSlice::new(der)?; - let p8inf = cvt_p(ffi::d2i_PKCS8_PRIV_KEY_INFO_bio( - bio.as_ptr(), + let len = der.len().min(c_long::max_value() as usize) as c_long; + let p8inf = cvt_p(ffi::d2i_PKCS8_PRIV_KEY_INFO( ptr::null_mut(), + &mut der.as_ptr(), + len, ))?; let res = cvt_p(ffi::EVP_PKCS82PKEY(p8inf)) .map(|p| PKey::from_ptr(p));