Adding dp(), dq() and qi() methods to RSA, to get the CRT parameters back
This commit is contained in:
parent
490e8a4f69
commit
fccb2eab4e
|
|
@ -172,6 +172,12 @@ extern "C" {
|
||||||
d: *mut *const ::BIGNUM,
|
d: *mut *const ::BIGNUM,
|
||||||
);
|
);
|
||||||
pub fn RSA_get0_factors(r: *const ::RSA, p: *mut *const ::BIGNUM, q: *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,
|
||||||
|
) -> c_int;
|
||||||
pub fn RSA_set0_key(
|
pub fn RSA_set0_key(
|
||||||
r: *mut ::RSA,
|
r: *mut ::RSA,
|
||||||
n: *mut ::BIGNUM,
|
n: *mut ::BIGNUM,
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
impl Rsa {
|
||||||
|
|
@ -348,6 +381,12 @@ mod compat {
|
||||||
[p, q]
|
[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 {
|
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)
|
ffi::RSA_set0_key(r, n, e, d)
|
||||||
}
|
}
|
||||||
|
|
@ -379,6 +418,10 @@ mod compat {
|
||||||
[(*r).p, (*r).q]
|
[(*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 {
|
pub unsafe fn set_key(r: *mut RSA, n: *mut BIGNUM, e: *mut BIGNUM, d: *mut BIGNUM) -> c_int {
|
||||||
(*r).n = n;
|
(*r).n = n;
|
||||||
(*r).e = e;
|
(*r).e = e;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue