summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openssl/src/dsa.rs14
-rw-r--r--openssl/src/macros.rs19
-rw-r--r--openssl/src/pkey.rs17
-rw-r--r--openssl/src/rsa.rs16
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> {