diff options
| author | Steven Fackler <[email protected]> | 2016-01-22 19:07:38 -0800 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2016-01-22 19:07:38 -0800 |
| commit | 18e7e2455c3361cba5886641db6c25fd070f19c2 (patch) | |
| tree | ad33422954c1f20167f6af71d883f9c483eb46bd /openssl/src | |
| parent | Exclude test directory from package (diff) | |
| parent | Fix up RSA integration (diff) | |
| download | rust-openssl-18e7e2455c3361cba5886641db6c25fd070f19c2.tar.xz rust-openssl-18e7e2455c3361cba5886641db6c25fd070f19c2.zip | |
Merge pull request #330 from esclear/master
Add a interface to RSA structs
Diffstat (limited to 'openssl/src')
| -rw-r--r-- | openssl/src/bn/mod.rs | 12 | ||||
| -rw-r--r-- | openssl/src/crypto/mod.rs | 1 | ||||
| -rw-r--r-- | openssl/src/crypto/pkey.rs | 4 | ||||
| -rw-r--r-- | openssl/src/crypto/rsa.rs | 46 |
4 files changed, 61 insertions, 2 deletions
diff --git a/openssl/src/bn/mod.rs b/openssl/src/bn/mod.rs index 51a49241..00a0a0ca 100644 --- a/openssl/src/bn/mod.rs +++ b/openssl/src/bn/mod.rs @@ -102,6 +102,18 @@ impl BigNum { }) } + pub unsafe fn new_from_ffi(orig: *mut ffi::BIGNUM) -> Result<BigNum, SslError> { + if orig.is_null() { + panic!("Null Pointer was supplied to BigNum::new_from_ffi"); + } + let r = ffi::BN_dup(orig); + if r.is_null() { + Err(SslError::get()) + } else { + Ok(BigNum(r)) + } + } + pub fn new_from_slice(n: &[u8]) -> Result<BigNum, SslError> { BigNum::new().and_then(|v| unsafe { try_ssl_null!(ffi::BN_bin2bn(n.as_ptr(), n.len() as c_int, v.raw())); diff --git a/openssl/src/crypto/mod.rs b/openssl/src/crypto/mod.rs index 0868ee95..bb77453f 100644 --- a/openssl/src/crypto/mod.rs +++ b/openssl/src/crypto/mod.rs @@ -21,5 +21,6 @@ pub mod pkey; pub mod rand; pub mod symm; pub mod memcmp; +pub mod rsa; mod symm_internal; diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index 934a93ed..dee6cb8b 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -100,7 +100,7 @@ impl PKey { None, ptr::null_mut())); Ok(PKey { - evp: evp, + evp: evp as *mut ffi::EVP_PKEY, parts: Parts::Both, }) } @@ -119,7 +119,7 @@ impl PKey { None, ptr::null_mut())); Ok(PKey { - evp: evp, + evp: evp as *mut ffi::EVP_PKEY, parts: Parts::Public, }) } diff --git a/openssl/src/crypto/rsa.rs b/openssl/src/crypto/rsa.rs new file mode 100644 index 00000000..fca94465 --- /dev/null +++ b/openssl/src/crypto/rsa.rs @@ -0,0 +1,46 @@ +use ffi; +use bn::BigNum; +use std::fmt; + +pub struct RSA { + rsa_obj : ffi::RSA +} + +impl RSA { + // The following getters are unsafe, since BigNum::new_from_ffi fails upon null pointers + pub fn n(&self) -> BigNum { + unsafe { + BigNum::new_from_ffi(self.rsa_obj.n).unwrap() + } + } + + pub fn d(&self) -> BigNum { + unsafe { + BigNum::new_from_ffi(self.rsa_obj.d).unwrap() + } + } + + pub fn e(&self) -> BigNum { + unsafe { + BigNum::new_from_ffi(self.rsa_obj.e).unwrap() + } + } + + pub fn p(&self) -> BigNum { + unsafe { + BigNum::new_from_ffi(self.rsa_obj.p).unwrap() + } + } + + pub fn q(&self) -> BigNum { + unsafe { + BigNum::new_from_ffi(self.rsa_obj.q).unwrap() + } + } +} + +impl fmt::Debug for RSA { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "RSA") + } +} |