aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/cms.rs
diff options
context:
space:
mode:
authorBenjamin Cheng <[email protected]>2018-06-02 10:56:31 -0400
committerBenjamin Cheng <[email protected]>2018-06-02 10:56:31 -0400
commitb1eb1224f50b6242f82cdeca7a876409c98e1d3a (patch)
tree4aad295a6847fb1bd2d54880cf5bcd4b7ec522f5 /openssl/src/cms.rs
parentAdd wrapper for SSL_CTX_set_psk_server_callback (diff)
parentMerge pull request #940 from CmdrMoozy/rsa_padding (diff)
downloadrust-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.rs37
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,