Add private_key_from_pem_passphrase
This commit is contained in:
parent
2a8923c050
commit
7d411c7975
|
|
@ -216,6 +216,12 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn test_password() {
|
pub fn test_password() {
|
||||||
|
let key = include_bytes!("../test/dsa-encrypted.pem");
|
||||||
|
Dsa::private_key_from_pem_passphrase(key, b"mypass").unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn test_password_callback() {
|
||||||
let mut password_queried = false;
|
let mut password_queried = false;
|
||||||
let key = include_bytes!("../test/dsa-encrypted.pem");
|
let key = include_bytes!("../test/dsa-encrypted.pem");
|
||||||
Dsa::private_key_from_pem_callback(key, |password| {
|
Dsa::private_key_from_pem_callback(key, |password| {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ use types::OpenSslTypeRef;
|
||||||
type_!(EcKey, EcKeyRef, ffi::EC_KEY, ffi::EC_KEY_free);
|
type_!(EcKey, EcKeyRef, ffi::EC_KEY, ffi::EC_KEY_free);
|
||||||
|
|
||||||
impl EcKeyRef {
|
impl EcKeyRef {
|
||||||
|
private_key_to_pem!(ffi::PEM_write_bio_ECPrivateKey);
|
||||||
|
|
||||||
/// Serializes the private key components to DER.
|
/// Serializes the private key components to DER.
|
||||||
pub fn private_key_to_der(&self) -> Result<Vec<u8>, ErrorStack> {
|
pub fn private_key_to_der(&self) -> Result<Vec<u8>, ErrorStack> {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,27 @@ macro_rules! private_key_from_pem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserializes a PEM-formatted private key, using the supplied password if the key is
|
||||||
|
/// encrypted.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
///
|
||||||
|
/// Panics if `passphrase` contains an embedded null.
|
||||||
|
pub fn private_key_from_pem_passphrase(pem: &[u8],
|
||||||
|
passphrase: &[u8])
|
||||||
|
-> Result<$t, ::error::ErrorStack> {
|
||||||
|
unsafe {
|
||||||
|
ffi::init();
|
||||||
|
let bio = try!(::bio::MemBioSlice::new(pem));
|
||||||
|
let passphrase = ::std::ffi::CString::new(passphrase).unwrap();
|
||||||
|
cvt_p($f(bio.as_ptr(),
|
||||||
|
ptr::null_mut(),
|
||||||
|
None,
|
||||||
|
passphrase.as_ptr() as *const _ as *mut _))
|
||||||
|
.map($t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Deserializes a PEM-formatted private key, using a callback to retrieve a password if the
|
/// Deserializes a PEM-formatted private key, using a callback to retrieve a password if the
|
||||||
/// key is encrypted.
|
/// key is encrypted.
|
||||||
///
|
///
|
||||||
|
|
@ -69,7 +90,7 @@ macro_rules! private_key_from_pem {
|
||||||
cvt_p($f(bio.as_ptr(),
|
cvt_p($f(bio.as_ptr(),
|
||||||
ptr::null_mut(),
|
ptr::null_mut(),
|
||||||
Some(::util::invoke_passwd_cb::<F>),
|
Some(::util::invoke_passwd_cb::<F>),
|
||||||
&mut cb as *mut _ as *mut ::libc::c_void))
|
&mut cb as *mut _ as *mut _))
|
||||||
.map($t)
|
.map($t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -81,7 +102,7 @@ macro_rules! private_key_to_pem {
|
||||||
/// Serializes the private key to PEM.
|
/// Serializes the private key to PEM.
|
||||||
pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ::error::ErrorStack> {
|
pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ::error::ErrorStack> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let bio = try!(MemBio::new());
|
let bio = try!(::bio::MemBio::new());
|
||||||
try!(cvt($f(bio.as_ptr(),
|
try!(cvt($f(bio.as_ptr(),
|
||||||
self.as_ptr(),
|
self.as_ptr(),
|
||||||
ptr::null(),
|
ptr::null(),
|
||||||
|
|
|
||||||
|
|
@ -408,6 +408,12 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn test_password() {
|
pub fn test_password() {
|
||||||
|
let key = include_bytes!("../test/rsa-encrypted.pem");
|
||||||
|
Rsa::private_key_from_pem_passphrase(key, b"mypass").unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn test_password_callback() {
|
||||||
let mut password_queried = false;
|
let mut password_queried = false;
|
||||||
let key = include_bytes!("../test/rsa-encrypted.pem");
|
let key = include_bytes!("../test/rsa-encrypted.pem");
|
||||||
Rsa::private_key_from_pem_callback(key, |password| {
|
Rsa::private_key_from_pem_callback(key, |password| {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue