     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78

    use libc::*;

    use *;

    pub enum PKCS7_SIGNED {}
    pub enum PKCS7_ENVELOPE {}
    pub enum PKCS7_SIGN_ENVELOPE {}
    pub enum PKCS7_DIGEST {}
    pub enum PKCS7_ENCRYPT {}
    pub enum PKCS7 {}

    pub const PKCS7_TEXT: c_int = 0x1;
    pub const PKCS7_NOCERTS: c_int = 0x2;
    pub const PKCS7_NOSIGS: c_int = 0x4;
    pub const PKCS7_NOCHAIN: c_int = 0x8;
    pub const PKCS7_NOINTERN: c_int = 0x10;
    pub const PKCS7_NOVERIFY: c_int = 0x20;
    pub const PKCS7_DETACHED: c_int = 0x40;
    pub const PKCS7_BINARY: c_int = 0x80;
    pub const PKCS7_NOATTR: c_int = 0x100;
    pub const PKCS7_NOSMIMECAP: c_int = 0x200;
    pub const PKCS7_NOOLDMIMETYPE: c_int = 0x400;
    pub const PKCS7_CRLFEOL: c_int = 0x800;
    pub const PKCS7_STREAM: c_int = 0x1000;
    pub const PKCS7_NOCRL: c_int = 0x2000;
    pub const PKCS7_PARTIAL: c_int = 0x4000;
    pub const PKCS7_REUSE_DIGEST: c_int = 0x8000;
    #[cfg(not(any(ossl101, ossl102, libressl)))]
    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,
            cipher: *const EVP_CIPHER,
            flags: c_int,
        ) -> *mut PKCS7;

        pub fn PKCS7_verify(
            pkcs7: *mut PKCS7,
            certs: *mut stack_st_X509,
            store: *mut X509_STORE,
            indata: *mut BIO,
            out: *mut BIO,
            flags: c_int,
        ) -> c_int;

        pub fn PKCS7_sign(
            signcert: *mut X509,
            pkey: *mut EVP_PKEY,
            certs: *mut stack_st_X509,
            data: *mut BIO,
            flags: c_int,
        ) -> *mut PKCS7;

        pub fn PKCS7_decrypt(
            pkcs7: *mut PKCS7,
            pkey: *mut EVP_PKEY,
            cert: *mut X509,
            data: *mut BIO,
            flags: c_int,
        ) -> c_int;

        pub fn PKCS7_free(pkcs7: *mut PKCS7);

        pub fn SMIME_write_PKCS7(
            out: *mut BIO,
            pkcs7: *mut PKCS7,
            data: *mut BIO,
            flags: c_int,
        ) -> c_int;

        pub fn SMIME_read_PKCS7(bio: *mut BIO, bcont: *mut *mut BIO) -> *mut PKCS7;
    }