aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-08-07 22:56:44 -0700
committerSteven Fackler <[email protected]>2016-08-07 22:56:44 -0700
commit6b1016c86e72d26d15584789456bd317bee92bca (patch)
tree120d9fd40cb761b6496ea8d562f71eb2f17bf1cd /openssl/src
parentRemove X509Generator::bitlenth (diff)
downloadrust-openssl-6b1016c86e72d26d15584789456bd317bee92bca.tar.xz
rust-openssl-6b1016c86e72d26d15584789456bd317bee92bca.zip
Add PKey::from_rsa
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/crypto/pkey.rs14
-rw-r--r--openssl/src/x509/mod.rs3
-rw-r--r--openssl/src/x509/tests.rs3
3 files changed, 11 insertions, 9 deletions
diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs
index 501ffa37..607d4986 100644
--- a/openssl/src/crypto/pkey.rs
+++ b/openssl/src/crypto/pkey.rs
@@ -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)
}
}
diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs
index 1bce71c6..10537ea2 100644
--- a/openssl/src/x509/mod.rs
+++ b/openssl/src/x509/mod.rs
@@ -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)
diff --git a/openssl/src/x509/tests.rs b/openssl/src/x509/tests.rs
index f701736a..da1523af 100644
--- a/openssl/src/x509/tests.rs
+++ b/openssl/src/x509/tests.rs
@@ -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
}