     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

    use libc::*;

    use *;

    pub enum PKCS12 {}

    extern "C" {
        pub fn PKCS12_free(p12: *mut PKCS12);
        pub fn i2d_PKCS12(a: *mut PKCS12, buf: *mut *mut u8) -> c_int;
        pub fn d2i_PKCS12(a: *mut *mut PKCS12, pp: *mut *const u8, length: c_long) -> *mut PKCS12;

        pub fn PKCS12_parse(
            p12: *mut PKCS12,
            pass: *const c_char,
            pkey: *mut *mut EVP_PKEY,
            cert: *mut *mut X509,
            ca: *mut *mut stack_st_X509,
        ) -> c_int;
    }
    const_ptr_api! {
        extern "C" {
            pub fn PKCS12_create(
                pass: #[const_ptr_if(any(ossl110, libressl280))] c_char,
                friendly_name: #[const_ptr_if(any(ossl110, libressl280))] c_char,
                pkey: *mut EVP_PKEY,
                cert: *mut X509,
                ca: *mut stack_st_X509,
                nid_key: c_int,
                nid_cert: c_int,
                iter: c_int,
                mac_iter: c_int,
                keytype: c_int,
            ) -> *mut PKCS12;
        }
    }

    extern "C" {
        pub fn i2d_PKCS12_bio(b: *mut BIO, a: *mut PKCS12) -> c_int;
    }