variant_ssl_sys/handwritten/
ssl.rs

1use super::super::*;
2use libc::*;
3
4pub enum SSL_METHOD {}
5pub enum SSL_CIPHER {}
6cfg_if! {
7    if #[cfg(any(ossl110, libressl))] {
8        pub enum SSL_SESSION {}
9    } else {
10        #[repr(C)]
11        pub struct SSL_SESSION {
12            ssl_version: c_int,
13            key_arg_length: c_uint,
14            key_arg: [c_uchar; SSL_MAX_KEY_ARG_LENGTH as usize],
15            pub master_key_length: c_int,
16            pub master_key: [c_uchar; 48],
17            session_id_length: c_uint,
18            session_id: [c_uchar; SSL_MAX_SSL_SESSION_ID_LENGTH as usize],
19            sid_ctx_length: c_uint,
20            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
21            #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))]
22            krb5_client_princ_len: c_uint,
23            #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))]
24            krb5_client_princ: [c_uchar; SSL_MAX_KRB5_PRINCIPAL_LENGTH as usize],
25            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
26            psk_identity_hint: *mut c_char,
27            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
28            psk_identity: *mut c_char,
29            not_resumable: c_int,
30            sess_cert: *mut c_void,
31            peer: *mut X509,
32            verify_result: c_long,
33            pub references: c_int,
34            timeout: c_long,
35            time: c_long,
36            compress_meth: c_uint,
37            cipher: *const c_void,
38            cipher_id: c_ulong,
39            ciphers: *mut c_void,
40            ex_data: CRYPTO_EX_DATA,
41            prev: *mut c_void,
42            next: *mut c_void,
43            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
44            tlsext_hostname: *mut c_char,
45            #[cfg(all(
46                not(osslconf = "OPENSSL_NO_TLSEXT"),
47                not(osslconf = "OPENSSL_NO_EC")
48            ))]
49            tlsext_ecpointformatlist_length: size_t,
50            #[cfg(all(
51                not(osslconf = "OPENSSL_NO_TLSEXT"),
52                not(osslconf = "OPENSSL_NO_EC")
53            ))]
54            tlsext_ecpointformatlist: *mut c_uchar,
55            #[cfg(all(
56                not(osslconf = "OPENSSL_NO_TLSEXT"),
57                not(osslconf = "OPENSSL_NO_EC")
58            ))]
59            tlsext_ellipticcurvelist_length: size_t,
60            #[cfg(all(
61                not(osslconf = "OPENSSL_NO_TLSEXT"),
62                not(osslconf = "OPENSSL_NO_EC")
63            ))]
64            tlsext_ellipticcurvelist: *mut c_uchar,
65            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
66            tlsext_tick: *mut c_uchar,
67            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
68            tlsext_ticklen: size_t,
69            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
70            tlsext_tick_lifetime_hint: c_long,
71            #[cfg(not(osslconf = "OPENSSL_NO_SRP"))]
72            srp_username: *mut c_char,
73        }
74    }
75}
76
77stack!(stack_st_SSL_CIPHER);
78
79#[repr(C)]
80pub struct SRTP_PROTECTION_PROFILE {
81    pub name: *const c_char,
82    pub id: c_ulong,
83}
84
85stack!(stack_st_SRTP_PROTECTION_PROFILE);
86
87pub type tls_session_ticket_ext_cb_fn =
88    Option<unsafe extern "C" fn(*mut SSL, *const c_uchar, c_int, *mut c_void) -> c_int>;
89pub type tls_session_secret_cb_fn = Option<
90    unsafe extern "C" fn(
91        *mut SSL,
92        *mut c_void,
93        *mut c_int,
94        *mut stack_st_SSL_CIPHER,
95        *mut *mut SSL_CIPHER,
96        *mut c_void,
97    ) -> c_int,
98>;
99
100#[cfg(ossl111)]
101pub type SSL_custom_ext_add_cb_ex = Option<
102    unsafe extern "C" fn(
103        ssl: *mut SSL,
104        ext_type: c_uint,
105        context: c_uint,
106        out: *mut *const c_uchar,
107        outlen: *mut size_t,
108        x: *mut X509,
109        chainidx: size_t,
110        al: *mut c_int,
111        add_arg: *mut c_void,
112    ) -> c_int,
113>;
114
115#[cfg(ossl111)]
116pub type SSL_custom_ext_free_cb_ex = Option<
117    unsafe extern "C" fn(
118        ssl: *mut SSL,
119        ext_type: c_uint,
120        context: c_uint,
121        out: *const c_uchar,
122        add_arg: *mut c_void,
123    ),
124>;
125
126#[cfg(ossl111)]
127pub type SSL_custom_ext_parse_cb_ex = Option<
128    unsafe extern "C" fn(
129        ssl: *mut SSL,
130        ext_type: c_uint,
131        context: c_uint,
132        input: *const c_uchar,
133        inlen: size_t,
134        x: *mut X509,
135        chainidx: size_t,
136        al: *mut c_int,
137        parse_arg: *mut c_void,
138    ) -> c_int,
139>;
140
141cfg_if! {
142    if #[cfg(ossl300)] {
143        extern "C" {
144            pub fn SSL_CTX_get_options(ctx: *const SSL_CTX) -> u64;
145            pub fn SSL_CTX_set_options(ctx: *mut SSL_CTX, op: u64) -> u64;
146            pub fn SSL_CTX_clear_options(ctx: *mut SSL_CTX, op: u64) -> u64;
147        }
148    } else if #[cfg(ossl110)] {
149        extern "C" {
150            pub fn SSL_CTX_get_options(ctx: *const SSL_CTX) -> c_ulong;
151            pub fn SSL_CTX_set_options(ctx: *mut SSL_CTX, op: c_ulong) -> c_ulong;
152            pub fn SSL_CTX_clear_options(ctx: *mut SSL_CTX, op: c_ulong) -> c_ulong;
153        }
154    }
155}
156
157pub type GEN_SESSION_CB =
158    Option<unsafe extern "C" fn(*const SSL, *mut c_uchar, *mut c_uint) -> c_int>;
159
160extern "C" {
161    pub fn SSL_CTX_sess_set_new_cb(
162        ctx: *mut SSL_CTX,
163        new_session_cb: Option<unsafe extern "C" fn(*mut SSL, *mut SSL_SESSION) -> c_int>,
164    );
165    pub fn SSL_CTX_sess_set_remove_cb(
166        ctx: *mut SSL_CTX,
167        remove_session_cb: Option<unsafe extern "C" fn(*mut SSL_CTX, *mut SSL_SESSION)>,
168    );
169}
170cfg_if! {
171    // const change in passed function pointer signature
172    if #[cfg(any(ossl110, libressl))] {
173        extern "C" {
174            pub fn SSL_CTX_sess_set_get_cb(
175                ctx: *mut SSL_CTX,
176                get_session_cb: Option<
177                    unsafe extern "C" fn(*mut SSL, *const c_uchar, c_int, *mut c_int) -> *mut SSL_SESSION,
178                >,
179            );
180        }
181    } else {
182        extern "C" {
183            pub fn SSL_CTX_sess_set_get_cb(
184                ctx: *mut SSL_CTX,
185                get_session_cb: Option<
186                    unsafe extern "C" fn(*mut SSL, *mut c_uchar, c_int, *mut c_int) -> *mut SSL_SESSION,
187                >,
188            );
189        }
190    }
191}
192extern "C" {
193    // FIXME change to unsafe extern "C" fn
194    pub fn SSL_CTX_set_cookie_generate_cb(
195        s: *mut SSL_CTX,
196        cb: Option<
197            extern "C" fn(ssl: *mut SSL, cookie: *mut c_uchar, cookie_len: *mut c_uint) -> c_int,
198        >,
199    );
200}
201
202cfg_if! {
203    // const change in passed function pointer signature
204    if #[cfg(any(ossl110, libressl))] {
205        extern "C" {
206            pub fn SSL_CTX_set_cookie_verify_cb(
207                s: *mut SSL_CTX,
208                cb: Option<
209                    extern "C" fn(ssl: *mut SSL, cookie: *const c_uchar, cookie_len: c_uint) -> c_int,
210                >,
211            );
212        }
213    } else {
214        extern "C" {
215            pub fn SSL_CTX_set_cookie_verify_cb(
216                s: *mut SSL_CTX,
217                cb: Option<extern "C" fn(ssl: *mut SSL, cookie: *mut c_uchar, cookie_len: c_uint) -> c_int>,
218            );
219        }
220    }
221}
222
223extern "C" {
224    #[cfg(ossl111)]
225    pub fn SSL_CTX_set_stateless_cookie_generate_cb(
226        s: *mut SSL_CTX,
227        cb: Option<
228            unsafe extern "C" fn(
229                ssl: *mut SSL,
230                cookie: *mut c_uchar,
231                cookie_len: *mut size_t,
232            ) -> c_int,
233        >,
234    );
235    #[cfg(ossl111)]
236    pub fn SSL_CTX_set_stateless_cookie_verify_cb(
237        s: *mut SSL_CTX,
238        cb: Option<
239            unsafe extern "C" fn(
240                ssl: *mut SSL,
241                cookie: *const c_uchar,
242                cookie_len: size_t,
243            ) -> c_int,
244        >,
245    );
246
247    pub fn SSL_CTX_set_next_protos_advertised_cb(
248        ssl: *mut SSL_CTX,
249        cb: extern "C" fn(
250            ssl: *mut SSL,
251            out: *mut *const c_uchar,
252            outlen: *mut c_uint,
253            arg: *mut c_void,
254        ) -> c_int,
255        arg: *mut c_void,
256    );
257    pub fn SSL_CTX_set_next_proto_select_cb(
258        ssl: *mut SSL_CTX,
259        cb: extern "C" fn(
260            ssl: *mut SSL,
261            out: *mut *mut c_uchar,
262            outlen: *mut c_uchar,
263            inbuf: *const c_uchar,
264            inlen: c_uint,
265            arg: *mut c_void,
266        ) -> c_int,
267        arg: *mut c_void,
268    );
269    pub fn SSL_get0_next_proto_negotiated(
270        s: *const SSL,
271        data: *mut *const c_uchar,
272        len: *mut c_uint,
273    );
274
275    pub fn SSL_select_next_proto(
276        out: *mut *mut c_uchar,
277        outlen: *mut c_uchar,
278        inbuf: *const c_uchar,
279        inlen: c_uint,
280        client: *const c_uchar,
281        client_len: c_uint,
282    ) -> c_int;
283}
284
285extern "C" {
286    pub fn SSL_CTX_set_alpn_protos(s: *mut SSL_CTX, data: *const c_uchar, len: c_uint) -> c_int;
287    pub fn SSL_set_alpn_protos(s: *mut SSL, data: *const c_uchar, len: c_uint) -> c_int;
288    pub fn SSL_CTX_set_alpn_select_cb(
289        ssl: *mut SSL_CTX,
290        cb: Option<
291            unsafe extern "C" fn(
292                ssl: *mut SSL,
293                out: *mut *const c_uchar,
294                outlen: *mut c_uchar,
295                inbuf: *const c_uchar,
296                inlen: c_uint,
297                arg: *mut c_void,
298            ) -> c_int,
299        >,
300        arg: *mut c_void,
301    );
302    pub fn SSL_get0_alpn_selected(s: *const SSL, data: *mut *const c_uchar, len: *mut c_uint);
303}
304
305#[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
306extern "C" {
307    pub fn SSL_CTX_set_psk_client_callback(
308        ssl: *mut SSL_CTX,
309        psk_client_cb: Option<
310            extern "C" fn(
311                *mut SSL,
312                *const c_char,
313                *mut c_char,
314                c_uint,
315                *mut c_uchar,
316                c_uint,
317            ) -> c_uint,
318        >,
319    );
320    pub fn SSL_CTX_set_psk_server_callback(
321        ssl: *mut SSL_CTX,
322        psk_server_cb: Option<
323            extern "C" fn(*mut SSL, *const c_char, *mut c_uchar, c_uint) -> c_uint,
324        >,
325    );
326    pub fn SSL_get_psk_identity_hint(ssl: *const SSL) -> *const c_char;
327    pub fn SSL_get_psk_identity(ssl: *const SSL) -> *const c_char;
328}
329
330extern "C" {
331    #[cfg(ossl111)]
332    pub fn SSL_CTX_add_custom_ext(
333        ctx: *mut SSL_CTX,
334        ext_type: c_uint,
335        context: c_uint,
336        add_cb: SSL_custom_ext_add_cb_ex,
337        free_cb: SSL_custom_ext_free_cb_ex,
338        add_arg: *mut c_void,
339        parse_cb: SSL_custom_ext_parse_cb_ex,
340        parse_arg: *mut c_void,
341    ) -> c_int;
342
343    #[cfg(ossl102)]
344    pub fn SSL_extension_supported(ext_type: c_uint) -> c_int;
345}
346
347#[cfg(ossl111)]
348pub type SSL_CTX_keylog_cb_func =
349    Option<unsafe extern "C" fn(ssl: *const SSL, line: *const c_char)>;
350
351extern "C" {
352    #[cfg(ossl111)]
353    pub fn SSL_CTX_set_keylog_callback(ctx: *mut SSL_CTX, cb: SSL_CTX_keylog_cb_func);
354
355    #[cfg(any(ossl111, libressl))]
356    pub fn SSL_CTX_set_max_early_data(ctx: *mut SSL_CTX, max_early_data: u32) -> c_int;
357    #[cfg(any(ossl111, libressl))]
358    pub fn SSL_CTX_get_max_early_data(ctx: *const SSL_CTX) -> u32;
359    #[cfg(any(ossl111, libressl))]
360    pub fn SSL_set_max_early_data(ctx: *mut SSL, max_early_data: u32) -> c_int;
361    #[cfg(any(ossl111, libressl))]
362    pub fn SSL_get_max_early_data(ctx: *const SSL) -> u32;
363
364    pub fn SSL_get_finished(s: *const SSL, buf: *mut c_void, count: size_t) -> size_t;
365    pub fn SSL_get_peer_finished(s: *const SSL, buf: *mut c_void, count: size_t) -> size_t;
366
367    pub fn SSL_CTX_get_verify_mode(ctx: *const SSL_CTX) -> c_int;
368    pub fn SSL_get_verify_mode(s: *const SSL) -> c_int;
369}
370
371const_ptr_api! {
372    extern "C" {
373        #[cfg(ossl110)]
374        pub fn SSL_is_init_finished(s: #[const_ptr_if(ossl111)] SSL) -> c_int;
375    }
376}
377
378cfg_if! {
379    if #[cfg(libressl)] {
380        extern "C" {
381            pub fn SSL_CTX_set_min_proto_version(ctx: *mut SSL_CTX, version: u16) -> c_int;
382            pub fn SSL_CTX_set_max_proto_version(ctx: *mut SSL_CTX, version: u16) -> c_int;
383            pub fn SSL_set_min_proto_version(s: *mut SSL, version: u16) -> c_int;
384            pub fn SSL_set_max_proto_version(s: *mut SSL, version: u16) -> c_int;
385
386            pub fn SSL_CTX_get_min_proto_version(ctx: *mut SSL_CTX) -> c_int;
387            pub fn SSL_CTX_get_max_proto_version(ctx: *mut SSL_CTX) -> c_int;
388            pub fn SSL_get_min_proto_version(s: *mut SSL) -> c_int;
389            pub fn SSL_get_max_proto_version(s: *mut SSL) -> c_int;
390        }
391    }
392}
393
394extern "C" {
395    pub fn SSL_CTX_set_cipher_list(ssl: *mut SSL_CTX, s: *const c_char) -> c_int;
396    pub fn SSL_CTX_new(method: *const SSL_METHOD) -> *mut SSL_CTX;
397    pub fn SSL_CTX_free(ctx: *mut SSL_CTX);
398    #[cfg(any(ossl110, libressl))]
399    pub fn SSL_CTX_up_ref(x: *mut SSL_CTX) -> c_int;
400    pub fn SSL_CTX_get_cert_store(ctx: *const SSL_CTX) -> *mut X509_STORE;
401    pub fn SSL_CTX_set_cert_store(ctx: *mut SSL_CTX, store: *mut X509_STORE);
402
403    pub fn SSL_get_current_cipher(ssl: *const SSL) -> *const SSL_CIPHER;
404    pub fn SSL_CIPHER_get_bits(cipher: *const SSL_CIPHER, alg_bits: *mut c_int) -> c_int;
405}
406const_ptr_api! {
407    extern "C" {
408        pub fn SSL_CIPHER_get_version(cipher: *const SSL_CIPHER) -> #[const_ptr_if(any(ossl110, libressl))] c_char;
409    }
410}
411extern "C" {
412    #[cfg(ossl111)]
413    pub fn SSL_CIPHER_get_handshake_digest(cipher: *const SSL_CIPHER) -> *const EVP_MD;
414    #[cfg(ossl111)]
415    pub fn SSL_CIPHER_get_protocol_id(cipher: *const SSL_CIPHER) -> u16;
416    pub fn SSL_CIPHER_get_name(cipher: *const SSL_CIPHER) -> *const c_char;
417    #[cfg(ossl111)]
418    pub fn SSL_CIPHER_standard_name(cipher: *const SSL_CIPHER) -> *const c_char;
419    #[cfg(ossl111)]
420    pub fn OPENSSL_cipher_name(rfc_name: *const c_char) -> *const c_char;
421
422    pub fn SSL_pending(ssl: *const SSL) -> c_int;
423    pub fn SSL_set_bio(ssl: *mut SSL, rbio: *mut BIO, wbio: *mut BIO);
424    pub fn SSL_get_rbio(ssl: *const SSL) -> *mut BIO;
425    pub fn SSL_get_wbio(ssl: *const SSL) -> *mut BIO;
426    #[cfg(any(ossl111, libressl))]
427    pub fn SSL_CTX_set_ciphersuites(ctx: *mut SSL_CTX, str: *const c_char) -> c_int;
428    #[cfg(any(ossl111, libressl))]
429    pub fn SSL_set_ciphersuites(ssl: *mut SSL, str: *const c_char) -> c_int;
430    pub fn SSL_set_cipher_list(ssl: *mut SSL, s: *const c_char) -> c_int;
431    pub fn SSL_set_ssl_method(s: *mut SSL, method: *const SSL_METHOD) -> c_int;
432    pub fn SSL_set_verify(
433        ssl: *mut SSL,
434        mode: c_int,
435        // FIXME should be unsafe
436        verify_callback: Option<extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
437    );
438    pub fn SSL_CTX_use_PrivateKey(ctx: *mut SSL_CTX, key: *mut EVP_PKEY) -> c_int;
439    pub fn SSL_CTX_use_certificate(ctx: *mut SSL_CTX, cert: *mut X509) -> c_int;
440
441    pub fn SSL_CTX_use_PrivateKey_file(
442        ctx: *mut SSL_CTX,
443        key_file: *const c_char,
444        file_type: c_int,
445    ) -> c_int;
446    pub fn SSL_CTX_use_certificate_file(
447        ctx: *mut SSL_CTX,
448        cert_file: *const c_char,
449        file_type: c_int,
450    ) -> c_int;
451    pub fn SSL_CTX_use_certificate_chain_file(
452        ctx: *mut SSL_CTX,
453        cert_chain_file: *const c_char,
454    ) -> c_int;
455    pub fn SSL_use_PrivateKey_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
456    pub fn SSL_use_PrivateKey(ssl: *mut SSL, pkey: *mut EVP_PKEY) -> c_int;
457    pub fn SSL_use_certificate(ssl: *mut SSL, x: *mut X509) -> c_int;
458    #[cfg(any(ossl110, libressl))]
459    pub fn SSL_use_certificate_chain_file(ssl: *mut SSL, file: *const c_char) -> c_int;
460    pub fn SSL_set_client_CA_list(s: *mut SSL, name_list: *mut stack_st_X509_NAME);
461    pub fn SSL_add_client_CA(ssl: *mut SSL, x: *mut X509) -> c_int;
462    pub fn SSL_load_client_CA_file(file: *const c_char) -> *mut stack_st_X509_NAME;
463
464    #[cfg(not(ossl110))]
465    pub fn SSL_load_error_strings();
466    pub fn SSL_state_string(ssl: *const SSL) -> *const c_char;
467    pub fn SSL_state_string_long(ssl: *const SSL) -> *const c_char;
468
469    pub fn SSL_SESSION_get_time(s: *const SSL_SESSION) -> c_long;
470    pub fn SSL_SESSION_get_timeout(s: *const SSL_SESSION) -> c_long;
471    #[cfg(any(ossl110, libressl))]
472    pub fn SSL_SESSION_get_protocol_version(s: *const SSL_SESSION) -> c_int;
473
474    #[cfg(any(ossl111, libressl))]
475    pub fn SSL_SESSION_set_max_early_data(ctx: *mut SSL_SESSION, max_early_data: u32) -> c_int;
476    #[cfg(any(ossl111, libressl))]
477    pub fn SSL_SESSION_get_max_early_data(ctx: *const SSL_SESSION) -> u32;
478
479    pub fn SSL_SESSION_get_id(s: *const SSL_SESSION, len: *mut c_uint) -> *const c_uchar;
480    #[cfg(any(ossl110, libressl))]
481    pub fn SSL_SESSION_up_ref(ses: *mut SSL_SESSION) -> c_int;
482    pub fn SSL_SESSION_free(s: *mut SSL_SESSION);
483}
484cfg_if! {
485    if #[cfg(tongsuo)] {
486        extern "C" {
487            pub fn SSL_CTX_use_enc_PrivateKey(ctx: *mut SSL_CTX, pkey: *mut EVP_PKEY) -> c_int;
488            pub fn SSL_CTX_use_sign_PrivateKey(ctx: *mut SSL_CTX, pkey: *mut EVP_PKEY) -> c_int;
489            pub fn SSL_CTX_use_enc_PrivateKey_file(ctx: *mut SSL_CTX, file: *const c_char, type_: c_int) -> c_int;
490            pub fn SSL_CTX_use_sign_PrivateKey_file(ctx: *mut SSL_CTX, file: *const c_char, type_: c_int) -> c_int;
491            pub fn SSL_CTX_enable_ntls(ctx: *mut SSL_CTX);
492            pub fn SSL_CTX_disable_ntls(ctx: *mut SSL_CTX);
493            #[cfg(ossl300)]
494            pub fn SSL_CTX_enable_force_ntls(ctx: *mut SSL_CTX);
495            #[cfg(ossl300)]
496            pub fn SSL_CTX_disable_force_ntls(ctx: *mut SSL_CTX);
497            pub fn SSL_enable_ntls(s: *mut SSL);
498            pub fn SSL_disable_ntls(s: *mut SSL);
499            #[cfg(ossl300)]
500            pub fn SSL_enable_force_ntls(s: *mut SSL);
501            #[cfg(ossl300)]
502            pub fn SSL_disable_force_ntls(s: *mut SSL);
503            pub fn SSL_CTX_enable_sm_tls13_strict(ctx: *mut SSL_CTX);
504            pub fn SSL_CTX_disable_sm_tls13_strict(ctx: *mut SSL_CTX);
505            pub fn SSL_enable_sm_tls13_strict(s: *mut SSL);
506            pub fn SSL_disable_sm_tls13_strict(s: *mut SSL);
507            pub fn SSL_CTX_use_enc_certificate(ctx: *mut SSL_CTX, x: *mut X509) -> c_int;
508            pub fn SSL_CTX_use_sign_certificate(ctx: *mut SSL_CTX, x: *mut X509) -> c_int;
509            pub fn SSL_CTX_use_enc_certificate_file(ctx: *mut SSL_CTX, file: *const c_char, type_: c_int) -> c_int;
510            pub fn SSL_CTX_use_sign_certificate_file(ctx: *mut SSL_CTX, file: *const c_char, type_: c_int) -> c_int;
511            pub fn SSL_is_ntls(s: *const SSL) -> c_int;
512            pub fn NTLS_method() -> *const SSL_METHOD;
513            pub fn NTLS_server_method() -> *const SSL_METHOD;
514            pub fn NTLS_client_method() -> *const SSL_METHOD;
515            pub fn SSL_set_ciphers(s: *mut SSL, cipher_list: *mut stack_st_SSL_CIPHER) -> c_int;
516            pub fn SSL_set_ciphers_by_id(s: *mut SSL, cipher_list_by_id: *mut stack_st_SSL_CIPHER) -> c_int;
517            pub fn SSL_CTX_set_ciphers(ctx: *mut SSL_CTX, cipher_list: *mut stack_st_SSL_CIPHER) -> c_int;
518            pub fn SSL_CTX_get_ciphers_by_id(ctx: *const SSL_CTX) -> *mut stack_st_SSL_CIPHER;
519            pub fn SSL_CTX_set_ciphers_by_id(ctx: *mut SSL_CTX, cipher_list_by_id: *mut stack_st_SSL_CIPHER) -> c_int;
520            pub fn SSL_use_sign_certificate(ssl: *mut SSL, x: *mut X509) -> c_int;
521            pub fn SSL_use_sign_certificate_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
522            pub fn SSL_use_enc_certificate(ssl: *mut SSL, x: *mut X509) -> c_int;
523            pub fn SSL_use_enc_certificate_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
524            pub fn SSL_use_enc_PrivateKey(ssl: *mut SSL, pkey: *mut EVP_PKEY) -> c_int;
525            pub fn SSL_use_enc_PrivateKey_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
526            pub fn SSL_use_sign_PrivateKey(ssl: *mut SSL, pkey: *mut EVP_PKEY) -> c_int;
527            pub fn SSL_use_sign_PrivateKey_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
528        }
529    }
530}
531const_ptr_api! {
532    extern "C" {
533        pub fn i2d_SSL_SESSION(s: #[const_ptr_if(ossl300)] SSL_SESSION, pp: *mut *mut c_uchar) -> c_int;
534    }
535}
536extern "C" {
537    pub fn SSL_set_session(ssl: *mut SSL, session: *mut SSL_SESSION) -> c_int;
538    pub fn SSL_CTX_add_session(ctx: *mut SSL_CTX, session: *mut SSL_SESSION) -> c_int;
539    pub fn SSL_CTX_remove_session(ctx: *mut SSL_CTX, session: *mut SSL_SESSION) -> c_int;
540    pub fn d2i_SSL_SESSION(
541        a: *mut *mut SSL_SESSION,
542        pp: *mut *const c_uchar,
543        len: c_long,
544    ) -> *mut SSL_SESSION;
545
546    #[cfg(not(ossl300))]
547    pub fn SSL_get_peer_certificate(ssl: *const SSL) -> *mut X509;
548    #[cfg(ossl300)]
549    pub fn SSL_get1_peer_certificate(ssl: *const SSL) -> *mut X509;
550
551    pub fn SSL_get_peer_cert_chain(ssl: *const SSL) -> *mut stack_st_X509;
552
553    pub fn SSL_CTX_set_verify(
554        ctx: *mut SSL_CTX,
555        mode: c_int,
556        verify_callback: Option<extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
557    );
558    pub fn SSL_CTX_set_verify_depth(ctx: *mut SSL_CTX, depth: c_int);
559
560    #[cfg(any(ossl111, libressl))]
561    pub fn SSL_CTX_set_post_handshake_auth(ctx: *mut SSL_CTX, val: c_int);
562
563    pub fn SSL_CTX_check_private_key(ctx: *const SSL_CTX) -> c_int;
564
565    pub fn SSL_CTX_set_session_id_context(
566        ssl: *mut SSL_CTX,
567        sid_ctx: *const c_uchar,
568        sid_ctx_len: c_uint,
569    ) -> c_int;
570
571    pub fn SSL_new(ctx: *mut SSL_CTX) -> *mut SSL;
572
573    pub fn SSL_CTX_get0_param(ctx: *mut SSL_CTX) -> *mut X509_VERIFY_PARAM;
574
575    pub fn SSL_get0_param(ssl: *mut SSL) -> *mut X509_VERIFY_PARAM;
576}
577
578#[cfg(ossl111)]
579pub type SSL_client_hello_cb_fn =
580    Option<unsafe extern "C" fn(s: *mut SSL, al: *mut c_int, arg: *mut c_void) -> c_int>;
581extern "C" {
582    #[cfg(ossl111)]
583    pub fn SSL_CTX_set_client_hello_cb(
584        c: *mut SSL_CTX,
585        cb: SSL_client_hello_cb_fn,
586        arg: *mut c_void,
587    );
588    #[cfg(ossl111)]
589    pub fn SSL_client_hello_isv2(s: *mut SSL) -> c_int;
590    #[cfg(ossl111)]
591    pub fn SSL_client_hello_get0_legacy_version(s: *mut SSL) -> c_uint;
592    #[cfg(ossl111)]
593    pub fn SSL_client_hello_get0_random(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
594    #[cfg(ossl111)]
595    pub fn SSL_client_hello_get0_session_id(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
596    #[cfg(ossl111)]
597    pub fn SSL_client_hello_get0_ciphers(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
598    #[cfg(ossl111)]
599    pub fn SSL_client_hello_get0_compression_methods(
600        s: *mut SSL,
601        out: *mut *const c_uchar,
602    ) -> size_t;
603    #[cfg(ossl111)]
604    pub fn SSL_client_hello_get1_extensions_present(
605        s: *mut SSL,
606        out: *mut *mut c_int,
607        outlen: *mut size_t,
608    ) -> c_int;
609    #[cfg(ossl111)]
610    pub fn SSL_client_hello_get0_ext(
611        s: *mut SSL,
612        type_: c_uint,
613        out: *mut *const c_uchar,
614        outlen: *mut size_t,
615    ) -> c_int;
616
617    pub fn SSL_free(ssl: *mut SSL);
618    pub fn SSL_accept(ssl: *mut SSL) -> c_int;
619    #[cfg(ossl111)]
620    pub fn SSL_stateless(s: *mut SSL) -> c_int;
621    pub fn SSL_connect(ssl: *mut SSL) -> c_int;
622    pub fn SSL_read(ssl: *mut SSL, buf: *mut c_void, num: c_int) -> c_int;
623    #[cfg(any(ossl111, libressl))]
624    pub fn SSL_read_ex(ssl: *mut SSL, buf: *mut c_void, num: usize, readbytes: *mut usize)
625        -> c_int;
626    pub fn SSL_peek(ssl: *mut SSL, buf: *mut c_void, num: c_int) -> c_int;
627    #[cfg(any(ossl111, libressl))]
628    pub fn SSL_peek_ex(ssl: *mut SSL, buf: *mut c_void, num: usize, readbytes: *mut usize)
629        -> c_int;
630    #[cfg(any(ossl111, libressl))]
631    pub fn SSL_read_early_data(
632        s: *mut SSL,
633        buf: *mut c_void,
634        num: size_t,
635        readbytes: *mut size_t,
636    ) -> c_int;
637    #[cfg(ossl111)]
638    pub fn SSL_bytes_to_cipher_list(
639        s: *mut SSL,
640        bytes: *const c_uchar,
641        len: size_t,
642        isv2format: c_int,
643        sk: *mut *mut stack_st_SSL_CIPHER,
644        scsvs: *mut *mut stack_st_SSL_CIPHER,
645    ) -> c_int;
646}
647
648extern "C" {
649    pub fn SSL_write(ssl: *mut SSL, buf: *const c_void, num: c_int) -> c_int;
650    #[cfg(any(ossl111, libressl))]
651    pub fn SSL_write_ex(
652        ssl: *mut SSL,
653        buf: *const c_void,
654        num: size_t,
655        written: *mut size_t,
656    ) -> c_int;
657    #[cfg(any(ossl111, libressl))]
658    pub fn SSL_write_early_data(
659        s: *mut SSL,
660        buf: *const c_void,
661        num: size_t,
662        written: *mut size_t,
663    ) -> c_int;
664    pub fn SSL_ctrl(ssl: *mut SSL, cmd: c_int, larg: c_long, parg: *mut c_void) -> c_long;
665    pub fn SSL_CTX_ctrl(ctx: *mut SSL_CTX, cmd: c_int, larg: c_long, parg: *mut c_void) -> c_long;
666    pub fn SSL_CTX_callback_ctrl(
667        ctx: *mut SSL_CTX,
668        cmd: c_int,
669        fp: Option<unsafe extern "C" fn()>,
670    ) -> c_long;
671}
672
673cfg_if! {
674    if #[cfg(any(ossl110, libressl))] {
675        extern "C" {
676            pub fn TLS_method() -> *const SSL_METHOD;
677
678            pub fn DTLS_method() -> *const SSL_METHOD;
679
680            pub fn TLS_server_method() -> *const SSL_METHOD;
681
682            pub fn TLS_client_method() -> *const SSL_METHOD;
683
684            pub fn DTLS_server_method() -> *const SSL_METHOD;
685
686            pub fn DTLS_client_method() -> *const SSL_METHOD;
687        }
688    } else {
689        extern "C" {
690            #[cfg(not(osslconf = "OPENSSL_NO_SSL3_METHOD"))]
691            pub fn SSLv3_method() -> *const SSL_METHOD;
692
693            pub fn SSLv23_method() -> *const SSL_METHOD;
694
695            pub fn SSLv23_client_method() -> *const SSL_METHOD;
696
697            pub fn SSLv23_server_method() -> *const SSL_METHOD;
698
699            pub fn TLSv1_method() -> *const SSL_METHOD;
700
701            pub fn TLSv1_1_method() -> *const SSL_METHOD;
702
703            pub fn TLSv1_2_method() -> *const SSL_METHOD;
704
705            pub fn DTLSv1_method() -> *const SSL_METHOD;
706
707            #[cfg(ossl102)]
708            pub fn DTLSv1_2_method() -> *const SSL_METHOD;
709        }
710    }
711}
712
713extern "C" {
714    pub fn SSL_get_error(ssl: *const SSL, ret: c_int) -> c_int;
715    pub fn SSL_get_version(ssl: *const SSL) -> *const c_char;
716
717    pub fn SSL_do_handshake(ssl: *mut SSL) -> c_int;
718    pub fn SSL_shutdown(ssl: *mut SSL) -> c_int;
719
720    pub fn SSL_CTX_set_client_CA_list(ctx: *mut SSL_CTX, list: *mut stack_st_X509_NAME);
721
722    pub fn SSL_CTX_add_client_CA(ctx: *mut SSL_CTX, cacert: *mut X509) -> c_int;
723
724    pub fn SSL_CTX_set_default_verify_paths(ctx: *mut SSL_CTX) -> c_int;
725    pub fn SSL_CTX_load_verify_locations(
726        ctx: *mut SSL_CTX,
727        CAfile: *const c_char,
728        CApath: *const c_char,
729    ) -> c_int;
730}
731
732const_ptr_api! {
733    extern "C" {
734        pub fn SSL_get_ssl_method(ssl: #[const_ptr_if(ossl111b)] SSL) -> *const SSL_METHOD;
735    }
736}
737
738extern "C" {
739    pub fn SSL_set_connect_state(s: *mut SSL);
740    pub fn SSL_set_accept_state(s: *mut SSL);
741
742    #[cfg(not(ossl110))]
743    pub fn SSL_library_init() -> c_int;
744
745    pub fn SSL_CIPHER_description(
746        cipher: *const SSL_CIPHER,
747        buf: *mut c_char,
748        size: c_int,
749    ) -> *mut c_char;
750
751    pub fn SSL_get_certificate(ssl: *const SSL) -> *mut X509;
752    pub fn SSL_get_privatekey(ssl: *const SSL) -> *mut EVP_PKEY;
753}
754
755extern "C" {
756    pub fn SSL_CTX_get0_certificate(ctx: *const SSL_CTX) -> *mut X509;
757    pub fn SSL_CTX_get0_privatekey(ctx: *const SSL_CTX) -> *mut EVP_PKEY;
758
759    pub fn SSL_set_shutdown(ss: *mut SSL, mode: c_int);
760    pub fn SSL_get_shutdown(ssl: *const SSL) -> c_int;
761    pub fn SSL_version(ssl: *const SSL) -> c_int;
762    pub fn SSL_get_session(s: *const SSL) -> *mut SSL_SESSION;
763    pub fn SSL_get_SSL_CTX(ssl: *const SSL) -> *mut SSL_CTX;
764    pub fn SSL_set_SSL_CTX(ssl: *mut SSL, ctx: *mut SSL_CTX) -> *mut SSL_CTX;
765
766    pub fn SSL_get_verify_result(ssl: *const SSL) -> c_long;
767    #[cfg(ossl110)]
768    pub fn SSL_get0_verified_chain(ssl: *const SSL) -> *mut stack_st_X509;
769
770    #[cfg(any(ossl110, libressl))]
771    pub fn SSL_get_client_random(ssl: *const SSL, out: *mut c_uchar, len: size_t) -> size_t;
772    #[cfg(any(ossl110, libressl))]
773    pub fn SSL_get_server_random(ssl: *const SSL, out: *mut c_uchar, len: size_t) -> size_t;
774    #[cfg(any(ossl110, libressl))]
775    pub fn SSL_SESSION_get_master_key(
776        session: *const SSL_SESSION,
777        out: *mut c_uchar,
778        outlen: size_t,
779    ) -> size_t;
780}
781
782extern "C" {
783    #[cfg(not(ossl110))]
784    pub fn SSL_get_ex_new_index(
785        argl: c_long,
786        argp: *mut c_void,
787        new_func: CRYPTO_EX_new,
788        dup_func: CRYPTO_EX_dup,
789        free_func: CRYPTO_EX_free,
790    ) -> c_int;
791
792    pub fn SSL_set_ex_data(ssl: *mut SSL, idx: c_int, data: *mut c_void) -> c_int;
793    pub fn SSL_get_ex_data(ssl: *const SSL, idx: c_int) -> *mut c_void;
794
795    #[cfg(not(ossl110))]
796    pub fn SSL_CTX_get_ex_new_index(
797        argl: c_long,
798        argp: *mut c_void,
799        new_func: CRYPTO_EX_new,
800        dup_func: CRYPTO_EX_dup,
801        free_func: CRYPTO_EX_free,
802    ) -> c_int;
803
804    pub fn SSL_CTX_set_ex_data(ctx: *mut SSL_CTX, idx: c_int, data: *mut c_void) -> c_int;
805    pub fn SSL_CTX_get_ex_data(ctx: *const SSL_CTX, idx: c_int) -> *mut c_void;
806
807    pub fn SSL_get_ex_data_X509_STORE_CTX_idx() -> c_int;
808}
809
810#[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
811extern "C" {
812    pub fn SSL_CTX_set_info_callback(
813        ctx: *mut SSL_CTX,
814        cb: ::std::option::Option<
815            unsafe extern "C" fn(ssl: *const SSL, type_: ::libc::c_int, val: ::libc::c_int),
816        >,
817    );
818    pub fn SSL_set_info_callback(
819        ssl: *mut SSL,
820        cb: ::std::option::Option<
821            unsafe extern "C" fn(ssl: *const SSL, type_: ::libc::c_int, val: ::libc::c_int),
822        >,
823    );
824}
825
826extern "C" {
827    pub fn SSL_CTX_set_tmp_dh_callback(
828        ctx: *mut SSL_CTX,
829        dh: Option<
830            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut DH,
831        >,
832    );
833    pub fn SSL_set_tmp_dh_callback(
834        ctx: *mut SSL,
835        dh: Option<
836            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut DH,
837        >,
838    );
839    #[cfg(not(ossl110))]
840    pub fn SSL_CTX_set_tmp_ecdh_callback(
841        ctx: *mut SSL_CTX,
842        ecdh: Option<
843            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut EC_KEY,
844        >,
845    );
846    #[cfg(not(ossl110))]
847    pub fn SSL_set_tmp_ecdh_callback(
848        ssl: *mut SSL,
849        ecdh: Option<
850            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut EC_KEY,
851        >,
852    );
853}
854
855cfg_if! {
856    if #[cfg(libressl)] {
857        extern "C" {
858            pub fn SSL_get_current_compression(ssl: *mut SSL) -> *const libc::c_void;
859        }
860    } else if #[cfg(not(osslconf = "OPENSSL_NO_COMP"))] {
861        const_ptr_api! {
862            extern "C" {
863                pub fn SSL_get_current_compression(ssl: #[const_ptr_if(ossl111b)] SSL) -> *const COMP_METHOD;
864            }
865        }
866    }
867}
868cfg_if! {
869    if #[cfg(libressl)] {
870        extern "C" {
871            pub fn SSL_COMP_get_name(comp: *const libc::c_void) -> *const c_char;
872        }
873    } else if #[cfg(not(osslconf = "OPENSSL_NO_COMP"))] {
874        extern "C" {
875            pub fn SSL_COMP_get_name(comp: *const COMP_METHOD) -> *const c_char;
876        }
877    }
878}
879
880#[cfg(not(osslconf = "OPENSSL_NO_COMP"))]
881extern "C" {
882    #[cfg(ossl110)]
883    pub fn COMP_get_type(meth: *const COMP_METHOD) -> i32;
884}
885
886extern "C" {
887    #[cfg(any(ossl110, libressl))]
888    pub fn SSL_CIPHER_get_cipher_nid(c: *const SSL_CIPHER) -> c_int;
889    #[cfg(any(ossl110, libressl))]
890    pub fn SSL_CIPHER_get_digest_nid(c: *const SSL_CIPHER) -> c_int;
891}
892
893const_ptr_api! {
894    extern "C" {
895        #[cfg(ossl110)]
896        pub fn SSL_session_reused(ssl: #[const_ptr_if(ossl111c)] SSL) -> c_int;
897    }
898}
899
900const_ptr_api! {
901    extern "C" {
902        pub fn SSL_is_server(s: #[const_ptr_if(any(ossl110f, libressl))] SSL) -> c_int;
903    }
904}
905
906extern "C" {
907    #[cfg(ossl110)]
908    pub fn OPENSSL_init_ssl(opts: u64, settings: *const OPENSSL_INIT_SETTINGS) -> c_int;
909}
910
911extern "C" {
912    #[cfg(ossl111)]
913    pub fn SSL_CTX_set_num_tickets(ctx: *mut SSL_CTX, num_tickets: size_t) -> c_int;
914
915    #[cfg(ossl111)]
916    pub fn SSL_set_num_tickets(s: *mut SSL, num_tickets: size_t) -> c_int;
917
918    #[cfg(ossl111b)]
919    pub fn SSL_CTX_get_num_tickets(ctx: *const SSL_CTX) -> size_t;
920    #[cfg(all(ossl111, not(ossl111b)))]
921    pub fn SSL_CTX_get_num_tickets(ctx: *mut SSL_CTX) -> size_t;
922
923    #[cfg(ossl111b)]
924    pub fn SSL_get_num_tickets(s: *const SSL) -> size_t;
925    #[cfg(all(ossl111, not(ossl111b)))]
926    pub fn SSL_get_num_tickets(s: *mut SSL) -> size_t;
927}
928
929extern "C" {
930    #[cfg(any(ossl110, libressl360))]
931    pub fn SSL_CTX_set_security_level(ctx: *mut SSL_CTX, level: c_int);
932
933    #[cfg(any(ossl110, libressl360))]
934    pub fn SSL_set_security_level(s: *mut SSL, level: c_int);
935
936    #[cfg(any(ossl110, libressl360))]
937    pub fn SSL_CTX_get_security_level(ctx: *const SSL_CTX) -> c_int;
938
939    #[cfg(any(ossl110, libressl360))]
940    pub fn SSL_get_security_level(s: *const SSL) -> c_int;
941}
942
943#[cfg(ossl111)]
944extern "C" {
945    pub fn SSL_enable_ct(s: *mut SSL, validation_mode: c_int) -> c_int;
946    pub fn SSL_CTX_enable_ct(ctx: *mut SSL_CTX, validation_mode: c_int) -> c_int;
947    pub fn SSL_ct_is_enabled(s: *const SSL) -> c_int;
948    pub fn SSL_CTX_ct_is_enabled(ctx: *const SSL_CTX) -> c_int;
949}
950
951#[cfg(ossl320)]
952extern "C" {
953    pub fn SSL_CTX_compress_certs(ctx: *mut SSL_CTX, alg: c_int) -> c_int;
954    pub fn SSL_compress_certs(ssl: *mut SSL, alg: c_int) -> c_int;
955    pub fn SSL_CTX_set1_cert_comp_preference(
956        ctx: *mut SSL_CTX,
957        algs: *mut c_int,
958        len: usize,
959    ) -> c_int;
960    pub fn SSL_set1_cert_comp_preference(ssl: *mut SSL, algs: *mut c_int, len: usize) -> c_int;
961}
962
963#[cfg(tongsuo)]
964pub type SSL_cert_compress_cb_fn = Option<
965    unsafe extern "C" fn(
966        s: *mut SSL,
967        in_: *const c_uchar,
968        inlen: usize,
969        out: *mut c_uchar,
970        outlen: *mut usize,
971    ) -> c_int,
972>;
973#[cfg(tongsuo)]
974pub type SSL_cert_decompress_cb_fn = Option<
975    unsafe extern "C" fn(
976        s: *mut SSL,
977        in_: *const c_uchar,
978        inlen: usize,
979        out: *mut c_uchar,
980        outlen: usize,
981    ) -> c_int,
982>;
983#[cfg(tongsuo)]
984extern "C" {
985    pub fn SSL_get_cert_compression_compress_id(s: *mut SSL) -> c_int;
986    pub fn SSL_get_cert_compression_decompress_id(s: *mut SSL) -> c_int;
987    pub fn SSL_add_cert_compression_alg(
988        s: *mut SSL,
989        alg_id: c_int,
990        compress: SSL_cert_compress_cb_fn,
991        decompress: SSL_cert_decompress_cb_fn,
992    ) -> c_int;
993    pub fn SSL_CTX_add_cert_compression_alg(
994        ctx: *mut SSL_CTX,
995        alg_id: c_int,
996        compress: SSL_cert_compress_cb_fn,
997        decompress: SSL_cert_decompress_cb_fn,
998    ) -> c_int;
999}
1000
1001#[cfg(ossl320)]
1002extern "C" {
1003    pub fn OSSL_QUIC_client_method() -> *const SSL_METHOD;
1004    pub fn OSSL_QUIC_client_thread_method() -> *const SSL_METHOD;
1005    pub fn SSL_get_event_timeout(s: *mut SSL, tv: *mut timeval, is_infinite: *mut c_int) -> c_int;
1006    pub fn SSL_handle_events(s: *mut SSL) -> c_int;
1007    pub fn SSL_get_blocking_mode(s: *mut SSL) -> c_int;
1008    pub fn SSL_set_blocking_mode(s: *mut SSL, blocking: c_int) -> c_int;
1009    pub fn SSL_get_rpoll_descriptor(s: *mut SSL, desc: *mut BIO_POLL_DESCRIPTOR) -> c_int;
1010    pub fn SSL_get_wpoll_descriptor(s: *mut SSL, desc: *mut BIO_POLL_DESCRIPTOR) -> c_int;
1011    pub fn SSL_net_read_desired(s: *mut SSL) -> c_int;
1012    pub fn SSL_net_write_desired(s: *mut SSL) -> c_int;
1013    pub fn SSL_set1_initial_peer_addr(s: *mut SSL, peer_addr: *const BIO_ADDR) -> c_int;
1014    pub fn SSL_shutdown_ex(
1015        ssl: *mut SSL,
1016        flags: u64,
1017        args: *const SSL_SHUTDOWN_EX_ARGS,
1018        args_len: usize,
1019    ) -> c_int;
1020    pub fn SSL_stream_conclude(ssl: *mut SSL, flags: u64) -> c_int;
1021    pub fn SSL_stream_reset(
1022        ssl: *mut SSL,
1023        args: *const SSL_STREAM_RESET_ARGS,
1024        args_len: usize,
1025    ) -> c_int;
1026    pub fn SSL_get_stream_read_state(ssl: *mut SSL) -> c_int;
1027    pub fn SSL_get_stream_write_state(ssl: *mut SSL) -> c_int;
1028    pub fn SSL_get_conn_close_info(
1029        ssl: *mut SSL,
1030        info: *mut SSL_CONN_CLOSE_INFO,
1031        info_len: usize,
1032    ) -> c_int;
1033    pub fn SSL_get0_connection(s: *mut SSL) -> *mut SSL;
1034    pub fn SSL_is_connection(s: *mut SSL) -> c_int;
1035    pub fn SSL_get_stream_type(s: *mut SSL) -> c_int;
1036    pub fn SSL_get_stream_id(s: *mut SSL) -> u64;
1037    pub fn SSL_new_stream(s: *mut SSL, flags: u64) -> *mut SSL;
1038    pub fn SSL_accept_stream(s: *mut SSL, flags: u64) -> *mut SSL;
1039    pub fn SSL_set_incoming_stream_policy(s: *mut SSL, policy: c_int, aec: u64) -> c_int;
1040    pub fn SSL_get_accept_stream_queue_len(s: *mut SSL) -> usize;
1041    pub fn SSL_set_default_stream_mode(s: *mut SSL, mode: u32) -> c_int;
1042    pub fn SSL_get0_group_name(s: *mut SSL) -> *const c_char;
1043}
1044
1045#[cfg(ossl330)]
1046extern "C" {
1047    pub fn SSL_write_ex2(
1048        s: *mut SSL,
1049        buf: *const c_void,
1050        num: usize,
1051        flags: u64,
1052        written: *mut usize,
1053    ) -> c_int;
1054    pub fn SSL_get_value_uint(s: *mut SSL, class_: u32, id: u32, v: *mut u64) -> c_int;
1055    pub fn SSL_set_value_uint(s: *mut SSL, class_: u32, id: u32, v: u64) -> c_int;
1056}
1057
1058#[cfg(ossl300)]
1059extern "C" {
1060    pub fn SSL_CTX_set0_tmp_dh_pkey(ctx: *mut SSL_CTX, dhpkey: *mut EVP_PKEY) -> c_int;
1061    pub fn SSL_set0_tmp_dh_pkey(s: *mut SSL, dhpkey: *mut EVP_PKEY) -> c_int;
1062}