openssl_sys/handwritten/
pkcs7.rs

1use super::super::*;
2use libc::*;
3
4#[cfg(ossl300)]
5#[repr(C)]
6pub struct PKCS7_CTX {
7    libctx: *mut OSSL_LIB_CTX,
8    propq: *mut c_char,
9}
10
11#[repr(C)]
12pub struct PKCS7_SIGNED {
13    pub version: *mut ASN1_INTEGER,        /* version 1 */
14    pub md_algs: *mut stack_st_X509_ALGOR, /* md used */
15    pub cert: *mut stack_st_X509,          /* [ 0 ] */
16    pub crl: *mut stack_st_X509_CRL,       /* [ 1 ] */
17    pub signer_info: *mut stack_st_PKCS7_SIGNER_INFO,
18    pub contents: *mut PKCS7,
19}
20#[repr(C)]
21pub struct PKCS7_ENC_CONTENT {
22    pub content_type: *mut ASN1_OBJECT,
23    pub algorithm: *mut X509_ALGOR,
24    pub enc_data: *mut ASN1_OCTET_STRING, /* [ 0 ] */
25    pub cipher: *const EVP_CIPHER,
26    #[cfg(ossl300)]
27    pub ctx: *const PKCS7_CTX,
28}
29#[repr(C)]
30pub struct PKCS7_ENVELOPE {
31    pub version: *mut ASN1_INTEGER, /* version 0 */
32    pub recipientinfo: *mut stack_st_PKCS7_RECIP_INFO,
33    pub enc_data: *mut PKCS7_ENC_CONTENT,
34}
35#[repr(C)]
36pub struct PKCS7_SIGN_ENVELOPE {
37    pub version: *mut ASN1_INTEGER,        /* version 1 */
38    pub md_algs: *mut stack_st_X509_ALGOR, /* md used */
39    pub cert: *mut stack_st_X509,          /* [ 0 ] */
40    pub crl: *mut stack_st_X509_CRL,       /* [ 1 ] */
41    pub signer_info: *mut stack_st_PKCS7_SIGNER_INFO,
42    pub enc_data: *mut PKCS7_ENC_CONTENT,
43    pub recipientinfo: *mut stack_st_PKCS7_RECIP_INFO,
44}
45#[repr(C)]
46pub struct PKCS7_DIGEST {
47    pub version: *mut ASN1_INTEGER, /* version 0 */
48    pub md: *mut X509_ALGOR,        /* md used */
49    pub contents: *mut PKCS7,
50    pub digest: *mut ASN1_OCTET_STRING,
51}
52#[repr(C)]
53pub struct PKCS7_ENCRYPT {
54    pub version: *mut ASN1_INTEGER, /* version 0 */
55    pub enc_data: *mut PKCS7_ENC_CONTENT,
56}
57
58extern "C" {
59    pub fn PKCS7_SIGNED_free(info: *mut PKCS7_SIGNED);
60    pub fn PKCS7_ENC_CONTENT_free(info: *mut PKCS7_ENC_CONTENT);
61    pub fn PKCS7_ENVELOPE_free(info: *mut PKCS7_ENVELOPE);
62    pub fn PKCS7_SIGN_ENVELOPE_free(info: *mut PKCS7_SIGN_ENVELOPE);
63    pub fn PKCS7_DIGEST_free(info: *mut PKCS7_DIGEST);
64    pub fn PKCS7_SIGNER_INFO_free(info: *mut PKCS7_SIGNER_INFO);
65    pub fn PKCS7_ENCRYPT_free(enc: *mut PKCS7_ENCRYPT);
66    pub fn PKCS7_ISSUER_AND_SERIAL_free(ias: *mut PKCS7_ISSUER_AND_SERIAL);
67    pub fn PKCS7_RECIP_INFO_free(info: *mut PKCS7_RECIP_INFO);
68}
69
70#[repr(C)]
71pub struct PKCS7 {
72    /*
73     * The following is non NULL if it contains ASN1 encoding of this
74     * structure
75     */
76    pub asn1: *mut c_uchar,
77    pub length: c_long,
78    // # define PKCS7_S_HEADER  0
79    // # define PKCS7_S_BODY    1
80    // # define PKCS7_S_TAIL    2
81    pub state: c_int, /* used during processing */
82    pub detached: c_int,
83    pub type_: *mut ASN1_OBJECT,
84    /* content as defined by the type */
85    /*
86     * all encryption/message digests are applied to the 'contents', leaving
87     * out the 'type' field.
88     */
89    pub d: PKCS7_data,
90    #[cfg(ossl300)]
91    pub ctx: PKCS7_CTX,
92}
93
94#[repr(C)]
95pub union PKCS7_data {
96    pub ptr: *mut c_char,
97    /* NID_pkcs7_data */
98    pub data: *mut ASN1_OCTET_STRING,
99    /* NID_pkcs7_signed */
100    pub sign: *mut PKCS7_SIGNED,
101    /* NID_pkcs7_enveloped */
102    pub enveloped: *mut PKCS7_ENVELOPE,
103    /* NID_pkcs7_signedAndEnveloped */
104    pub signed_and_enveloped: *mut PKCS7_SIGN_ENVELOPE,
105    /* NID_pkcs7_digest */
106    pub digest: *mut PKCS7_DIGEST,
107    /* NID_pkcs7_encrypted */
108    pub encrypted: *mut PKCS7_ENCRYPT,
109    /* Anything else */
110    pub other: *mut ASN1_TYPE,
111}
112
113#[repr(C)]
114pub struct PKCS7_ISSUER_AND_SERIAL {
115    pub issuer: *mut X509_NAME,
116    pub serial: *mut ASN1_INTEGER,
117}
118
119#[repr(C)]
120pub struct PKCS7_SIGNER_INFO {
121    pub version: *mut ASN1_INTEGER, /* version 1 */
122    pub issuer_and_serial: *mut PKCS7_ISSUER_AND_SERIAL,
123    pub digest_alg: *mut X509_ALGOR,
124    pub auth_attr: *mut stack_st_X509_ATTRIBUTE, /* [ 0 ] */
125    pub digest_enc_alg: *mut X509_ALGOR,
126    pub enc_digest: *mut ASN1_OCTET_STRING,
127    pub unauth_attr: *mut stack_st_X509_ATTRIBUTE, /* [ 1 ] */
128    pub pkey: *mut EVP_PKEY,                       /* The private key to sign with */
129    #[cfg(ossl300)]
130    pub ctx: *const PKCS7_CTX,
131}
132
133stack!(stack_st_PKCS7_SIGNER_INFO);
134
135#[repr(C)]
136pub struct PKCS7_RECIP_INFO {
137    pub version: *mut ASN1_INTEGER, /* version 0 */
138    pub issuer_and_serial: *mut PKCS7_ISSUER_AND_SERIAL,
139    pub key_enc_algor: *mut X509_ALGOR,
140    pub enc_key: *mut ASN1_OCTET_STRING,
141    pub cert: *mut X509, /* get the pub-key from this */
142    #[cfg(ossl300)]
143    pub ctx: *const PKCS7_CTX,
144}
145
146stack!(stack_st_PKCS7_RECIP_INFO);
147
148extern "C" {
149    pub fn d2i_PKCS7(a: *mut *mut PKCS7, pp: *mut *const c_uchar, length: c_long) -> *mut PKCS7;
150}
151
152const_ptr_api! {
153    extern "C" {
154        pub fn i2d_PKCS7(a: #[const_ptr_if(ossl300)] PKCS7, buf: *mut *mut u8) -> c_int;
155        pub fn i2d_PKCS7_bio(bio: *mut BIO, p7: #[const_ptr_if(ossl300)]  PKCS7) -> c_int;
156    }
157}
158
159extern "C" {
160    pub fn PKCS7_encrypt(
161        certs: *mut stack_st_X509,
162        b: *mut BIO,
163        cipher: *const EVP_CIPHER,
164        flags: c_int,
165    ) -> *mut PKCS7;
166
167    pub fn PKCS7_verify(
168        pkcs7: *mut PKCS7,
169        certs: *mut stack_st_X509,
170        store: *mut X509_STORE,
171        indata: *mut BIO,
172        out: *mut BIO,
173        flags: c_int,
174    ) -> c_int;
175
176    pub fn PKCS7_get0_signers(
177        pkcs7: *mut PKCS7,
178        certs: *mut stack_st_X509,
179        flags: c_int,
180    ) -> *mut stack_st_X509;
181
182    pub fn PKCS7_sign(
183        signcert: *mut X509,
184        pkey: *mut EVP_PKEY,
185        certs: *mut stack_st_X509,
186        data: *mut BIO,
187        flags: c_int,
188    ) -> *mut PKCS7;
189
190    pub fn PKCS7_decrypt(
191        pkcs7: *mut PKCS7,
192        pkey: *mut EVP_PKEY,
193        cert: *mut X509,
194        data: *mut BIO,
195        flags: c_int,
196    ) -> c_int;
197
198    pub fn PKCS7_free(pkcs7: *mut PKCS7);
199
200    pub fn SMIME_write_PKCS7(
201        out: *mut BIO,
202        pkcs7: *mut PKCS7,
203        data: *mut BIO,
204        flags: c_int,
205    ) -> c_int;
206
207    pub fn SMIME_read_PKCS7(bio: *mut BIO, bcont: *mut *mut BIO) -> *mut PKCS7;
208
209    pub fn PKCS7_new() -> *mut PKCS7;
210
211    pub fn PKCS7_set_type(p7: *mut PKCS7, nid_pkcs7: c_int) -> c_int;
212
213    pub fn PKCS7_add_certificate(p7: *mut PKCS7, x509: *mut X509) -> c_int;
214
215    pub fn PKCS7_add_signature(
216        p7: *mut PKCS7,
217        x509: *mut X509,
218        pkey: *mut EVP_PKEY,
219        digest: *const EVP_MD,
220    ) -> *mut PKCS7_SIGNER_INFO;
221
222    pub fn PKCS7_set_signed_attributes(
223        p7si: *mut PKCS7_SIGNER_INFO,
224        attributes: *mut stack_st_X509_ATTRIBUTE,
225    ) -> c_int;
226
227    pub fn PKCS7_add_signed_attribute(
228        p7si: *mut PKCS7_SIGNER_INFO,
229        nid: c_int,
230        attrtype: c_int,
231        data: *mut c_void,
232    ) -> c_int;
233
234    pub fn PKCS7_content_new(p7: *mut PKCS7, nid_pkcs7: c_int) -> c_int;
235
236    pub fn PKCS7_dataInit(p7: *mut PKCS7, bio: *mut BIO) -> *mut BIO;
237
238    pub fn PKCS7_dataFinal(p7: *mut PKCS7, bio: *mut BIO) -> c_int;
239
240    pub fn PKCS7_get_signer_info(p7: *mut PKCS7) -> *mut stack_st_PKCS7_SIGNER_INFO;
241
242    pub fn PKCS7_SIGNER_INFO_get0_algs(
243        si: *mut PKCS7_SIGNER_INFO,
244        pk: *mut *mut EVP_PKEY,
245        pdig: *mut *mut X509_ALGOR,
246        psig: *mut *mut X509_ALGOR,
247    );
248}
249
250const_ptr_api! {
251    extern "C" {
252        pub fn PKCS7_get_signed_attribute(
253            si: #[const_ptr_if(ossl300)] PKCS7_SIGNER_INFO,
254            nid: c_int
255        ) -> *mut ASN1_TYPE;
256    }
257}