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