aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-01-22 19:07:38 -0800
committerSteven Fackler <[email protected]>2016-01-22 19:07:38 -0800
commit18e7e2455c3361cba5886641db6c25fd070f19c2 (patch)
treead33422954c1f20167f6af71d883f9c483eb46bd /openssl/src
parentExclude test directory from package (diff)
parentFix up RSA integration (diff)
downloadrust-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.rs12
-rw-r--r--openssl/src/crypto/mod.rs1
-rw-r--r--openssl/src/crypto/pkey.rs4
-rw-r--r--openssl/src/crypto/rsa.rs46
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")
+ }
+}