aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/dsa.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2018-05-20 11:27:45 -0700
committerSteven Fackler <[email protected]>2018-05-20 12:33:02 -0700
commita6fcef01c0aa71359f583342c813b8db5835178d (patch)
tree33c47b59618e5fe286904462f2d4a540804dd7ef /openssl/src/dsa.rs
parentExpose X509_VERIFY_PARAM on libressl (diff)
downloadrust-openssl-a6fcef01c0aa71359f583342c813b8db5835178d.tar.xz
rust-openssl-a6fcef01c0aa71359f583342c813b8db5835178d.zip
Overhaul openssl cfgs
Also expose hostname verification on libressl
Diffstat (limited to 'openssl/src/dsa.rs')
-rw-r--r--openssl/src/dsa.rs50
1 files changed, 28 insertions, 22 deletions
diff --git a/openssl/src/dsa.rs b/openssl/src/dsa.rs
index 0a14ccc3..abc2e297 100644
--- a/openssl/src/dsa.rs
+++ b/openssl/src/dsa.rs
@@ -11,10 +11,10 @@ use libc::c_int;
use std::fmt;
use std::ptr;
-use {cvt, cvt_p};
use bn::BigNumRef;
use error::ErrorStack;
use pkey::{HasParams, HasPublic, Private, Public};
+use {cvt, cvt_p};
generic_foreign_type_and_impl_send_sync! {
type CType = ffi::DSA;
@@ -101,7 +101,8 @@ where
/// Returns the DSA prime parameter of `self`.
pub fn p(&self) -> &BigNumRef {
unsafe {
- let p = compat::pqg(self.as_ptr())[0];
+ let mut p = ptr::null();
+ DSA_get0_pqg(self.as_ptr(), &mut p, ptr::null_mut(), ptr::null_mut());
BigNumRef::from_ptr(p as *mut _)
}
}
@@ -109,7 +110,8 @@ where
/// Returns the DSA sub-prime parameter of `self`.
pub fn q(&self) -> &BigNumRef {
unsafe {
- let q = compat::pqg(self.as_ptr())[1];
+ let mut q = ptr::null();
+ DSA_get0_pqg(self.as_ptr(), ptr::null_mut(), &mut q, ptr::null_mut());
BigNumRef::from_ptr(q as *mut _)
}
}
@@ -117,7 +119,8 @@ where
/// Returns the DSA base parameter of `self`.
pub fn g(&self) -> &BigNumRef {
unsafe {
- let g = compat::pqg(self.as_ptr())[2];
+ let mut g = ptr::null();
+ DSA_get0_pqg(self.as_ptr(), ptr::null_mut(), ptr::null_mut(), &mut g);
BigNumRef::from_ptr(g as *mut _)
}
}
@@ -184,24 +187,27 @@ impl<T> fmt::Debug for Dsa<T> {
}
}
-#[cfg(ossl110)]
-mod compat {
- use std::ptr;
- use ffi::{self, BIGNUM, DSA};
-
- pub unsafe fn pqg(d: *const DSA) -> [*const BIGNUM; 3] {
- let (mut p, mut q, mut g) = (ptr::null(), ptr::null(), ptr::null());
- ffi::DSA_get0_pqg(d, &mut p, &mut q, &mut g);
- [p, q, g]
- }
-}
-
-#[cfg(ossl10x)]
-mod compat {
- use ffi::{BIGNUM, DSA};
-
- pub unsafe fn pqg(d: *const DSA) -> [*const BIGNUM; 3] {
- [(*d).p, (*d).q, (*d).g]
+cfg_if! {
+ if #[cfg(ossl110)] {
+ use ffi::DSA_get0_pqg;
+ } else {
+ #[allow(bad_style)]
+ unsafe fn DSA_get0_pqg(
+ d: *mut ffi::DSA,
+ p: *mut *const ffi::BIGNUM,
+ q: *mut *const ffi::BIGNUM,
+ g: *mut *const ffi::BIGNUM)
+ {
+ if !p.is_null() {
+ *p = (*d).p;
+ }
+ if !q.is_null() {
+ *q = (*d).q;
+ }
+ if !g.is_null() {
+ *g = (*d).g;
+ }
+ }
}
}