diff options
| author | Steven Fackler <[email protected]> | 2016-11-01 22:50:22 -0700 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2016-11-01 22:50:22 -0700 |
| commit | aa0040125b4006bd7520220cb8330b5b3d24ffb4 (patch) | |
| tree | df457c02c2e0208b91bc190fc7375e30287995a7 /openssl/src/dh.rs | |
| parent | Don't clear BigNums in destructor (diff) | |
| download | rust-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.rs | 16 |
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 { |