diff options
| author | Benjamin Cheng <[email protected]> | 2018-06-02 10:56:31 -0400 |
|---|---|---|
| committer | Benjamin Cheng <[email protected]> | 2018-06-02 10:56:31 -0400 |
| commit | b1eb1224f50b6242f82cdeca7a876409c98e1d3a (patch) | |
| tree | 4aad295a6847fb1bd2d54880cf5bcd4b7ec522f5 /openssl/src/cms.rs | |
| parent | Add wrapper for SSL_CTX_set_psk_server_callback (diff) | |
| parent | Merge pull request #940 from CmdrMoozy/rsa_padding (diff) | |
| download | rust-openssl-b1eb1224f50b6242f82cdeca7a876409c98e1d3a.tar.xz rust-openssl-b1eb1224f50b6242f82cdeca7a876409c98e1d3a.zip | |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'openssl/src/cms.rs')
| -rw-r--r-- | openssl/src/cms.rs | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/openssl/src/cms.rs b/openssl/src/cms.rs index 6ee62fd0..d8d64c00 100644 --- a/openssl/src/cms.rs +++ b/openssl/src/cms.rs @@ -13,8 +13,8 @@ use bio::{MemBio, MemBioSlice}; use error::ErrorStack; use libc::c_uint; use pkey::{HasPrivate, PKeyRef}; -use stack::Stack; -use x509::X509; +use stack::StackRef; +use x509::{X509, X509Ref}; use {cvt, cvt_p}; bitflags! { @@ -130,30 +130,25 @@ impl CmsContentInfo { /// OpenSSL documentation at [`CMS_sign`] /// /// [`CMS_sign`]: https://www.openssl.org/docs/manmaster/man3/CMS_sign.html - pub fn sign<T: HasPrivate>( - signcert: Option<&X509>, + pub fn sign<T>( + signcert: Option<&X509Ref>, pkey: Option<&PKeyRef<T>>, - certs: Option<&Stack<X509>>, + certs: Option<&StackRef<X509>>, data: Option<&[u8]>, flags: CMSOptions, - ) -> Result<CmsContentInfo, ErrorStack> { + ) -> Result<CmsContentInfo, ErrorStack> + where + T: HasPrivate, + { unsafe { - let signcert = match signcert { - Some(cert) => cert.as_ptr(), - None => ptr::null_mut(), - }; - let pkey = match pkey { - Some(pkey) => pkey.as_ptr(), - None => ptr::null_mut(), - }; - let data_bio_ptr = match data { - Some(data) => MemBioSlice::new(data)?.as_ptr(), - None => ptr::null_mut(), - }; - let certs = match certs { - Some(certs) => certs.as_ptr(), - None => ptr::null_mut(), + let signcert = signcert.map_or(ptr::null_mut(), |p| p.as_ptr()); + let pkey = pkey.map_or(ptr::null_mut(), |p| p.as_ptr()); + let data_bio = match data { + Some(data) => Some(MemBioSlice::new(data)?), + None => None, }; + let data_bio_ptr = data_bio.as_ref().map_or(ptr::null_mut(), |p| p.as_ptr()); + let certs = certs.map_or(ptr::null_mut(), |p| p.as_ptr()); let cms = cvt_p(ffi::CMS_sign( signcert, |