summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openssl-sys/src/pkcs7.rs4
-rw-r--r--openssl/src/pkcs7.rs21
2 files changed, 25 insertions, 0 deletions
diff --git a/openssl-sys/src/pkcs7.rs b/openssl-sys/src/pkcs7.rs
index 454a04df..5aa55ff8 100644
--- a/openssl-sys/src/pkcs7.rs
+++ b/openssl-sys/src/pkcs7.rs
@@ -29,6 +29,10 @@ pub const PKCS7_REUSE_DIGEST: c_int = 0x8000;
pub const PKCS7_NO_DUAL_CONTENT: c_int = 0x10000;
extern "C" {
+ pub fn d2i_PKCS7(a: *mut *mut PKCS7, pp: *mut *const c_uchar, length: c_long) -> *mut PKCS7;
+
+ pub fn i2d_PKCS7(a: *mut PKCS7, buf: *mut *mut u8) -> c_int;
+
pub fn PKCS7_encrypt(
certs: *mut stack_st_X509,
b: *mut BIO,
diff --git a/openssl/src/pkcs7.rs b/openssl/src/pkcs7.rs
index a4d93cf9..7820739c 100644
--- a/openssl/src/pkcs7.rs
+++ b/openssl/src/pkcs7.rs
@@ -61,6 +61,17 @@ impl Pkcs7 {
ffi::PEM_read_bio_PKCS7
}
+ from_der! {
+ /// Deserializes a DER-encoded PKCS#7 signature
+ ///
+ /// This corresponds to [`d2i_PKCS7`].
+ ///
+ /// [`d2i_PKCS7`]: https://www.openssl.org/docs/man1.1.0/man3/d2i_PKCS7.html
+ from_der,
+ Pkcs7,
+ ffi::d2i_PKCS7
+ }
+
/// Parses a message in S/MIME format.
///
/// Returns the loaded signature, along with the cleartext message (if
@@ -181,6 +192,16 @@ impl Pkcs7Ref {
ffi::PEM_write_bio_PKCS7
}
+ to_der! {
+ /// Serializes the data into a DER-encoded PKCS#7 structure.
+ ///
+ /// This corresponds to [`i2d_PKCS7`].
+ ///
+ /// [`i2d_PKCS7`]: https://www.openssl.org/docs/man1.1.0/man3/i2d_PKCS7.html
+ to_der,
+ ffi::i2d_PKCS7
+ }
+
/// Decrypts data using the provided private key.
///
/// `pkey` is the recipient's private key, and `cert` is the recipient's