aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2017-12-02 08:44:12 -0800
committerGitHub <[email protected]>2017-12-02 08:44:12 -0800
commitb40bddfe02ce67f475af7c556a4e8b308e573e05 (patch)
treeace02c7011b366ff6c3ca26168737cfa8202f64b
parentMerge pull request #783 from ignatenkobrain/patch-1 (diff)
parentFixing the CI tests (diff)
downloadrust-openssl-b40bddfe02ce67f475af7c556a4e8b308e573e05.tar.xz
rust-openssl-b40bddfe02ce67f475af7c556a4e8b308e573e05.zip
Merge pull request #784 from P-E-Meunier/master
Adding dp(), dq() and qi() methods to RSA, to get the CRT parameters back
-rw-r--r--openssl-sys/src/ossl110.rs6
-rw-r--r--openssl/src/rsa.rs43
2 files changed, 49 insertions, 0 deletions
diff --git a/openssl-sys/src/ossl110.rs b/openssl-sys/src/ossl110.rs
index ff1e0c7c..fabfb2b6 100644
--- a/openssl-sys/src/ossl110.rs
+++ b/openssl-sys/src/ossl110.rs
@@ -172,6 +172,12 @@ extern "C" {
d: *mut *const ::BIGNUM,
);
pub fn RSA_get0_factors(r: *const ::RSA, p: *mut *const ::BIGNUM, q: *mut *const ::BIGNUM);
+ pub fn RSA_get0_crt_params(
+ r: *const ::RSA,
+ dmp1: *mut *const ::BIGNUM,
+ dmq1: *mut *const ::BIGNUM,
+ iqmp: *mut *const ::BIGNUM,
+ );
pub fn RSA_set0_key(
r: *mut ::RSA,
n: *mut ::BIGNUM,
diff --git a/openssl/src/rsa.rs b/openssl/src/rsa.rs
index 3f4e8014..b02b9216 100644
--- a/openssl/src/rsa.rs
+++ b/openssl/src/rsa.rs
@@ -222,6 +222,39 @@ impl RsaRef {
}
}
}
+
+ pub fn dp(&self) -> Option<&BigNumRef> {
+ unsafe {
+ let dp = compat::crt_params(self.as_ptr())[0];
+ if dp.is_null() {
+ None
+ } else {
+ Some(BigNumRef::from_ptr(dp as *mut _))
+ }
+ }
+ }
+
+ pub fn dq(&self) -> Option<&BigNumRef> {
+ unsafe {
+ let dq = compat::crt_params(self.as_ptr())[1];
+ if dq.is_null() {
+ None
+ } else {
+ Some(BigNumRef::from_ptr(dq as *mut _))
+ }
+ }
+ }
+
+ pub fn qi(&self) -> Option<&BigNumRef> {
+ unsafe {
+ let qi = compat::crt_params(self.as_ptr())[2];
+ if qi.is_null() {
+ None
+ } else {
+ Some(BigNumRef::from_ptr(qi as *mut _))
+ }
+ }
+ }
}
impl Rsa {
@@ -348,6 +381,12 @@ mod compat {
[p, q]
}
+ pub unsafe fn crt_params(r: *const RSA) -> [*const BIGNUM; 3] {
+ let (mut dp, mut dq, mut qi) = (ptr::null(), ptr::null(), ptr::null());
+ ffi::RSA_get0_crt_params(r, &mut dp, &mut dq, &mut qi);
+ [dp, dq, qi]
+ }
+
pub unsafe fn set_key(r: *mut RSA, n: *mut BIGNUM, e: *mut BIGNUM, d: *mut BIGNUM) -> c_int {
ffi::RSA_set0_key(r, n, e, d)
}
@@ -379,6 +418,10 @@ mod compat {
[(*r).p, (*r).q]
}
+ pub unsafe fn crt_params(r: *const RSA) -> [*const BIGNUM; 3] {
+ [(*r).dmp1, (*r).dmq1, (*r).iqmp]
+ }
+
pub unsafe fn set_key(r: *mut RSA, n: *mut BIGNUM, e: *mut BIGNUM, d: *mut BIGNUM) -> c_int {
(*r).n = n;
(*r).e = e;