improve error handling in rsa

This commit is contained in:
Ben Batha 2016-07-29 20:01:54 -04:00
parent 3b5f175ce7
commit 67d3067dbf
1 changed files with 14 additions and 28 deletions

View File

@ -110,23 +110,17 @@ impl RSA {
{ {
let mut mem_bio = try!(MemBio::new()); let mut mem_bio = try!(MemBio::new());
let result = unsafe { unsafe {
ffi::PEM_write_bio_RSAPrivateKey(mem_bio.get_handle(), try_ssl!(ffi::PEM_write_bio_RSAPrivateKey(mem_bio.get_handle(),
self.0, self.0,
ptr::null(), ptr::null(),
ptr::null_mut(), ptr::null_mut(),
0, 0,
None, None,
ptr::null_mut()) ptr::null_mut()));
};
if result == 1 {
try!(io::copy(&mut mem_bio, writer).map_err(StreamError));
Ok(())
} else {
Err(SslError::OpenSslErrors(vec![]))
} }
try!(io::copy(&mut mem_bio, writer).map_err(StreamError));
Ok(())
} }
/// Reads an RSA public key from PEM formatted data. /// Reads an RSA public key from PEM formatted data.
@ -151,15 +145,12 @@ impl RSA {
{ {
let mut mem_bio = try!(MemBio::new()); let mut mem_bio = try!(MemBio::new());
let result = unsafe { ffi::PEM_write_bio_RSA_PUBKEY(mem_bio.get_handle(), self.0) }; unsafe {
try_ssl!(ffi::PEM_write_bio_RSA_PUBKEY(mem_bio.get_handle(), self.0))
};
if result == 1 { try!(io::copy(&mut mem_bio, writer).map_err(StreamError));
try!(io::copy(&mut mem_bio, writer).map_err(StreamError)); Ok(())
Ok(())
} else {
Err(SslError::OpenSslErrors(vec![]))
}
} }
pub fn size(&self) -> Result<u32, SslError> { pub fn size(&self) -> Result<u32, SslError> {
@ -176,19 +167,14 @@ impl RSA {
let mut sig_len = k_len; let mut sig_len = k_len;
unsafe { unsafe {
let result = ffi::RSA_sign(hash.as_nid() as c_int, try_ssl!(ffi::RSA_sign(hash.as_nid() as c_int,
message.as_ptr(), message.as_ptr(),
message.len() as u32, message.len() as u32,
sig.as_mut_ptr(), sig.as_mut_ptr(),
&mut sig_len, &mut sig_len,
self.0); self.0));
assert!(sig_len == k_len); assert!(sig_len == k_len);
Ok(sig)
if result == 1 {
Ok(sig)
} else {
Err(SslError::OpenSslErrors(vec![]))
}
} }
} }
@ -200,7 +186,7 @@ impl RSA {
sig.as_ptr(), sig.as_ptr(),
sig.len() as u32, sig.len() as u32,
self.0); self.0);
try_ssl_if!(result == -1);
Ok(result == 1) Ok(result == 1)
} }
} }