From 5813ca371dee64c1b2a8da53924be733c82a9421 Mon Sep 17 00:00:00 2001 From: Daniel Albert Date: Fri, 1 Jan 2016 19:33:49 +0000 Subject: Add RSA structs --- openssl/src/crypto/pkey.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'openssl/src/crypto/pkey.rs') diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index 10891224..25ce28e8 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -93,7 +93,7 @@ impl PKey { None, ptr::null_mut())); Ok(PKey { - evp: evp, + evp: evp as *mut ffi::EVP_PKEY, parts: Parts::Both, }) } @@ -112,7 +112,7 @@ impl PKey { None, ptr::null_mut())); Ok(PKey { - evp: evp, + evp: evp as *mut ffi::EVP_PKEY, parts: Parts::Public, }) } -- cgit v1.2.3 From 8ab4b545411cb705872e327bf46044241c2d8e74 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Thu, 28 Jan 2016 23:37:27 -0800 Subject: Revert "impl Clone for PKey and X509 by using their 'references' member" --- openssl/src/crypto/pkey.rs | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'openssl/src/crypto/pkey.rs') diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index dee6cb8b..314ee63d 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -52,10 +52,6 @@ fn openssl_hash_nid(hash: HashType) -> c_int { } } -extern "C" { - fn rust_EVP_PKEY_clone(pkey: *mut ffi::EVP_PKEY); -} - pub struct PKey { evp: *mut ffi::EVP_PKEY, parts: Parts, @@ -604,16 +600,6 @@ impl Drop for PKey { } } -impl Clone for PKey { - fn clone(&self) -> Self { - unsafe { - rust_EVP_PKEY_clone(self.evp); - } - - PKey::from_handle(self.evp, self.parts) - } -} - #[cfg(test)] mod tests { use std::path::Path; -- cgit v1.2.3 From 4e58fd10de3daa3eca08e906a4b2e4239ac6d37d Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sat, 30 Jan 2016 13:12:06 -0800 Subject: Fix PKey RSA constructors `set1` functions bump the object's refcount so we were previously leaking the RSA object. Split the decode from PEM part out to a method on RSA and use that in the PKey constructors. Also make RSA a pointer and actually free it. --- openssl/src/crypto/pkey.rs | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) (limited to 'openssl/src/crypto/pkey.rs') diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index 314ee63d..7cfa1288 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -9,6 +9,7 @@ use crypto::hash; use crypto::hash::Type as HashType; use ffi; use ssl::error::{SslError, StreamError}; +use crypto::rsa::RSA; #[derive(Copy, Clone)] pub enum Parts { @@ -125,18 +126,10 @@ impl PKey { pub fn private_rsa_key_from_pem(reader: &mut R) -> Result where R: Read { - let mut mem_bio = try!(MemBio::new()); - try!(io::copy(reader, &mut mem_bio).map_err(StreamError)); - + let rsa = try!(RSA::private_key_from_pem(reader)); unsafe { - let rsa = try_ssl_null!(ffi::PEM_read_bio_RSAPrivateKey(mem_bio.get_handle(), - ptr::null_mut(), - None, - ptr::null_mut())); - let evp = ffi::EVP_PKEY_new(); - if ffi::EVP_PKEY_set1_RSA(evp, rsa) == 0 { - return Err(SslError::get()); - } + let evp = try_ssl_null!(ffi::EVP_PKEY_new()); + try_ssl!(ffi::EVP_PKEY_set1_RSA(evp, rsa.as_ptr())); Ok(PKey { evp: evp, @@ -149,18 +142,10 @@ impl PKey { pub fn public_rsa_key_from_pem(reader: &mut R) -> Result where R: Read { - let mut mem_bio = try!(MemBio::new()); - try!(io::copy(reader, &mut mem_bio).map_err(StreamError)); - + let rsa = try!(RSA::public_key_from_pem(reader)); unsafe { - let rsa = try_ssl_null!(ffi::PEM_read_bio_RSA_PUBKEY(mem_bio.get_handle(), - ptr::null_mut(), - None, - ptr::null_mut())); - let evp = ffi::EVP_PKEY_new(); - if ffi::EVP_PKEY_set1_RSA(evp, rsa) == 0 { - return Err(SslError::get()); - } + let evp = try_ssl_null!(ffi::EVP_PKEY_new()); + try_ssl!(ffi::EVP_PKEY_set1_RSA(evp, rsa.as_ptr())); Ok(PKey { evp: evp, -- cgit v1.2.3 From 627f394d595562346187b8210b1aeeb225223914 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 31 Jan 2016 20:38:36 +0000 Subject: Revert "Revert "impl Clone for PKey and X509 by using their 'references' member"" --- openssl/src/crypto/pkey.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'openssl/src/crypto/pkey.rs') diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index 7cfa1288..e556730d 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -53,6 +53,10 @@ fn openssl_hash_nid(hash: HashType) -> c_int { } } +extern "C" { + fn rust_EVP_PKEY_clone(pkey: *mut ffi::EVP_PKEY); +} + pub struct PKey { evp: *mut ffi::EVP_PKEY, parts: Parts, @@ -585,6 +589,16 @@ impl Drop for PKey { } } +impl Clone for PKey { + fn clone(&self) -> Self { + unsafe { + rust_EVP_PKEY_clone(self.evp); + } + + PKey::from_handle(self.evp, self.parts) + } +} + #[cfg(test)] mod tests { use std::path::Path; -- cgit v1.2.3