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 {} cfg_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 }
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 }
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>;