Use d2i_PKCS8_PRIV_KEY_INFO instead of *_bio

This commit is contained in:
oberien 2019-12-04 02:02:33 +01:00
parent fc529b6c81
commit 9f4c489588
2 changed files with 9 additions and 7 deletions

View File

@ -137,9 +137,10 @@ extern "C" {
cb: pem_password_cb, cb: pem_password_cb,
u: *mut c_void, u: *mut c_void,
) -> *mut EVP_PKEY; ) -> *mut EVP_PKEY;
pub fn d2i_PKCS8_PRIV_KEY_INFO_bio( pub fn d2i_PKCS8_PRIV_KEY_INFO(
bp: *mut BIO, k: *mut *mut PKCS8_PRIV_KEY_INFO,
x: *mut *mut PKCS8_PRIV_KEY_INFO, buf: *mut *const u8,
length: c_long,
) -> *mut PKCS8_PRIV_KEY_INFO; ) -> *mut PKCS8_PRIV_KEY_INFO;
pub fn PKCS8_PRIV_KEY_INFO_free( pub fn PKCS8_PRIV_KEY_INFO_free(
p8inf: *mut PKCS8_PRIV_KEY_INFO, p8inf: *mut PKCS8_PRIV_KEY_INFO,

View File

@ -47,7 +47,7 @@
use ffi; use ffi;
use foreign_types::{ForeignType, ForeignTypeRef}; use foreign_types::{ForeignType, ForeignTypeRef};
use libc::c_int; use libc::{c_int, c_long};
use std::ffi::CString; use std::ffi::CString;
use std::mem; use std::mem;
use std::ptr; use std::ptr;
@ -533,10 +533,11 @@ impl PKey<Private> {
{ {
unsafe { unsafe {
ffi::init(); ffi::init();
let bio = MemBioSlice::new(der)?; let len = der.len().min(c_long::max_value() as usize) as c_long;
let p8inf = cvt_p(ffi::d2i_PKCS8_PRIV_KEY_INFO_bio( let p8inf = cvt_p(ffi::d2i_PKCS8_PRIV_KEY_INFO(
bio.as_ptr(),
ptr::null_mut(), ptr::null_mut(),
&mut der.as_ptr(),
len,
))?; ))?;
let res = cvt_p(ffi::EVP_PKCS82PKEY(p8inf)) let res = cvt_p(ffi::EVP_PKCS82PKEY(p8inf))
.map(|p| PKey::from_ptr(p)); .map(|p| PKey::from_ptr(p));