Commit 6b1016c8 authored by Steven Fackler's avatar Steven Fackler
Browse files

Add PKey::from_rsa

parent 6e5cd7ef
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;

+9 −5
Original line number Diff line number Diff line
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)
        }
    }

+1 −2
Original line number Diff line number Diff line
@@ -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)
+1 −2
Original line number Diff line number Diff line
@@ -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
}