diff options
author | Steven Fackler <sfackler@palantir.com> | 2016-11-13 15:12:50 +0000 |
---|---|---|
committer | Steven Fackler <sfackler@palantir.com> | 2016-11-13 15:12:50 +0000 |
commit | 2a8923c05073d533175ed94d2931a3a79273a684 (patch) | |
tree | abeccb6913cf808346a6e8ae9a2f04301db2255f /openssl/src | |
parent | 08e0c4ca9061c3dc0c951db0c08909689b04a310 (diff) | |
download | rust-openssl-2a8923c05073d533175ed94d2931a3a79273a684.zip |
Macro-implement private_key_to_pem
Diffstat (limited to 'openssl/src')
-rw-r--r-- | openssl/src/dsa.rs | 14 | ||||
-rw-r--r-- | openssl/src/macros.rs | 19 | ||||
-rw-r--r-- | openssl/src/pkey.rs | 17 | ||||
-rw-r--r-- | openssl/src/rsa.rs | 16 |
4 files changed, 22 insertions, 44 deletions
diff --git a/openssl/src/dsa.rs b/openssl/src/dsa.rs index 962fcc9c..53d7babf 100644 --- a/openssl/src/dsa.rs +++ b/openssl/src/dsa.rs @@ -14,19 +14,7 @@ use util::{CallbackState, invoke_passwd_cb_old}; type_!(Dsa, DsaRef, ffi::DSA, ffi::DSA_free); impl DsaRef { - /// Encodes a DSA private key as unencrypted PEM formatted data. - pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { - assert!(self.has_private_key()); - let mem_bio = try!(MemBio::new()); - - unsafe { - try!(cvt(ffi::PEM_write_bio_DSAPrivateKey(mem_bio.as_ptr(), self.as_ptr(), - ptr::null(), ptr::null_mut(), 0, - None, ptr::null_mut()))) - }; - - Ok(mem_bio.get_buf().to_owned()) - } + private_key_to_pem!(ffi::PEM_write_bio_DSAPrivateKey); /// Encodes a DSA public key as PEM formatted data. pub fn public_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { diff --git a/openssl/src/macros.rs b/openssl/src/macros.rs index 0db3401c..b225f322 100644 --- a/openssl/src/macros.rs +++ b/openssl/src/macros.rs @@ -75,3 +75,22 @@ macro_rules! private_key_from_pem { } } } + +macro_rules! private_key_to_pem { + ($f:path) => { + /// Serializes the private key to PEM. + pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ::error::ErrorStack> { + unsafe { + let bio = try!(MemBio::new()); + try!(cvt($f(bio.as_ptr(), + self.as_ptr(), + ptr::null(), + ptr::null_mut(), + -1, + None, + ptr::null_mut()))); + Ok(bio.get_buf().to_owned()) + } + } + } +} diff --git a/openssl/src/pkey.rs b/openssl/src/pkey.rs index a56633a2..27b36c4b 100644 --- a/openssl/src/pkey.rs +++ b/openssl/src/pkey.rs @@ -48,22 +48,7 @@ impl PKeyRef { } } - /// Encodes the private key in the PEM format. - // FIXME: also add password and encryption - pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { - let mem_bio = try!(MemBio::new()); - unsafe { - try!(cvt(ffi::PEM_write_bio_PrivateKey(mem_bio.as_ptr(), - self.as_ptr(), - ptr::null(), - ptr::null_mut(), - -1, - None, - ptr::null_mut()))); - - } - Ok(mem_bio.get_buf().to_owned()) - } + private_key_to_pem!(ffi::PEM_write_bio_PrivateKey); /// Encodes the public key in the PEM format. pub fn public_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { diff --git a/openssl/src/rsa.rs b/openssl/src/rsa.rs index 22668e19..3ebbe542 100644 --- a/openssl/src/rsa.rs +++ b/openssl/src/rsa.rs @@ -23,21 +23,7 @@ pub const PKCS1_OAEP_PADDING: Padding = Padding(ffi::RSA_PKCS1_OAEP_PADDING); type_!(Rsa, RsaRef, ffi::RSA, ffi::RSA_free); impl RsaRef { - /// Writes an RSA private key as unencrypted PEM formatted data - pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { - let mem_bio = try!(MemBio::new()); - - unsafe { - try!(cvt(ffi::PEM_write_bio_RSAPrivateKey(mem_bio.as_ptr(), - self.as_ptr(), - ptr::null(), - ptr::null_mut(), - 0, - None, - ptr::null_mut()))); - } - Ok(mem_bio.get_buf().to_owned()) - } + private_key_to_pem!(ffi::PEM_write_bio_RSAPrivateKey); /// Writes an RSA public key as PEM formatted data pub fn public_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack> { |