variant_ssl_sys/handwritten/
types.rs

1use libc::*;
2
3#[allow(unused_imports)]
4use super::super::*;
5
6pub enum ASN1_OBJECT {}
7pub enum ASN1_VALUE {}
8
9pub type ASN1_BOOLEAN = c_int;
10pub enum ASN1_INTEGER {}
11pub enum ASN1_ENUMERATED {}
12pub enum ASN1_GENERALIZEDTIME {}
13pub enum ASN1_STRING {}
14pub enum ASN1_BIT_STRING {}
15pub enum ASN1_TIME {}
16pub enum ASN1_OCTET_STRING {}
17pub enum ASN1_NULL {}
18pub enum ASN1_PRINTABLESTRING {}
19pub enum ASN1_T61STRING {}
20pub enum ASN1_IA5STRING {}
21pub enum ASN1_GENERALSTRING {}
22pub enum ASN1_BMPSTRING {}
23pub enum ASN1_UNIVERSALSTRING {}
24pub enum ASN1_UTCTIME {}
25pub enum ASN1_VISIBLESTRING {}
26pub enum ASN1_UTF8STRING {}
27
28pub enum bio_st {} // FIXME remove
29cfg_if! {
30    if #[cfg(any(ossl110, libressl280))] {
31        pub enum BIO {}
32    } else {
33        #[repr(C)]
34        pub struct BIO {
35            pub method: *mut BIO_METHOD,
36            pub callback: Option<
37                unsafe extern "C" fn(*mut BIO, c_int, *const c_char, c_int, c_long, c_long) -> c_long,
38            >,
39            pub cb_arg: *mut c_char,
40            pub init: c_int,
41            pub shutdown: c_int,
42            pub flags: c_int,
43            pub retry_reason: c_int,
44            pub num: c_int,
45            pub ptr: *mut c_void,
46            pub next_bio: *mut BIO,
47            pub prev_bio: *mut BIO,
48            pub references: c_int,
49            pub num_read: c_ulong,
50            pub num_write: c_ulong,
51            pub ex_data: CRYPTO_EX_DATA,
52        }
53    }
54}
55cfg_if! {
56    if #[cfg(ossl320)] {
57        pub enum BIO_ADDR {}
58        pub enum BIO_POLL_DESCRIPTOR {}
59        #[repr(C)]
60        pub struct BIO_MSG {
61            pub data: *mut c_void,
62            pub data_len: usize,
63            pub peer: *mut BIO_ADDR,
64            pub local: *mut BIO_ADDR,
65            pub flags: u64,
66        }
67    }
68}
69cfg_if! {
70    if #[cfg(any(ossl110, libressl350))] {
71        pub enum BIGNUM {}
72    } else {
73        #[repr(C)]
74        pub struct BIGNUM {
75            pub d: *mut BN_ULONG,
76            pub top: c_int,
77            pub dmax: c_int,
78            pub neg: c_int,
79            pub flags: c_int,
80        }
81    }
82}
83pub enum BN_BLINDING {}
84pub enum BN_MONT_CTX {}
85
86pub enum BN_CTX {}
87pub enum BN_GENCB {}
88
89cfg_if! {
90    if #[cfg(any(ossl110, libressl280))] {
91        pub enum EVP_CIPHER {}
92    } else {
93        #[repr(C)]
94        pub struct EVP_CIPHER {
95            pub nid: c_int,
96            pub block_size: c_int,
97            pub key_len: c_int,
98            pub iv_len: c_int,
99            pub flags: c_ulong,
100            pub init: Option<
101                unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *const c_uchar, *const c_uchar, c_int) -> c_int,
102            >,
103            pub do_cipher: Option<
104                unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut c_uchar, *const c_uchar, size_t) -> c_int,
105            >,
106            pub cleanup: Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX) -> c_int>,
107            pub ctx_size: c_int,
108            pub set_asn1_parameters:
109                Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut ASN1_TYPE) -> c_int>,
110            pub get_asn1_parameters:
111                Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut ASN1_TYPE) -> c_int>,
112            pub ctrl:
113                Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, c_int, c_int, *mut c_void) -> c_int>,
114            pub app_data: *mut c_void,
115        }
116    }
117}
118pub enum EVP_CIPHER_CTX {}
119pub enum EVP_MD {}
120#[cfg(ossl300)]
121pub enum EVP_MAC {}
122#[cfg(ossl300)]
123pub enum EVP_MAC_CTX {}
124cfg_if! {
125    if #[cfg(any(ossl110, libressl280))] {
126        pub enum EVP_MD_CTX {}
127    } else {
128        #[repr(C)]
129        pub struct EVP_MD_CTX {
130            digest: *mut EVP_MD,
131            engine: *mut ENGINE,
132            flags: c_ulong,
133            md_data: *mut c_void,
134            pctx: *mut EVP_PKEY_CTX,
135            update: *mut c_void,
136        }
137    }
138}
139
140pub enum PKCS8_PRIV_KEY_INFO {}
141
142pub enum EVP_PKEY_ASN1_METHOD {}
143
144pub enum EVP_PKEY_CTX {}
145
146pub enum CMAC_CTX {}
147
148cfg_if! {
149    if #[cfg(any(ossl110, libressl280))] {
150        pub enum HMAC_CTX {}
151    } else {
152        #[repr(C)]
153        pub struct HMAC_CTX {
154            md: *mut EVP_MD,
155            md_ctx: EVP_MD_CTX,
156            i_ctx: EVP_MD_CTX,
157            o_ctx: EVP_MD_CTX,
158            key_length: c_uint,
159            key: [c_uchar; 128],
160        }
161    }
162}
163
164cfg_if! {
165    if #[cfg(any(ossl110, libressl280))] {
166        pub enum DH {}
167    } else {
168        #[repr(C)]
169        pub struct DH {
170            pub pad: c_int,
171            pub version: c_int,
172            pub p: *mut BIGNUM,
173            pub g: *mut BIGNUM,
174            pub length: c_long,
175            pub pub_key: *mut BIGNUM,
176            pub priv_key: *mut BIGNUM,
177            pub flags: c_int,
178            pub method_mont_p: *mut BN_MONT_CTX,
179            pub q: *mut BIGNUM,
180            pub j: *mut BIGNUM,
181            pub seed: *mut c_uchar,
182            pub seedlen: c_int,
183            pub counter: *mut BIGNUM,
184            pub references: c_int,
185            pub ex_data: CRYPTO_EX_DATA,
186            pub meth: *const DH_METHOD,
187            pub engine: *mut ENGINE,
188        }
189    }
190}
191pub enum DH_METHOD {}
192
193cfg_if! {
194    if #[cfg(any(ossl110, libressl280))] {
195        pub enum DSA {}
196    } else {
197        #[repr(C)]
198        pub struct DSA {
199            pub pad: c_int,
200            pub version: c_long,
201            pub write_params: c_int,
202
203            pub p: *mut BIGNUM,
204            pub q: *mut BIGNUM,
205            pub g: *mut BIGNUM,
206            pub pub_key: *mut BIGNUM,
207            pub priv_key: *mut BIGNUM,
208            pub kinv: *mut BIGNUM,
209            pub r: *mut BIGNUM,
210
211            pub flags: c_int,
212            pub method_mont_p: *mut BN_MONT_CTX,
213            pub references: c_int,
214            pub ex_data: CRYPTO_EX_DATA,
215            pub meth: *const DSA_METHOD,
216            pub engine: *mut ENGINE,
217        }
218    }
219}
220pub enum DSA_METHOD {}
221
222cfg_if! {
223    if #[cfg(any(ossl110, libressl280))] {
224        pub enum RSA {}
225    } else if #[cfg(libressl)] {
226        #[repr(C)]
227        pub struct RSA {
228            pub pad: c_int,
229            pub version: c_long,
230            pub meth: *const RSA_METHOD,
231
232            pub engine: *mut ENGINE,
233            pub n: *mut BIGNUM,
234            pub e: *mut BIGNUM,
235            pub d: *mut BIGNUM,
236            pub p: *mut BIGNUM,
237            pub q: *mut BIGNUM,
238            pub dmp1: *mut BIGNUM,
239            pub dmq1: *mut BIGNUM,
240            pub iqmp: *mut BIGNUM,
241
242            pub ex_data: CRYPTO_EX_DATA,
243            pub references: c_int,
244            pub flags: c_int,
245
246            pub _method_mod_n: *mut BN_MONT_CTX,
247            pub _method_mod_p: *mut BN_MONT_CTX,
248            pub _method_mod_q: *mut BN_MONT_CTX,
249
250            pub blinding: *mut BN_BLINDING,
251            pub mt_blinding: *mut BN_BLINDING,
252        }
253    } else {
254        #[repr(C)]
255        pub struct RSA {
256            pub pad: c_int,
257            pub version: c_long,
258            pub meth: *const RSA_METHOD,
259
260            pub engine: *mut ENGINE,
261            pub n: *mut BIGNUM,
262            pub e: *mut BIGNUM,
263            pub d: *mut BIGNUM,
264            pub p: *mut BIGNUM,
265            pub q: *mut BIGNUM,
266            pub dmp1: *mut BIGNUM,
267            pub dmq1: *mut BIGNUM,
268            pub iqmp: *mut BIGNUM,
269
270            pub ex_data: CRYPTO_EX_DATA,
271            pub references: c_int,
272            pub flags: c_int,
273
274            pub _method_mod_n: *mut BN_MONT_CTX,
275            pub _method_mod_p: *mut BN_MONT_CTX,
276            pub _method_mod_q: *mut BN_MONT_CTX,
277
278            pub bignum_data: *mut c_char,
279            pub blinding: *mut BN_BLINDING,
280            pub mt_blinding: *mut BN_BLINDING,
281        }
282    }
283}
284pub enum RSA_METHOD {}
285
286pub enum EC_KEY {}
287
288cfg_if! {
289    if #[cfg(any(ossl110, libressl280))] {
290        pub enum X509 {}
291    } else if #[cfg(libressl)] {
292        #[repr(C)]
293        pub struct X509 {
294            pub cert_info: *mut X509_CINF,
295            pub sig_alg: *mut X509_ALGOR,
296            pub signature: *mut ASN1_BIT_STRING,
297            pub valid: c_int,
298            pub references: c_int,
299            pub name: *mut c_char,
300            pub ex_data: CRYPTO_EX_DATA,
301            pub ex_pathlen: c_long,
302            pub ex_pcpathlen: c_long,
303            pub ex_flags: c_ulong,
304            pub ex_kusage: c_ulong,
305            pub ex_xkusage: c_ulong,
306            pub ex_nscert: c_ulong,
307            skid: *mut c_void,
308            akid: *mut c_void,
309            policy_cache: *mut c_void,
310            crldp: *mut c_void,
311            altname: *mut c_void,
312            nc: *mut c_void,
313            #[cfg(not(osslconf = "OPENSSL_NO_SHA"))]
314            sha1_hash: [c_uchar; 20],
315            aux: *mut c_void,
316        }
317    } else {
318        #[repr(C)]
319        pub struct X509 {
320            pub cert_info: *mut X509_CINF,
321            pub sig_alg: *mut X509_ALGOR,
322            pub signature: *mut ASN1_BIT_STRING,
323            pub valid: c_int,
324            pub references: c_int,
325            pub name: *mut c_char,
326            pub ex_data: CRYPTO_EX_DATA,
327            pub ex_pathlen: c_long,
328            pub ex_pcpathlen: c_long,
329            pub ex_flags: c_ulong,
330            pub ex_kusage: c_ulong,
331            pub ex_xkusage: c_ulong,
332            pub ex_nscert: c_ulong,
333            skid: *mut c_void,
334            akid: *mut c_void,
335            policy_cache: *mut c_void,
336            crldp: *mut c_void,
337            altname: *mut c_void,
338            nc: *mut c_void,
339            #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))]
340            rfc3779_addr: *mut c_void,
341            #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))]
342            rfc3779_asid: *mut c_void,
343            #[cfg(not(osslconf = "OPENSSL_NO_SHA"))]
344            sha1_hash: [c_uchar; 20],
345            aux: *mut c_void,
346        }
347    }
348}
349cfg_if! {
350    if #[cfg(any(ossl110, libressl382))] {
351        pub enum X509_ALGOR {}
352    } else {
353        #[repr(C)]
354        pub struct X509_ALGOR {
355            pub algorithm: *mut ASN1_OBJECT,
356            parameter: *mut c_void,
357        }
358    }
359}
360
361stack!(stack_st_X509_ALGOR);
362
363pub enum X509_LOOKUP_METHOD {}
364
365pub enum X509_NAME {}
366
367pub enum X509_PUBKEY {}
368
369cfg_if! {
370    if #[cfg(any(ossl110, libressl270))] {
371        pub enum X509_STORE {}
372    } else {
373        #[repr(C)]
374        pub struct X509_STORE {
375            cache: c_int,
376            pub objs: *mut stack_st_X509_OBJECT,
377            get_cert_methods: *mut stack_st_X509_LOOKUP,
378            param: *mut X509_VERIFY_PARAM,
379            verify: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>,
380            verify_cb: Option<extern "C" fn(ok: c_int, ctx: *mut X509_STORE_CTX) -> c_int>,
381            get_issuer: Option<
382                extern "C" fn(issuer: *mut *mut X509, ctx: *mut X509_STORE_CTX, x: *mut X509) -> c_int,
383            >,
384            check_issued:
385                Option<extern "C" fn(ctx: *mut X509_STORE_CTX, x: *mut X509, issuer: *mut X509) -> c_int>,
386            check_revocation: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>,
387            get_crl: Option<
388                extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut *mut X509_CRL, x: *mut X509) -> c_int,
389            >,
390            check_crl: Option<extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut X509_CRL) -> c_int>,
391            cert_crl:
392                Option<extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut X509_CRL, x: *mut X509) -> c_int>,
393            lookup_certs:
394                Option<extern "C" fn(ctx: *mut X509_STORE_CTX, nm: *const X509_NAME) -> *mut stack_st_X509>,
395            lookup_crls: Option<
396                extern "C" fn(ctx: *const X509_STORE_CTX, nm: *const X509_NAME) -> *mut stack_st_X509_CRL,
397            >,
398            cleanup: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>,
399            ex_data: CRYPTO_EX_DATA,
400            references: c_int,
401        }
402    }
403}
404
405pub enum X509_STORE_CTX {}
406
407cfg_if! {
408    if #[cfg(any(ossl110, libressl280))] {
409        pub enum X509_VERIFY_PARAM {}
410    } else if #[cfg(libressl251)] {
411        #[repr(C)]
412        pub struct X509_VERIFY_PARAM {
413            pub name: *mut c_char,
414            pub check_time: time_t,
415            pub inh_flags: c_ulong,
416            pub flags: c_ulong,
417            pub purpose: c_int,
418            pub trust: c_int,
419            pub depth: c_int,
420            pub policies: *mut stack_st_ASN1_OBJECT,
421            id: *mut c_void,
422        }
423    } else if #[cfg(libressl)] {
424        #[repr(C)]
425        pub struct X509_VERIFY_PARAM {
426            pub name: *mut c_char,
427            pub check_time: time_t,
428            pub inh_flags: c_ulong,
429            pub flags: c_ulong,
430            pub purpose: c_int,
431            pub trust: c_int,
432            pub depth: c_int,
433            pub policies: *mut stack_st_ASN1_OBJECT,
434            //pub id: *mut X509_VERIFY_PARAM_ID,
435        }
436    } else {
437        #[repr(C)]
438        pub struct X509_VERIFY_PARAM {
439            pub name: *mut c_char,
440            pub check_time: time_t,
441            pub inh_flags: c_ulong,
442            pub flags: c_ulong,
443            pub purpose: c_int,
444            pub trust: c_int,
445            pub depth: c_int,
446            pub policies: *mut stack_st_ASN1_OBJECT,
447            #[cfg(ossl102)]
448            pub id: *mut X509_VERIFY_PARAM_ID,
449        }
450    }
451}
452
453cfg_if! {
454    if #[cfg(any(ossl110, libressl270))] {
455        pub enum X509_OBJECT {}
456    } else {
457        #[repr(C)]
458        pub struct X509_OBJECT {
459            pub type_: c_int,
460            pub data: X509_OBJECT_data,
461        }
462        #[repr(C)]
463        pub union X509_OBJECT_data {
464            pub ptr: *mut c_char,
465            pub x509: *mut X509,
466            pub crl: *mut X509_CRL,
467            pub pkey: *mut EVP_PKEY,
468        }
469    }
470}
471
472pub enum X509_LOOKUP {}
473
474#[repr(C)]
475pub struct X509V3_CTX {
476    flags: c_int,
477    issuer_cert: *mut c_void,
478    subject_cert: *mut c_void,
479    subject_req: *mut c_void,
480    crl: *mut c_void,
481    #[cfg(not(libressl400))]
482    db_meth: *mut c_void,
483    db: *mut c_void,
484    #[cfg(ossl300)]
485    issuer_pkey: *mut c_void,
486    // I like the last comment line, it is copied from OpenSSL sources:
487    // Maybe more here
488}
489pub enum CONF {}
490#[cfg(ossl110)]
491pub enum OPENSSL_INIT_SETTINGS {}
492
493pub enum ENGINE {}
494cfg_if! {
495    if #[cfg(any(ossl110, libressl280))] {
496        pub enum SSL {}
497    } else if #[cfg(libressl251)] {
498        #[repr(C)]
499        pub struct SSL {
500            version: c_int,
501            method: *const SSL_METHOD,
502            rbio: *mut BIO,
503            wbio: *mut BIO,
504            bbio: *mut BIO,
505            pub server: c_int,
506            s3: *mut c_void,
507            d1: *mut c_void,
508            param: *mut c_void,
509            cipher_list: *mut stack_st_SSL_CIPHER,
510            cert: *mut c_void,
511            sid_ctx_length: c_uint,
512            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
513            session: *mut SSL_SESSION,
514            verify_mode: c_int,
515            error: c_int,
516            error_code: c_int,
517            ctx: *mut SSL_CTX,
518            verify_result: c_long,
519            references: c_int,
520            client_version: c_int,
521            max_send_fragment: c_uint,
522            tlsext_hostname: *mut c_char,
523            tlsext_status_type: c_int,
524            initial_ctx: *mut SSL_CTX,
525            enc_read_ctx: *mut EVP_CIPHER_CTX,
526            read_hash: *mut EVP_MD_CTX,
527            internal: *mut c_void,
528        }
529    } else if #[cfg(libressl)] {
530        #[repr(C)]
531        pub struct SSL {
532            version: c_int,
533            type_: c_int,
534            method: *const SSL_METHOD,
535            rbio: *mut c_void,
536            wbio: *mut c_void,
537            bbio: *mut c_void,
538            rwstate: c_int,
539            in_handshake: c_int,
540            handshake_func: Option<unsafe extern "C" fn(*mut SSL) -> c_int>,
541            pub server: c_int,
542            new_session: c_int,
543            quiet_shutdown: c_int,
544            shutdown: c_int,
545            state: c_int,
546            rstate: c_int,
547            init_buf: *mut c_void,
548            init_msg: *mut c_void,
549            init_num: c_int,
550            init_off: c_int,
551            packet: *mut c_uchar,
552            packet_length: c_uint,
553            s3: *mut c_void,
554            d1: *mut c_void,
555            read_ahead: c_int,
556            msg_callback: Option<
557                unsafe extern "C" fn(c_int,
558                                    c_int,
559                                    c_int,
560                                    *const c_void,
561                                    size_t,
562                                    *mut SSL,
563                                    *mut c_void),
564            >,
565            msg_callback_arg: *mut c_void,
566            hit: c_int,
567            param: *mut c_void,
568            cipher_list: *mut stack_st_SSL_CIPHER,
569            cipher_list_by_id: *mut stack_st_SSL_CIPHER,
570            mac_flags: c_int,
571            aead_read_ctx: *mut c_void,
572            enc_read_ctx: *mut EVP_CIPHER_CTX,
573            read_hash: *mut EVP_MD_CTX,
574            aead_write_ctx: *mut c_void,
575            enc_write_ctx: *mut EVP_CIPHER_CTX,
576            write_hash: *mut EVP_MD_CTX,
577            cert: *mut c_void,
578            sid_ctx_length: c_uint,
579            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
580            session: *mut SSL_SESSION,
581            generate_session_id: GEN_SESSION_CB,
582            verify_mode: c_int,
583            verify_callback: Option<unsafe extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
584            info_callback: Option<unsafe extern "C" fn(*mut SSL, c_int, c_int)>,
585            error: c_int,
586            error_code: c_int,
587            ctx: *mut SSL_CTX,
588            debug: c_int,
589            verify_result: c_long,
590            ex_data: CRYPTO_EX_DATA,
591            client_CA: *mut stack_st_X509_NAME,
592            references: c_int,
593            options: c_ulong,
594            mode: c_ulong,
595            max_cert_list: c_long,
596            first_packet: c_int,
597            client_version: c_int,
598            max_send_fragment: c_uint,
599            tlsext_debug_cb:
600                Option<unsafe extern "C" fn(*mut SSL, c_int, c_int, *mut c_uchar, c_int, *mut c_void)>,
601            tlsext_debug_arg: *mut c_void,
602            tlsext_hostname: *mut c_char,
603            servername_done: c_int,
604            tlsext_status_type: c_int,
605            tlsext_status_expected: c_int,
606            tlsext_ocsp_ids: *mut c_void,
607            tlsext_ocsp_exts: *mut c_void,
608            tlsext_ocsp_resp: *mut c_uchar,
609            tlsext_ocsp_resplen: c_int,
610            tlsext_ticket_expected: c_int,
611            tlsext_ecpointformatlist_length: size_t,
612            tlsext_ecpointformatlist: *mut c_uchar,
613            tlsext_ellipticcurvelist_length: size_t,
614            tlsext_ellipticcurvelist: *mut c_uchar,
615            tlsext_session_ticket: *mut c_void,
616            tlsext_session_ticket_ext_cb: tls_session_ticket_ext_cb_fn,
617            tls_session_ticket_ext_cb_arg: *mut c_void,
618            tls_session_secret_cb: tls_session_secret_cb_fn,
619            tls_session_secret_cb_arg: *mut c_void,
620            initial_ctx: *mut SSL_CTX,
621            next_proto_negotiated: *mut c_uchar,
622            next_proto_negotiated_len: c_uchar,
623            srtp_profiles: *mut c_void,
624            srtp_profile: *mut c_void,
625            tlsext_heartbeat: c_uint,
626            tlsext_hb_pending: c_uint,
627            tlsext_hb_seq: c_uint,
628            alpn_client_proto_list: *mut c_uchar,
629            alpn_client_proto_list_len: c_uint,
630            renegotiate: c_int,
631        }
632    } else {
633        #[repr(C)]
634        pub struct SSL {
635            version: c_int,
636            type_: c_int,
637            method: *const SSL_METHOD,
638            rbio: *mut c_void,
639            wbio: *mut c_void,
640            bbio: *mut c_void,
641            rwstate: c_int,
642            in_handshake: c_int,
643            handshake_func: Option<unsafe extern "C" fn(*mut SSL) -> c_int>,
644            pub server: c_int,
645            new_session: c_int,
646            quiet_session: c_int,
647            shutdown: c_int,
648            state: c_int,
649            rstate: c_int,
650            init_buf: *mut c_void,
651            init_msg: *mut c_void,
652            init_num: c_int,
653            init_off: c_int,
654            packet: *mut c_uchar,
655            packet_length: c_uint,
656            s2: *mut c_void,
657            s3: *mut c_void,
658            d1: *mut c_void,
659            read_ahead: c_int,
660            msg_callback: Option<
661                unsafe extern "C" fn(c_int, c_int, c_int, *const c_void, size_t, *mut SSL, *mut c_void),
662            >,
663            msg_callback_arg: *mut c_void,
664            hit: c_int,
665            param: *mut c_void,
666            cipher_list: *mut stack_st_SSL_CIPHER,
667            cipher_list_by_id: *mut stack_st_SSL_CIPHER,
668            mac_flags: c_int,
669            enc_read_ctx: *mut EVP_CIPHER_CTX,
670            read_hash: *mut EVP_MD_CTX,
671            expand: *mut c_void,
672            enc_write_ctx: *mut EVP_CIPHER_CTX,
673            write_hash: *mut EVP_MD_CTX,
674            compress: *mut c_void,
675            cert: *mut c_void,
676            sid_ctx_length: c_uint,
677            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
678            session: *mut SSL_SESSION,
679            generate_session_id: GEN_SESSION_CB,
680            verify_mode: c_int,
681            verify_callback: Option<unsafe extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
682            info_callback: Option<unsafe extern "C" fn(*mut SSL, c_int, c_int)>,
683            error: c_int,
684            error_code: c_int,
685            #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))]
686            kssl_ctx: *mut c_void,
687            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
688            psk_client_callback: Option<
689                unsafe extern "C" fn(*mut SSL, *const c_char, *mut c_char, c_uint, *mut c_uchar, c_uint)
690                    -> c_uint,
691            >,
692            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
693            psk_server_callback:
694                Option<unsafe extern "C" fn(*mut SSL, *const c_char, *mut c_uchar, c_uint) -> c_uint>,
695            ctx: *mut SSL_CTX,
696            debug: c_int,
697            verify_result: c_long,
698            ex_data: CRYPTO_EX_DATA,
699            client_CA: *mut stack_st_X509_NAME,
700            references: c_int,
701            options: c_ulong,
702            mode: c_ulong,
703            max_cert_list: c_long,
704            first_packet: c_int,
705            client_version: c_int,
706            max_send_fragment: c_uint,
707            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
708            tlsext_debug_cb:
709                Option<unsafe extern "C" fn(*mut SSL, c_int, c_int, *mut c_uchar, c_int, *mut c_void)>,
710            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
711            tlsext_debug_arg: *mut c_void,
712            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
713            tlsext_hostname: *mut c_char,
714            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
715            servername_done: c_int,
716            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
717            tlsext_status_type: c_int,
718            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
719            tlsext_status_expected: c_int,
720            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
721            tlsext_ocsp_ids: *mut c_void,
722            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
723            tlsext_ocsp_exts: *mut c_void,
724            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
725            tlsext_ocsp_resp: *mut c_uchar,
726            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
727            tlsext_ocsp_resplen: c_int,
728            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
729            tlsext_ticket_expected: c_int,
730            #[cfg(all(
731                not(osslconf = "OPENSSL_NO_TLSEXT"),
732                not(osslconf = "OPENSSL_NO_EC")
733            ))]
734            tlsext_ecpointformatlist_length: size_t,
735            #[cfg(all(
736                not(osslconf = "OPENSSL_NO_TLSEXT"),
737                not(osslconf = "OPENSSL_NO_EC")
738            ))]
739            tlsext_ecpointformatlist: *mut c_uchar,
740            #[cfg(all(
741                not(osslconf = "OPENSSL_NO_TLSEXT"),
742                not(osslconf = "OPENSSL_NO_EC")
743            ))]
744            tlsext_ellipticcurvelist_length: size_t,
745            #[cfg(all(
746                not(osslconf = "OPENSSL_NO_TLSEXT"),
747                not(osslconf = "OPENSSL_NO_EC")
748            ))]
749            tlsext_ellipticcurvelist: *mut c_uchar,
750            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
751            tlsext_opaque_prf_input: *mut c_void,
752            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
753            tlsext_opaque_prf_input_len: size_t,
754            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
755            tlsext_session_ticket: *mut c_void,
756            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
757            tlsext_session_ticket_ext_cb: tls_session_ticket_ext_cb_fn,
758            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
759            tls_session_ticket_ext_cb_arg: *mut c_void,
760            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
761            tls_session_secret_cb: tls_session_secret_cb_fn,
762            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
763            tls_session_secret_cb_arg: *mut c_void,
764            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
765            initial_ctx: *mut SSL_CTX,
766            #[cfg(all(
767                not(osslconf = "OPENSSL_NO_TLSEXT"),
768                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
769            ))]
770            next_proto_negotiated: *mut c_uchar,
771            #[cfg(all(
772                not(osslconf = "OPENSSL_NO_TLSEXT"),
773                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
774            ))]
775            next_proto_negotiated_len: c_uchar,
776            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
777            srtp_profiles: *mut c_void,
778            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
779            srtp_profile: *mut c_void,
780            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
781            tlsext_heartbeat: c_uint,
782            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
783            tlsext_hb_pending: c_uint,
784            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
785            tlsext_hb_seq: c_uint,
786            renegotiate: c_int,
787            #[cfg(not(osslconf = "OPENSSL_NO_SRP"))]
788            srp_ctx: SRP_CTX,
789            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
790            alpn_client_proto_list: *mut c_uchar,
791            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
792            alpn_client_proto_list_len: c_uint,
793        }
794    }
795}
796cfg_if! {
797    if #[cfg(any(ossl110, libressl280))] {
798        pub enum SSL_CTX {}
799    } else if #[cfg(libressl251)] {
800        #[repr(C)]
801        pub struct SSL_CTX {
802            method: *const SSL_METHOD,
803            cipher_list: *mut stack_st_SSL_CIPHER,
804            cert_store: *mut c_void,
805            session_timeout: c_long,
806            pub references: c_int,
807            extra_certs: *mut stack_st_X509,
808            verify_mode: c_int,
809            sid_ctx_length: c_uint,
810            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
811            param: *mut X509_VERIFY_PARAM,
812            default_passwd_callback: *mut c_void,
813            default_passwd_callback_userdata: *mut c_void,
814            internal: *mut c_void,
815        }
816    } else if #[cfg(libressl)] {
817        #[repr(C)]
818        pub struct SSL_CTX {
819            method: *mut c_void,
820            cipher_list: *mut c_void,
821            cipher_list_by_id: *mut c_void,
822            cert_store: *mut c_void,
823            sessions: *mut c_void,
824            session_cache_size: c_ulong,
825            session_cache_head: *mut c_void,
826            session_cache_tail: *mut c_void,
827            session_cache_mode: c_int,
828            session_timeout: c_long,
829            new_session_cb: *mut c_void,
830            remove_session_cb: *mut c_void,
831            get_session_cb: *mut c_void,
832            stats: [c_int; 11],
833            pub references: c_int,
834            app_verify_callback: *mut c_void,
835            app_verify_arg: *mut c_void,
836            default_passwd_callback: *mut c_void,
837            default_passwd_callback_userdata: *mut c_void,
838            client_cert_cb: *mut c_void,
839            app_gen_cookie_cb: *mut c_void,
840            app_verify_cookie_cb: *mut c_void,
841            ex_dat: CRYPTO_EX_DATA,
842            rsa_md5: *mut c_void,
843            md5: *mut c_void,
844            sha1: *mut c_void,
845            extra_certs: *mut c_void,
846            comp_methods: *mut c_void,
847            info_callback: *mut c_void,
848            client_CA: *mut c_void,
849            options: c_ulong,
850            mode: c_ulong,
851            max_cert_list: c_long,
852            cert: *mut c_void,
853            read_ahead: c_int,
854            msg_callback: *mut c_void,
855            msg_callback_arg: *mut c_void,
856            verify_mode: c_int,
857            sid_ctx_length: c_uint,
858            sid_ctx: [c_uchar; 32],
859            default_verify_callback: *mut c_void,
860            generate_session_id: *mut c_void,
861            param: *mut c_void,
862            quiet_shutdown: c_int,
863            max_send_fragment: c_uint,
864
865            #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))]
866            client_cert_engine: *mut c_void,
867
868            tlsext_servername_callback: *mut c_void,
869            tlsect_servername_arg: *mut c_void,
870            tlsext_tick_key_name: [c_uchar; 16],
871            tlsext_tick_hmac_key: [c_uchar; 16],
872            tlsext_tick_aes_key: [c_uchar; 16],
873            tlsext_ticket_key_cb: *mut c_void,
874            tlsext_status_cb: *mut c_void,
875            tlsext_status_arg: *mut c_void,
876            tlsext_opaque_prf_input_callback: *mut c_void,
877            tlsext_opaque_prf_input_callback_arg: *mut c_void,
878
879            next_protos_advertised_cb: *mut c_void,
880            next_protos_advertised_cb_arg: *mut c_void,
881            next_proto_select_cb: *mut c_void,
882            next_proto_select_cb_arg: *mut c_void,
883
884            srtp_profiles: *mut c_void,
885        }
886    } else {
887        #[repr(C)]
888        pub struct SSL_CTX {
889            method: *mut c_void,
890            cipher_list: *mut c_void,
891            cipher_list_by_id: *mut c_void,
892            cert_store: *mut c_void,
893            sessions: *mut c_void,
894            session_cache_size: c_ulong,
895            session_cache_head: *mut c_void,
896            session_cache_tail: *mut c_void,
897            session_cache_mode: c_int,
898            session_timeout: c_long,
899            new_session_cb: *mut c_void,
900            remove_session_cb: *mut c_void,
901            get_session_cb: *mut c_void,
902            stats: [c_int; 11],
903            pub references: c_int,
904            app_verify_callback: *mut c_void,
905            app_verify_arg: *mut c_void,
906            default_passwd_callback: *mut c_void,
907            default_passwd_callback_userdata: *mut c_void,
908            client_cert_cb: *mut c_void,
909            app_gen_cookie_cb: *mut c_void,
910            app_verify_cookie_cb: *mut c_void,
911            ex_dat: CRYPTO_EX_DATA,
912            rsa_md5: *mut c_void,
913            md5: *mut c_void,
914            sha1: *mut c_void,
915            extra_certs: *mut c_void,
916            comp_methods: *mut c_void,
917            info_callback: *mut c_void,
918            client_CA: *mut c_void,
919            options: c_ulong,
920            mode: c_ulong,
921            max_cert_list: c_long,
922            cert: *mut c_void,
923            read_ahead: c_int,
924            msg_callback: *mut c_void,
925            msg_callback_arg: *mut c_void,
926            verify_mode: c_int,
927            sid_ctx_length: c_uint,
928            sid_ctx: [c_uchar; 32],
929            default_verify_callback: *mut c_void,
930            generate_session_id: *mut c_void,
931            param: *mut c_void,
932            quiet_shutdown: c_int,
933            max_send_fragment: c_uint,
934
935            #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))]
936            client_cert_engine: *mut c_void,
937
938            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
939            tlsext_servername_callback: *mut c_void,
940            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
941            tlsect_servername_arg: *mut c_void,
942            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
943            tlsext_tick_key_name: [c_uchar; 16],
944            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
945            tlsext_tick_hmac_key: [c_uchar; 16],
946            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
947            tlsext_tick_aes_key: [c_uchar; 16],
948            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
949            tlsext_ticket_key_cb: *mut c_void,
950            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
951            tlsext_status_cb: *mut c_void,
952            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
953            tlsext_status_arg: *mut c_void,
954            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
955            tlsext_opaque_prf_input_callback: *mut c_void,
956            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
957            tlsext_opaque_prf_input_callback_arg: *mut c_void,
958
959            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
960            psk_identity_hint: *mut c_void,
961            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
962            psk_client_callback: *mut c_void,
963            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
964            psk_server_callback: *mut c_void,
965
966            #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))]
967            freelist_max_len: c_uint,
968            #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))]
969            wbuf_freelist: *mut c_void,
970            #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))]
971            rbuf_freelist: *mut c_void,
972
973            #[cfg(not(osslconf = "OPENSSL_NO_SRP"))]
974            srp_ctx: SRP_CTX,
975
976            #[cfg(all(
977                not(osslconf = "OPENSSL_NO_TLSEXT"),
978                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
979            ))]
980            next_protos_advertised_cb: *mut c_void,
981            #[cfg(all(
982                not(osslconf = "OPENSSL_NO_TLSEXT"),
983                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
984            ))]
985            next_protos_advertised_cb_arg: *mut c_void,
986            #[cfg(all(
987                not(osslconf = "OPENSSL_NO_TLSEXT"),
988                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
989            ))]
990            next_proto_select_cb: *mut c_void,
991            #[cfg(all(
992                not(osslconf = "OPENSSL_NO_TLSEXT"),
993                not(osslconf = "OPENSSL_NO_NEXTPROTONEG")
994            ))]
995            next_proto_select_cb_arg: *mut c_void,
996
997            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl101))]
998            srtp_profiles: *mut c_void,
999            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
1000            alpn_select_cb: *mut c_void,
1001            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
1002            alpn_select_cb_arg: *mut c_void,
1003            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
1004            alpn_client_proto_list: *mut c_void,
1005            #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))]
1006            alpn_client_proto_list_len: c_uint,
1007
1008            #[cfg(all(
1009                not(osslconf = "OPENSSL_NO_TLSEXT"),
1010                not(osslconf = "OPENSSL_NO_EC"),
1011                ossl102
1012            ))]
1013            tlsext_ecpointformatlist_length: size_t,
1014            #[cfg(all(
1015                not(osslconf = "OPENSSL_NO_TLSEXT"),
1016                not(osslconf = "OPENSSL_NO_EC"),
1017                ossl102
1018            ))]
1019            tlsext_ecpointformatlist: *mut c_uchar,
1020            #[cfg(all(
1021                not(osslconf = "OPENSSL_NO_TLSEXT"),
1022                not(osslconf = "OPENSSL_NO_EC"),
1023                ossl102
1024            ))]
1025            tlsext_ellipticcurvelist_length: size_t,
1026            #[cfg(all(
1027                not(osslconf = "OPENSSL_NO_TLSEXT"),
1028                not(osslconf = "OPENSSL_NO_EC"),
1029                ossl102
1030            ))]
1031            tlsext_ellipticcurvelist: *mut c_uchar,
1032        }
1033
1034        #[repr(C)]
1035        #[cfg(not(osslconf = "OPENSSL_NO_SRP"))]
1036        pub struct SRP_CTX {
1037            SRP_cb_arg: *mut c_void,
1038            TLS_ext_srp_username_callback: *mut c_void,
1039            SRP_verify_param_callback: *mut c_void,
1040            SRP_give_srp_client_pwd_callback: *mut c_void,
1041            login: *mut c_void,
1042            N: *mut c_void,
1043            g: *mut c_void,
1044            s: *mut c_void,
1045            B: *mut c_void,
1046            A: *mut c_void,
1047            a: *mut c_void,
1048            b: *mut c_void,
1049            v: *mut c_void,
1050            info: *mut c_void,
1051            stringth: c_int,
1052            srp_Mask: c_ulong,
1053        }
1054    }
1055}
1056cfg_if! {
1057    if #[cfg(ossl320)] {
1058        #[repr(C)]
1059        pub struct SSL_CONN_CLOSE_INFO {
1060            pub error_code: u64,
1061            pub frame_type: u64,
1062            pub reason: *const ::libc::c_char,
1063            pub reason_len: usize,
1064            pub flags: u32,
1065        }
1066        #[repr(C)]
1067        pub struct SSL_SHUTDOWN_EX_ARGS {
1068            pub quic_error_code: u64,
1069            pub quic_reason: *const c_char,
1070        }
1071        #[repr(C)]
1072        pub struct SSL_STREAM_RESET_ARGS {
1073            pub quic_error_code: u64,
1074        }
1075    }
1076}
1077
1078pub enum COMP_CTX {}
1079
1080cfg_if! {
1081    if #[cfg(all(any(ossl110, libressl350), not(osslconf = "OPENSSL_NO_COMP")))] {
1082        pub enum COMP_METHOD {}
1083    } else if #[cfg(not(osslconf = "OPENSSL_NO_COMP"))] {
1084        #[repr(C)]
1085        pub struct COMP_METHOD {
1086            pub type_: c_int,
1087            pub name: *const c_char,
1088            init: Option<unsafe extern "C" fn(*mut COMP_CTX) -> c_int>,
1089            finish: Option<unsafe extern "C" fn(*mut COMP_CTX)>,
1090            compress: Option<
1091                unsafe extern "C" fn(
1092                    *mut COMP_CTX,
1093                    *mut c_uchar,
1094                    c_uint,
1095                    *mut c_uchar,
1096                    c_uint,
1097                ) -> c_int,
1098            >,
1099            expand: Option<
1100                unsafe extern "C" fn(
1101                    *mut COMP_CTX,
1102                    *mut c_uchar,
1103                    c_uint,
1104                    *mut c_uchar,
1105                    c_uint,
1106                ) -> c_int,
1107            >,
1108            ctrl: Option<unsafe extern "C" fn() -> c_long>,
1109            callback_ctrl: Option<unsafe extern "C" fn() -> c_long>,
1110        }
1111    }
1112}
1113
1114cfg_if! {
1115    if #[cfg(any(ossl110, libressl280))] {
1116        pub enum CRYPTO_EX_DATA {}
1117    } else if #[cfg(libressl)] {
1118        #[repr(C)]
1119        pub struct CRYPTO_EX_DATA {
1120            pub sk: *mut stack_st_void,
1121        }
1122    } else {
1123        #[repr(C)]
1124        pub struct CRYPTO_EX_DATA {
1125            pub sk: *mut stack_st_void,
1126            pub dummy: c_int,
1127        }
1128    }
1129}
1130
1131pub enum OCSP_RESPONSE {}
1132
1133#[cfg(ossl300)]
1134pub enum OSSL_PROVIDER {}
1135
1136#[cfg(ossl300)]
1137pub enum OSSL_LIB_CTX {}
1138
1139#[cfg(ossl300)]
1140#[repr(C)]
1141pub struct OSSL_PARAM {
1142    key: *const c_char,
1143    data_type: c_uint,
1144    data: *mut c_void,
1145    data_size: size_t,
1146    return_size: size_t,
1147}
1148
1149#[cfg(ossl300)]
1150pub enum OSSL_PARAM_BLD {}
1151
1152#[cfg(ossl300)]
1153pub enum EVP_KDF {}
1154#[cfg(ossl300)]
1155pub enum EVP_KDF_CTX {}
1156
1157#[cfg(ossl300)]
1158pub enum OSSL_ENCODER_CTX {}
1159#[cfg(ossl300)]
1160pub enum OSSL_DECODER_CTX {}
1161
1162#[cfg(ossl300)]
1163pub type OSSL_PASSPHRASE_CALLBACK = Option<
1164    unsafe extern "C" fn(
1165        pass: *mut c_char,
1166        pass_size: size_t,
1167        pass_len: *mut size_t,
1168        params: *const OSSL_PARAM,
1169        arg: *mut c_void,
1170    ) -> c_int,
1171>;