Add PKey::from_rsa

This commit is contained in:
Steven Fackler 2016-08-07 22:56:44 -07:00
parent 6e5cd7ef47
commit 6b1016c86e
4 changed files with 13 additions and 9 deletions

View File

@ -284,6 +284,7 @@ pub const BIO_FLAGS_SHOULD_RETRY: c_int = 0x08;
pub const CRYPTO_LOCK: c_int = 1;
pub const EVP_MAX_MD_SIZE: c_uint = 64;
pub const EVP_PKEY_RSA: c_int = NID_rsaEncryption;
pub const MBSTRING_ASC: c_int = MBSTRING_FLAG | 1;
pub const MBSTRING_BMP: c_int = MBSTRING_FLAG | 2;
@ -291,6 +292,7 @@ pub const MBSTRING_FLAG: c_int = 0x1000;
pub const MBSTRING_UNIV: c_int = MBSTRING_FLAG | 4;
pub const MBSTRING_UTF8: c_int = MBSTRING_FLAG;
pub const NID_rsaEncryption: c_int = 6;
pub const NID_ext_key_usage: c_int = 126;
pub const NID_key_usage: c_int = 83;

View File

@ -1,8 +1,9 @@
use libc::{c_void, c_char};
use std::ptr;
use bio::{MemBio, MemBioSlice};
use std::mem;
use ffi;
use bio::{MemBio, MemBioSlice};
use crypto::rsa::RSA;
use error::ErrorStack;
use crypto::util::{CallbackState, invoke_passwd_cb};
@ -14,11 +15,14 @@ unsafe impl Sync for PKey {}
/// Represents a public key, optionally with a private key attached.
impl PKey {
pub fn new() -> Result<PKey, ErrorStack> {
ffi::init();
/// Create a new `PKey` containing an RSA key.
pub fn from_rsa(rsa: RSA) -> Result<PKey, ErrorStack> {
unsafe {
let evp = try_ssl_null!(ffi::EVP_PKEY_new());
Ok(PKey::from_handle(evp))
let pkey = PKey(evp);
try_ssl!(ffi::EVP_PKEY_assign(pkey.0, ffi::EVP_PKEY_RSA, rsa.as_ptr() as *mut _));
mem::forget(rsa);
Ok(pkey)
}
}

View File

@ -118,8 +118,7 @@ impl X509StoreContext {
/// use openssl::x509::extension::{Extension, KeyUsageOption};
///
/// let rsa = RSA::generate(2048).unwrap();
/// let mut pkey = PKey::new().unwrap();
/// pkey.set_rsa(&rsa).unwrap();
/// let pkey = PKey::from_rsa(rsa).unwrap();
///
/// let gen = X509Generator::new()
/// .set_valid_period(365*2)

View File

@ -26,8 +26,7 @@ fn get_generator() -> X509Generator {
fn pkey() -> PKey {
let rsa = RSA::generate(2048).unwrap();
let mut pkey = PKey::new().unwrap();
pkey.set_rsa(&rsa).unwrap();
let mut pkey = PKey::from_rsa(rsa).unwrap();
pkey
}