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 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 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 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 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}