aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorBrian Chin <[email protected]>2017-01-30 16:51:10 -0800
committerBrian Chin <[email protected]>2017-01-30 16:51:10 -0800
commit302ee77d32acb0b92fe563f29c36882e3b9b7d62 (patch)
treed67728147befc2ffe837ea106c9f83c7337ebbd4 /openssl/src
parentFixing typo (diff)
downloadrust-openssl-302ee77d32acb0b92fe563f29c36882e3b9b7d62.tar.xz
rust-openssl-302ee77d32acb0b92fe563f29c36882e3b9b7d62.zip
Adding suggestions from review.
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/pkey.rs19
-rw-r--r--openssl/src/rsa.rs38
-rw-r--r--openssl/src/sign.rs14
3 files changed, 33 insertions, 38 deletions
diff --git a/openssl/src/pkey.rs b/openssl/src/pkey.rs
index fd963c24..0d8de1dd 100644
--- a/openssl/src/pkey.rs
+++ b/openssl/src/pkey.rs
@@ -8,7 +8,7 @@ use bio::MemBioSlice;
use dh::Dh;
use dsa::Dsa;
use ec::EcKey;
-use rsa::Rsa;
+use rsa::{Rsa, Padding};
use error::ErrorStack;
use util::{CallbackState, invoke_passwd_cb_old};
use types::{OpenSslType, OpenSslTypeRef};
@@ -153,6 +153,23 @@ impl PKey {
pub struct PKeyCtxRef(::util::Opaque);
+impl PKeyCtxRef {
+ pub fn set_rsa_padding(&mut self, pad: Padding) -> Result<(), ErrorStack> {
+ unsafe {
+ try!(cvt(ffi::EVP_PKEY_CTX_set_rsa_padding(self.as_ptr(), pad.as_raw())));
+ }
+ Ok(())
+ }
+
+ pub fn rsa_padding(&mut self) -> Result<Padding, ErrorStack> {
+ let mut pad: c_int = 0;
+ unsafe {
+ try!(cvt(ffi::EVP_PKEY_CTX_get_rsa_padding(self.as_ptr(), &mut pad)));
+ };
+ Ok(Padding::from_raw(pad))
+ }
+}
+
impl ::types::OpenSslTypeRef for PKeyCtxRef {
type CType = ffi::EVP_PKEY_CTX;
}
diff --git a/openssl/src/rsa.rs b/openssl/src/rsa.rs
index d9e599c8..dc760f7a 100644
--- a/openssl/src/rsa.rs
+++ b/openssl/src/rsa.rs
@@ -10,12 +10,21 @@ use bio::MemBioSlice;
use error::ErrorStack;
use util::{CallbackState, invoke_passwd_cb_old};
use types::OpenSslTypeRef;
-use pkey::PKeyCtxRef;
/// Type of encryption padding to use.
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct Padding(c_int);
+impl Padding {
+ pub fn from_raw(value: c_int) -> Padding {
+ Padding(value)
+ }
+
+ pub fn as_raw(&self) -> c_int {
+ self.0
+ }
+}
+
pub const NO_PADDING: Padding = Padding(ffi::RSA_NO_PADDING);
pub const PKCS1_PADDING: Padding = Padding(ffi::RSA_PKCS1_PADDING);
pub const PKCS1_OAEP_PADDING: Padding = Padding(ffi::RSA_PKCS1_OAEP_PADDING);
@@ -344,33 +353,6 @@ mod compat {
}
}
-// EVP_PKEY_CTX_ctrl macros
-unsafe fn pkey_ctx_set_rsa_padding(ctx: *mut ffi::EVP_PKEY_CTX, pad: c_int) -> c_int {
- ffi::EVP_PKEY_CTX_ctrl(ctx, ffi::EVP_PKEY_RSA, -1, ffi::RSA_PKEY_CTRL_RSA_PADDING, pad, ptr::null_mut())
-}
-
-unsafe fn pkey_ctx_get_rsa_padding(ctx: *mut ffi::EVP_PKEY_CTX, ppad: *mut c_int) -> c_int {
- ffi::EVP_PKEY_CTX_ctrl(ctx, ffi::EVP_PKEY_RSA, -1, ffi::RSA_PKEY_CTRL_GET_RSA_PADDING, 0, ppad as *mut c_void)
-}
-
-// This is needed here, as it needs access to the private data of Padding.
-impl PKeyCtxRef {
- pub fn set_rsa_padding(&mut self, pad: Padding) -> Result<(), ErrorStack> {
- unsafe {
- try!(cvt(pkey_ctx_set_rsa_padding(self.as_ptr(), pad.0)));
- }
- Ok(())
- }
-
- pub fn get_rsa_padding(&mut self) -> Result<Padding, ErrorStack> {
- let mut pad: c_int = 0;
- unsafe {
- try!(cvt(pkey_ctx_get_rsa_padding(self.as_ptr(), &mut pad)));
- };
- Ok(Padding(pad))
- }
-}
-
#[cfg(test)]
mod test {
use symm::Cipher;
diff --git a/openssl/src/sign.rs b/openssl/src/sign.rs
index fe38a9a8..3ae8f1a2 100644
--- a/openssl/src/sign.rs
+++ b/openssl/src/sign.rs
@@ -81,7 +81,6 @@ pub struct Signer<'a> {
md_ctx: *mut ffi::EVP_MD_CTX,
pkey_ctx: *mut ffi::EVP_PKEY_CTX,
pkey_pd: PhantomData<&'a PKeyRef>,
- pkey_ctx_pd: PhantomData<&'a PKeyCtxRef>
}
impl<'a> Drop for Signer<'a> {
@@ -116,12 +115,11 @@ impl<'a> Signer<'a> {
md_ctx: ctx,
pkey_ctx: pctx,
pkey_pd: PhantomData,
- pkey_ctx_pd: PhantomData
})
}
}
- pub fn pkey_ctx(&mut self) -> &mut PKeyCtxRef {
+ pub fn pkey_ctx_mut(&mut self) -> &mut PKeyCtxRef {
unsafe { ::types::OpenSslTypeRef::from_ptr_mut(self.pkey_ctx) }
}
@@ -159,7 +157,6 @@ pub struct Verifier<'a> {
md_ctx: *mut ffi::EVP_MD_CTX,
pkey_ctx: *mut ffi::EVP_PKEY_CTX,
pkey_pd: PhantomData<&'a PKeyRef>,
- pkey_ctx_pd: PhantomData<&'a PKeyCtxRef>,
}
impl<'a> Drop for Verifier<'a> {
@@ -194,12 +191,11 @@ impl<'a> Verifier<'a> {
md_ctx: ctx,
pkey_ctx: pctx,
pkey_pd: PhantomData,
- pkey_ctx_pd: PhantomData,
})
}
}
- pub fn pkey_ctx(&mut self) -> &mut PKeyCtxRef {
+ pub fn pkey_ctx_mut(&mut self) -> &mut PKeyCtxRef {
unsafe { ::types::OpenSslTypeRef::from_ptr_mut(self.pkey_ctx) }
}
@@ -291,8 +287,8 @@ mod test {
let pkey = PKey::from_rsa(private_key).unwrap();
let mut signer = Signer::new(MessageDigest::sha256(), &pkey).unwrap();
- assert_eq!(signer.pkey_ctx().get_rsa_padding().unwrap(), PKCS1_PADDING);
- signer.pkey_ctx().set_rsa_padding(PKCS1_PADDING).unwrap();
+ assert_eq!(signer.pkey_ctx_mut().rsa_padding().unwrap(), PKCS1_PADDING);
+ signer.pkey_ctx_mut().set_rsa_padding(PKCS1_PADDING).unwrap();
signer.update(INPUT).unwrap();
let result = signer.finish().unwrap();
@@ -306,7 +302,7 @@ mod test {
let pkey = PKey::from_rsa(private_key).unwrap();
let mut verifier = Verifier::new(MessageDigest::sha256(), &pkey).unwrap();
- assert_eq!(verifier.pkey_ctx().get_rsa_padding().unwrap(), PKCS1_PADDING);
+ assert_eq!(verifier.pkey_ctx_mut().rsa_padding().unwrap(), PKCS1_PADDING);
verifier.update(INPUT).unwrap();
assert!(verifier.finish(SIGNATURE).unwrap());
}