aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/dh.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-11-01 22:50:22 -0700
committerSteven Fackler <[email protected]>2016-11-01 22:50:22 -0700
commitaa0040125b4006bd7520220cb8330b5b3d24ffb4 (patch)
treedf457c02c2e0208b91bc190fc7375e30287995a7 /openssl/src/dh.rs
parentDon't clear BigNums in destructor (diff)
downloadrust-openssl-aa0040125b4006bd7520220cb8330b5b3d24ffb4.tar.xz
rust-openssl-aa0040125b4006bd7520220cb8330b5b3d24ffb4.zip
Use built in DH parameters when available
Fall back to a hardcoded PEM blob on 1.0.1, but serialized from DH_get_2048_256.
Diffstat (limited to 'openssl/src/dh.rs')
-rw-r--r--openssl/src/dh.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/openssl/src/dh.rs b/openssl/src/dh.rs
index 4ae145d6..4dfe26cb 100644
--- a/openssl/src/dh.rs
+++ b/openssl/src/dh.rs
@@ -5,11 +5,25 @@ use std::ptr;
use std::mem;
use {cvt, cvt_p};
+use bio::MemBio;
use bn::BigNum;
-use types::OpenSslType;
+use types::{OpenSslType, Ref};
type_!(Dh, ffi::DH, ffi::DH_free);
+impl Ref<Dh> {
+ /// Encodes the parameters to PEM.
+ pub fn to_pem(&self) -> Result<Vec<u8>, ErrorStack> {
+ let mem_bio = try!(MemBio::new());
+
+ unsafe {
+ try!(cvt(ffi::PEM_write_bio_DHparams(mem_bio.as_ptr(), self.as_ptr())));
+ }
+
+ Ok(mem_bio.get_buf().to_owned())
+ }
+}
+
impl Dh {
pub fn from_params(p: BigNum, g: BigNum, q: BigNum) -> Result<Dh, ErrorStack> {
unsafe {