192f3ab15Sopenharmony_ciuse super::super::*;
292f3ab15Sopenharmony_ciuse libc::*;
392f3ab15Sopenharmony_ci
492f3ab15Sopenharmony_cipub enum SSL_METHOD {}
592f3ab15Sopenharmony_cipub enum SSL_CIPHER {}
692f3ab15Sopenharmony_cicfg_if! {
792f3ab15Sopenharmony_ci    if #[cfg(any(ossl110, libressl280))] {
892f3ab15Sopenharmony_ci        pub enum SSL_SESSION {}
992f3ab15Sopenharmony_ci    } else if #[cfg(libressl251)] {
1092f3ab15Sopenharmony_ci        #[repr(C)]
1192f3ab15Sopenharmony_ci        pub struct SSL_SESSION {
1292f3ab15Sopenharmony_ci            ssl_version: c_int,
1392f3ab15Sopenharmony_ci            pub master_key_length: c_int,
1492f3ab15Sopenharmony_ci            pub master_key: [c_uchar; 48],
1592f3ab15Sopenharmony_ci            session_id_length: c_uint,
1692f3ab15Sopenharmony_ci            session_id: [c_uchar; SSL_MAX_SSL_SESSION_ID_LENGTH as usize],
1792f3ab15Sopenharmony_ci            sid_ctx_length: c_uint,
1892f3ab15Sopenharmony_ci            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
1992f3ab15Sopenharmony_ci            peer: *mut X509,
2092f3ab15Sopenharmony_ci            verify_result: c_long,
2192f3ab15Sopenharmony_ci            timeout: c_long,
2292f3ab15Sopenharmony_ci            time: time_t,
2392f3ab15Sopenharmony_ci            pub references: c_int,
2492f3ab15Sopenharmony_ci            cipher: *const SSL_CIPHER,
2592f3ab15Sopenharmony_ci            cipher_id: c_long,
2692f3ab15Sopenharmony_ci            ciphers: *mut stack_st_SSL_CIPHER,
2792f3ab15Sopenharmony_ci            tlsext_hostname: *mut c_char,
2892f3ab15Sopenharmony_ci            tlsext_tick: *mut c_uchar,
2992f3ab15Sopenharmony_ci            tlsext_ticklen: size_t,
3092f3ab15Sopenharmony_ci            tlsext_tick_lifetime_int: c_long,
3192f3ab15Sopenharmony_ci            internal: *mut c_void,
3292f3ab15Sopenharmony_ci        }
3392f3ab15Sopenharmony_ci    } else if #[cfg(libressl)] {
3492f3ab15Sopenharmony_ci        #[repr(C)]
3592f3ab15Sopenharmony_ci        pub struct SSL_SESSION {
3692f3ab15Sopenharmony_ci            ssl_version: c_int,
3792f3ab15Sopenharmony_ci            pub master_key_length: c_int,
3892f3ab15Sopenharmony_ci            pub master_key: [c_uchar; 48],
3992f3ab15Sopenharmony_ci            session_id_length: c_uint,
4092f3ab15Sopenharmony_ci            session_id: [c_uchar; SSL_MAX_SSL_SESSION_ID_LENGTH as usize],
4192f3ab15Sopenharmony_ci            sid_ctx_length: c_uint,
4292f3ab15Sopenharmony_ci            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
4392f3ab15Sopenharmony_ci            not_resumable: c_int,
4492f3ab15Sopenharmony_ci            sess_cert: *mut c_void,
4592f3ab15Sopenharmony_ci            peer: *mut X509,
4692f3ab15Sopenharmony_ci            verify_result: c_long,
4792f3ab15Sopenharmony_ci            timeout: c_long,
4892f3ab15Sopenharmony_ci            time: time_t,
4992f3ab15Sopenharmony_ci            pub references: c_int,
5092f3ab15Sopenharmony_ci            cipher: *const c_void,
5192f3ab15Sopenharmony_ci            cipher_id: c_ulong,
5292f3ab15Sopenharmony_ci            ciphers: *mut c_void,
5392f3ab15Sopenharmony_ci            ex_data: CRYPTO_EX_DATA,
5492f3ab15Sopenharmony_ci            prev: *mut c_void,
5592f3ab15Sopenharmony_ci            next: *mut c_void,
5692f3ab15Sopenharmony_ci            tlsext_hostname: *mut c_char,
5792f3ab15Sopenharmony_ci            tlsext_ecpointformatlist_length: size_t,
5892f3ab15Sopenharmony_ci            tlsext_ecpointformatlist: *mut u8,
5992f3ab15Sopenharmony_ci            tlsext_ellipticcurvelist_length: size_t,
6092f3ab15Sopenharmony_ci            tlsext_ellipticcurvelist: *mut u16,
6192f3ab15Sopenharmony_ci            tlsext_tick: *mut c_uchar,
6292f3ab15Sopenharmony_ci            tlsext_ticklen: size_t,
6392f3ab15Sopenharmony_ci            tlsext_tick_lifetime_hint: c_long,
6492f3ab15Sopenharmony_ci        }
6592f3ab15Sopenharmony_ci    } else {
6692f3ab15Sopenharmony_ci        #[repr(C)]
6792f3ab15Sopenharmony_ci        pub struct SSL_SESSION {
6892f3ab15Sopenharmony_ci            ssl_version: c_int,
6992f3ab15Sopenharmony_ci            key_arg_length: c_uint,
7092f3ab15Sopenharmony_ci            key_arg: [c_uchar; SSL_MAX_KEY_ARG_LENGTH as usize],
7192f3ab15Sopenharmony_ci            pub master_key_length: c_int,
7292f3ab15Sopenharmony_ci            pub master_key: [c_uchar; 48],
7392f3ab15Sopenharmony_ci            session_id_length: c_uint,
7492f3ab15Sopenharmony_ci            session_id: [c_uchar; SSL_MAX_SSL_SESSION_ID_LENGTH as usize],
7592f3ab15Sopenharmony_ci            sid_ctx_length: c_uint,
7692f3ab15Sopenharmony_ci            sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize],
7792f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))]
7892f3ab15Sopenharmony_ci            krb5_client_princ_len: c_uint,
7992f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))]
8092f3ab15Sopenharmony_ci            krb5_client_princ: [c_uchar; SSL_MAX_KRB5_PRINCIPAL_LENGTH as usize],
8192f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
8292f3ab15Sopenharmony_ci            psk_identity_hint: *mut c_char,
8392f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
8492f3ab15Sopenharmony_ci            psk_identity: *mut c_char,
8592f3ab15Sopenharmony_ci            not_resumable: c_int,
8692f3ab15Sopenharmony_ci            sess_cert: *mut c_void,
8792f3ab15Sopenharmony_ci            peer: *mut X509,
8892f3ab15Sopenharmony_ci            verify_result: c_long,
8992f3ab15Sopenharmony_ci            pub references: c_int,
9092f3ab15Sopenharmony_ci            timeout: c_long,
9192f3ab15Sopenharmony_ci            time: c_long,
9292f3ab15Sopenharmony_ci            compress_meth: c_uint,
9392f3ab15Sopenharmony_ci            cipher: *const c_void,
9492f3ab15Sopenharmony_ci            cipher_id: c_ulong,
9592f3ab15Sopenharmony_ci            ciphers: *mut c_void,
9692f3ab15Sopenharmony_ci            ex_data: CRYPTO_EX_DATA,
9792f3ab15Sopenharmony_ci            prev: *mut c_void,
9892f3ab15Sopenharmony_ci            next: *mut c_void,
9992f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
10092f3ab15Sopenharmony_ci            tlsext_hostname: *mut c_char,
10192f3ab15Sopenharmony_ci            #[cfg(all(
10292f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_TLSEXT"),
10392f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_EC")
10492f3ab15Sopenharmony_ci            ))]
10592f3ab15Sopenharmony_ci            tlsext_ecpointformatlist_length: size_t,
10692f3ab15Sopenharmony_ci            #[cfg(all(
10792f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_TLSEXT"),
10892f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_EC")
10992f3ab15Sopenharmony_ci            ))]
11092f3ab15Sopenharmony_ci            tlsext_ecpointformatlist: *mut c_uchar,
11192f3ab15Sopenharmony_ci            #[cfg(all(
11292f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_TLSEXT"),
11392f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_EC")
11492f3ab15Sopenharmony_ci            ))]
11592f3ab15Sopenharmony_ci            tlsext_ellipticcurvelist_length: size_t,
11692f3ab15Sopenharmony_ci            #[cfg(all(
11792f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_TLSEXT"),
11892f3ab15Sopenharmony_ci                not(osslconf = "OPENSSL_NO_EC")
11992f3ab15Sopenharmony_ci            ))]
12092f3ab15Sopenharmony_ci            tlsext_ellipticcurvelist: *mut c_uchar,
12192f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
12292f3ab15Sopenharmony_ci            tlsext_tick: *mut c_uchar,
12392f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
12492f3ab15Sopenharmony_ci            tlsext_ticklen: size_t,
12592f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))]
12692f3ab15Sopenharmony_ci            tlsext_tick_lifetime_hint: c_long,
12792f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_SRP"))]
12892f3ab15Sopenharmony_ci            srp_username: *mut c_char,
12992f3ab15Sopenharmony_ci        }
13092f3ab15Sopenharmony_ci    }
13192f3ab15Sopenharmony_ci}
13292f3ab15Sopenharmony_ci
13392f3ab15Sopenharmony_cistack!(stack_st_SSL_CIPHER);
13492f3ab15Sopenharmony_ci
13592f3ab15Sopenharmony_ci#[repr(C)]
13692f3ab15Sopenharmony_cipub struct SRTP_PROTECTION_PROFILE {
13792f3ab15Sopenharmony_ci    pub name: *const c_char,
13892f3ab15Sopenharmony_ci    pub id: c_ulong,
13992f3ab15Sopenharmony_ci}
14092f3ab15Sopenharmony_ci
14192f3ab15Sopenharmony_cistack!(stack_st_SRTP_PROTECTION_PROFILE);
14292f3ab15Sopenharmony_ci
14392f3ab15Sopenharmony_cipub type tls_session_ticket_ext_cb_fn =
14492f3ab15Sopenharmony_ci    Option<unsafe extern "C" fn(*mut SSL, *const c_uchar, c_int, *mut c_void) -> c_int>;
14592f3ab15Sopenharmony_cipub type tls_session_secret_cb_fn = Option<
14692f3ab15Sopenharmony_ci    unsafe extern "C" fn(
14792f3ab15Sopenharmony_ci        *mut SSL,
14892f3ab15Sopenharmony_ci        *mut c_void,
14992f3ab15Sopenharmony_ci        *mut c_int,
15092f3ab15Sopenharmony_ci        *mut stack_st_SSL_CIPHER,
15192f3ab15Sopenharmony_ci        *mut *mut SSL_CIPHER,
15292f3ab15Sopenharmony_ci        *mut c_void,
15392f3ab15Sopenharmony_ci    ) -> c_int,
15492f3ab15Sopenharmony_ci>;
15592f3ab15Sopenharmony_ci
15692f3ab15Sopenharmony_ci#[cfg(ossl111)]
15792f3ab15Sopenharmony_cipub type SSL_custom_ext_add_cb_ex = Option<
15892f3ab15Sopenharmony_ci    unsafe extern "C" fn(
15992f3ab15Sopenharmony_ci        ssl: *mut SSL,
16092f3ab15Sopenharmony_ci        ext_type: c_uint,
16192f3ab15Sopenharmony_ci        context: c_uint,
16292f3ab15Sopenharmony_ci        out: *mut *const c_uchar,
16392f3ab15Sopenharmony_ci        outlen: *mut size_t,
16492f3ab15Sopenharmony_ci        x: *mut X509,
16592f3ab15Sopenharmony_ci        chainidx: size_t,
16692f3ab15Sopenharmony_ci        al: *mut c_int,
16792f3ab15Sopenharmony_ci        add_arg: *mut c_void,
16892f3ab15Sopenharmony_ci    ) -> c_int,
16992f3ab15Sopenharmony_ci>;
17092f3ab15Sopenharmony_ci
17192f3ab15Sopenharmony_ci#[cfg(ossl111)]
17292f3ab15Sopenharmony_cipub type SSL_custom_ext_free_cb_ex = Option<
17392f3ab15Sopenharmony_ci    unsafe extern "C" fn(
17492f3ab15Sopenharmony_ci        ssl: *mut SSL,
17592f3ab15Sopenharmony_ci        ext_type: c_uint,
17692f3ab15Sopenharmony_ci        context: c_uint,
17792f3ab15Sopenharmony_ci        out: *const c_uchar,
17892f3ab15Sopenharmony_ci        add_arg: *mut c_void,
17992f3ab15Sopenharmony_ci    ),
18092f3ab15Sopenharmony_ci>;
18192f3ab15Sopenharmony_ci
18292f3ab15Sopenharmony_ci#[cfg(ossl111)]
18392f3ab15Sopenharmony_cipub type SSL_custom_ext_parse_cb_ex = Option<
18492f3ab15Sopenharmony_ci    unsafe extern "C" fn(
18592f3ab15Sopenharmony_ci        ssl: *mut SSL,
18692f3ab15Sopenharmony_ci        ext_type: c_uint,
18792f3ab15Sopenharmony_ci        context: c_uint,
18892f3ab15Sopenharmony_ci        input: *const c_uchar,
18992f3ab15Sopenharmony_ci        inlen: size_t,
19092f3ab15Sopenharmony_ci        x: *mut X509,
19192f3ab15Sopenharmony_ci        chainidx: size_t,
19292f3ab15Sopenharmony_ci        al: *mut c_int,
19392f3ab15Sopenharmony_ci        parse_arg: *mut c_void,
19492f3ab15Sopenharmony_ci    ) -> c_int,
19592f3ab15Sopenharmony_ci>;
19692f3ab15Sopenharmony_ci
19792f3ab15Sopenharmony_cicfg_if! {
19892f3ab15Sopenharmony_ci    if #[cfg(ossl300)] {
19992f3ab15Sopenharmony_ci        extern "C" {
20092f3ab15Sopenharmony_ci            pub fn SSL_CTX_get_options(ctx: *const SSL_CTX) -> u64;
20192f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_options(ctx: *mut SSL_CTX, op: u64) -> u64;
20292f3ab15Sopenharmony_ci            pub fn SSL_CTX_clear_options(ctx: *mut SSL_CTX, op: u64) -> u64;
20392f3ab15Sopenharmony_ci        }
20492f3ab15Sopenharmony_ci    } else if #[cfg(ossl110)] {
20592f3ab15Sopenharmony_ci        extern "C" {
20692f3ab15Sopenharmony_ci            pub fn SSL_CTX_get_options(ctx: *const SSL_CTX) -> c_ulong;
20792f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_options(ctx: *mut SSL_CTX, op: c_ulong) -> c_ulong;
20892f3ab15Sopenharmony_ci            pub fn SSL_CTX_clear_options(ctx: *mut SSL_CTX, op: c_ulong) -> c_ulong;
20992f3ab15Sopenharmony_ci        }
21092f3ab15Sopenharmony_ci    }
21192f3ab15Sopenharmony_ci}
21292f3ab15Sopenharmony_ci
21392f3ab15Sopenharmony_cipub type GEN_SESSION_CB =
21492f3ab15Sopenharmony_ci    Option<unsafe extern "C" fn(*const SSL, *mut c_uchar, *mut c_uint) -> c_int>;
21592f3ab15Sopenharmony_ci
21692f3ab15Sopenharmony_ciextern "C" {
21792f3ab15Sopenharmony_ci    pub fn SSL_CTX_sess_set_new_cb(
21892f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
21992f3ab15Sopenharmony_ci        new_session_cb: Option<unsafe extern "C" fn(*mut SSL, *mut SSL_SESSION) -> c_int>,
22092f3ab15Sopenharmony_ci    );
22192f3ab15Sopenharmony_ci    pub fn SSL_CTX_sess_set_remove_cb(
22292f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
22392f3ab15Sopenharmony_ci        remove_session_cb: Option<unsafe extern "C" fn(*mut SSL_CTX, *mut SSL_SESSION)>,
22492f3ab15Sopenharmony_ci    );
22592f3ab15Sopenharmony_ci}
22692f3ab15Sopenharmony_cicfg_if! {
22792f3ab15Sopenharmony_ci    // const change in passed function pointer signature
22892f3ab15Sopenharmony_ci    if #[cfg(any(ossl110, libressl280))] {
22992f3ab15Sopenharmony_ci        extern "C" {
23092f3ab15Sopenharmony_ci            pub fn SSL_CTX_sess_set_get_cb(
23192f3ab15Sopenharmony_ci                ctx: *mut SSL_CTX,
23292f3ab15Sopenharmony_ci                get_session_cb: Option<
23392f3ab15Sopenharmony_ci                    unsafe extern "C" fn(*mut SSL, *const c_uchar, c_int, *mut c_int) -> *mut SSL_SESSION,
23492f3ab15Sopenharmony_ci                >,
23592f3ab15Sopenharmony_ci            );
23692f3ab15Sopenharmony_ci        }
23792f3ab15Sopenharmony_ci    } else {
23892f3ab15Sopenharmony_ci        extern "C" {
23992f3ab15Sopenharmony_ci            pub fn SSL_CTX_sess_set_get_cb(
24092f3ab15Sopenharmony_ci                ctx: *mut SSL_CTX,
24192f3ab15Sopenharmony_ci                get_session_cb: Option<
24292f3ab15Sopenharmony_ci                    unsafe extern "C" fn(*mut SSL, *mut c_uchar, c_int, *mut c_int) -> *mut SSL_SESSION,
24392f3ab15Sopenharmony_ci                >,
24492f3ab15Sopenharmony_ci            );
24592f3ab15Sopenharmony_ci        }
24692f3ab15Sopenharmony_ci    }
24792f3ab15Sopenharmony_ci}
24892f3ab15Sopenharmony_ciextern "C" {
24992f3ab15Sopenharmony_ci    // FIXME change to unsafe extern "C" fn
25092f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_cookie_generate_cb(
25192f3ab15Sopenharmony_ci        s: *mut SSL_CTX,
25292f3ab15Sopenharmony_ci        cb: Option<
25392f3ab15Sopenharmony_ci            extern "C" fn(ssl: *mut SSL, cookie: *mut c_uchar, cookie_len: *mut c_uint) -> c_int,
25492f3ab15Sopenharmony_ci        >,
25592f3ab15Sopenharmony_ci    );
25692f3ab15Sopenharmony_ci}
25792f3ab15Sopenharmony_ci
25892f3ab15Sopenharmony_cicfg_if! {
25992f3ab15Sopenharmony_ci    // const change in passed function pointer signature
26092f3ab15Sopenharmony_ci    if #[cfg(any(ossl110, libressl280))] {
26192f3ab15Sopenharmony_ci        extern "C" {
26292f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_cookie_verify_cb(
26392f3ab15Sopenharmony_ci                s: *mut SSL_CTX,
26492f3ab15Sopenharmony_ci                cb: Option<
26592f3ab15Sopenharmony_ci                    extern "C" fn(ssl: *mut SSL, cookie: *const c_uchar, cookie_len: c_uint) -> c_int,
26692f3ab15Sopenharmony_ci                >,
26792f3ab15Sopenharmony_ci            );
26892f3ab15Sopenharmony_ci        }
26992f3ab15Sopenharmony_ci    } else {
27092f3ab15Sopenharmony_ci        extern "C" {
27192f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_cookie_verify_cb(
27292f3ab15Sopenharmony_ci                s: *mut SSL_CTX,
27392f3ab15Sopenharmony_ci                cb: Option<extern "C" fn(ssl: *mut SSL, cookie: *mut c_uchar, cookie_len: c_uint) -> c_int>,
27492f3ab15Sopenharmony_ci            );
27592f3ab15Sopenharmony_ci        }
27692f3ab15Sopenharmony_ci    }
27792f3ab15Sopenharmony_ci}
27892f3ab15Sopenharmony_ci
27992f3ab15Sopenharmony_ciextern "C" {
28092f3ab15Sopenharmony_ci    #[cfg(ossl111)]
28192f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_stateless_cookie_generate_cb(
28292f3ab15Sopenharmony_ci        s: *mut SSL_CTX,
28392f3ab15Sopenharmony_ci        cb: Option<
28492f3ab15Sopenharmony_ci            unsafe extern "C" fn(
28592f3ab15Sopenharmony_ci                ssl: *mut SSL,
28692f3ab15Sopenharmony_ci                cookie: *mut c_uchar,
28792f3ab15Sopenharmony_ci                cookie_len: *mut size_t,
28892f3ab15Sopenharmony_ci            ) -> c_int,
28992f3ab15Sopenharmony_ci        >,
29092f3ab15Sopenharmony_ci    );
29192f3ab15Sopenharmony_ci    #[cfg(ossl111)]
29292f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_stateless_cookie_verify_cb(
29392f3ab15Sopenharmony_ci        s: *mut SSL_CTX,
29492f3ab15Sopenharmony_ci        cb: Option<
29592f3ab15Sopenharmony_ci            unsafe extern "C" fn(
29692f3ab15Sopenharmony_ci                ssl: *mut SSL,
29792f3ab15Sopenharmony_ci                cookie: *const c_uchar,
29892f3ab15Sopenharmony_ci                cookie_len: size_t,
29992f3ab15Sopenharmony_ci            ) -> c_int,
30092f3ab15Sopenharmony_ci        >,
30192f3ab15Sopenharmony_ci    );
30292f3ab15Sopenharmony_ci
30392f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_next_protos_advertised_cb(
30492f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
30592f3ab15Sopenharmony_ci        cb: extern "C" fn(
30692f3ab15Sopenharmony_ci            ssl: *mut SSL,
30792f3ab15Sopenharmony_ci            out: *mut *const c_uchar,
30892f3ab15Sopenharmony_ci            outlen: *mut c_uint,
30992f3ab15Sopenharmony_ci            arg: *mut c_void,
31092f3ab15Sopenharmony_ci        ) -> c_int,
31192f3ab15Sopenharmony_ci        arg: *mut c_void,
31292f3ab15Sopenharmony_ci    );
31392f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_next_proto_select_cb(
31492f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
31592f3ab15Sopenharmony_ci        cb: extern "C" fn(
31692f3ab15Sopenharmony_ci            ssl: *mut SSL,
31792f3ab15Sopenharmony_ci            out: *mut *mut c_uchar,
31892f3ab15Sopenharmony_ci            outlen: *mut c_uchar,
31992f3ab15Sopenharmony_ci            inbuf: *const c_uchar,
32092f3ab15Sopenharmony_ci            inlen: c_uint,
32192f3ab15Sopenharmony_ci            arg: *mut c_void,
32292f3ab15Sopenharmony_ci        ) -> c_int,
32392f3ab15Sopenharmony_ci        arg: *mut c_void,
32492f3ab15Sopenharmony_ci    );
32592f3ab15Sopenharmony_ci    pub fn SSL_get0_next_proto_negotiated(
32692f3ab15Sopenharmony_ci        s: *const SSL,
32792f3ab15Sopenharmony_ci        data: *mut *const c_uchar,
32892f3ab15Sopenharmony_ci        len: *mut c_uint,
32992f3ab15Sopenharmony_ci    );
33092f3ab15Sopenharmony_ci
33192f3ab15Sopenharmony_ci    pub fn SSL_select_next_proto(
33292f3ab15Sopenharmony_ci        out: *mut *mut c_uchar,
33392f3ab15Sopenharmony_ci        outlen: *mut c_uchar,
33492f3ab15Sopenharmony_ci        inbuf: *const c_uchar,
33592f3ab15Sopenharmony_ci        inlen: c_uint,
33692f3ab15Sopenharmony_ci        client: *const c_uchar,
33792f3ab15Sopenharmony_ci        client_len: c_uint,
33892f3ab15Sopenharmony_ci    ) -> c_int;
33992f3ab15Sopenharmony_ci}
34092f3ab15Sopenharmony_ci
34192f3ab15Sopenharmony_ciextern "C" {
34292f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
34392f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_alpn_protos(s: *mut SSL_CTX, data: *const c_uchar, len: c_uint) -> c_int;
34492f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
34592f3ab15Sopenharmony_ci    pub fn SSL_set_alpn_protos(s: *mut SSL, data: *const c_uchar, len: c_uint) -> c_int;
34692f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
34792f3ab15Sopenharmony_ci    #[link_name = "SSL_CTX_set_alpn_select_cb"]
34892f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_alpn_select_cb__fixed_rust(
34992f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
35092f3ab15Sopenharmony_ci        cb: Option<
35192f3ab15Sopenharmony_ci            unsafe extern "C" fn(
35292f3ab15Sopenharmony_ci                ssl: *mut SSL,
35392f3ab15Sopenharmony_ci                out: *mut *const c_uchar,
35492f3ab15Sopenharmony_ci                outlen: *mut c_uchar,
35592f3ab15Sopenharmony_ci                inbuf: *const c_uchar,
35692f3ab15Sopenharmony_ci                inlen: c_uint,
35792f3ab15Sopenharmony_ci                arg: *mut c_void,
35892f3ab15Sopenharmony_ci            ) -> c_int,
35992f3ab15Sopenharmony_ci        >,
36092f3ab15Sopenharmony_ci        arg: *mut c_void,
36192f3ab15Sopenharmony_ci    );
36292f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
36392f3ab15Sopenharmony_ci    pub fn SSL_get0_alpn_selected(s: *const SSL, data: *mut *const c_uchar, len: *mut c_uint);
36492f3ab15Sopenharmony_ci}
36592f3ab15Sopenharmony_ci
36692f3ab15Sopenharmony_ci#[cfg(not(osslconf = "OPENSSL_NO_PSK"))]
36792f3ab15Sopenharmony_ciextern "C" {
36892f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_psk_client_callback(
36992f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
37092f3ab15Sopenharmony_ci        psk_client_cb: Option<
37192f3ab15Sopenharmony_ci            extern "C" fn(
37292f3ab15Sopenharmony_ci                *mut SSL,
37392f3ab15Sopenharmony_ci                *const c_char,
37492f3ab15Sopenharmony_ci                *mut c_char,
37592f3ab15Sopenharmony_ci                c_uint,
37692f3ab15Sopenharmony_ci                *mut c_uchar,
37792f3ab15Sopenharmony_ci                c_uint,
37892f3ab15Sopenharmony_ci            ) -> c_uint,
37992f3ab15Sopenharmony_ci        >,
38092f3ab15Sopenharmony_ci    );
38192f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_psk_server_callback(
38292f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
38392f3ab15Sopenharmony_ci        psk_server_cb: Option<
38492f3ab15Sopenharmony_ci            extern "C" fn(*mut SSL, *const c_char, *mut c_uchar, c_uint) -> c_uint,
38592f3ab15Sopenharmony_ci        >,
38692f3ab15Sopenharmony_ci    );
38792f3ab15Sopenharmony_ci    pub fn SSL_get_psk_identity_hint(ssl: *const SSL) -> *const c_char;
38892f3ab15Sopenharmony_ci    pub fn SSL_get_psk_identity(ssl: *const SSL) -> *const c_char;
38992f3ab15Sopenharmony_ci}
39092f3ab15Sopenharmony_ci
39192f3ab15Sopenharmony_ciextern "C" {
39292f3ab15Sopenharmony_ci    #[cfg(ossl111)]
39392f3ab15Sopenharmony_ci    pub fn SSL_CTX_add_custom_ext(
39492f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
39592f3ab15Sopenharmony_ci        ext_type: c_uint,
39692f3ab15Sopenharmony_ci        context: c_uint,
39792f3ab15Sopenharmony_ci        add_cb: SSL_custom_ext_add_cb_ex,
39892f3ab15Sopenharmony_ci        free_cb: SSL_custom_ext_free_cb_ex,
39992f3ab15Sopenharmony_ci        add_arg: *mut c_void,
40092f3ab15Sopenharmony_ci        parse_cb: SSL_custom_ext_parse_cb_ex,
40192f3ab15Sopenharmony_ci        parse_arg: *mut c_void,
40292f3ab15Sopenharmony_ci    ) -> c_int;
40392f3ab15Sopenharmony_ci
40492f3ab15Sopenharmony_ci    #[cfg(ossl102)]
40592f3ab15Sopenharmony_ci    pub fn SSL_extension_supported(ext_type: c_uint) -> c_int;
40692f3ab15Sopenharmony_ci}
40792f3ab15Sopenharmony_ci
40892f3ab15Sopenharmony_ci#[cfg(ossl111)]
40992f3ab15Sopenharmony_cipub type SSL_CTX_keylog_cb_func =
41092f3ab15Sopenharmony_ci    Option<unsafe extern "C" fn(ssl: *const SSL, line: *const c_char)>;
41192f3ab15Sopenharmony_ci
41292f3ab15Sopenharmony_ciextern "C" {
41392f3ab15Sopenharmony_ci    #[cfg(ossl111)]
41492f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_keylog_callback(ctx: *mut SSL_CTX, cb: SSL_CTX_keylog_cb_func);
41592f3ab15Sopenharmony_ci
41692f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
41792f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_max_early_data(ctx: *mut SSL_CTX, max_early_data: u32) -> c_int;
41892f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
41992f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_max_early_data(ctx: *const SSL_CTX) -> u32;
42092f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
42192f3ab15Sopenharmony_ci    pub fn SSL_set_max_early_data(ctx: *mut SSL, max_early_data: u32) -> c_int;
42292f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
42392f3ab15Sopenharmony_ci    pub fn SSL_get_max_early_data(ctx: *const SSL) -> u32;
42492f3ab15Sopenharmony_ci
42592f3ab15Sopenharmony_ci    pub fn SSL_get_finished(s: *const SSL, buf: *mut c_void, count: size_t) -> size_t;
42692f3ab15Sopenharmony_ci    pub fn SSL_get_peer_finished(s: *const SSL, buf: *mut c_void, count: size_t) -> size_t;
42792f3ab15Sopenharmony_ci
42892f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_verify_mode(ctx: *const SSL_CTX) -> c_int;
42992f3ab15Sopenharmony_ci    pub fn SSL_get_verify_mode(s: *const SSL) -> c_int;
43092f3ab15Sopenharmony_ci}
43192f3ab15Sopenharmony_ci
43292f3ab15Sopenharmony_ciconst_ptr_api! {
43392f3ab15Sopenharmony_ci    extern "C" {
43492f3ab15Sopenharmony_ci        #[cfg(ossl110)]
43592f3ab15Sopenharmony_ci        pub fn SSL_is_init_finished(s: #[const_ptr_if(ossl111)] SSL) -> c_int;
43692f3ab15Sopenharmony_ci    }
43792f3ab15Sopenharmony_ci}
43892f3ab15Sopenharmony_ci
43992f3ab15Sopenharmony_cicfg_if! {
44092f3ab15Sopenharmony_ci    if #[cfg(libressl261)] {
44192f3ab15Sopenharmony_ci        extern "C" {
44292f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_min_proto_version(ctx: *mut SSL_CTX, version: u16) -> c_int;
44392f3ab15Sopenharmony_ci            pub fn SSL_CTX_set_max_proto_version(ctx: *mut SSL_CTX, version: u16) -> c_int;
44492f3ab15Sopenharmony_ci            pub fn SSL_set_min_proto_version(s: *mut SSL, version: u16) -> c_int;
44592f3ab15Sopenharmony_ci            pub fn SSL_set_max_proto_version(s: *mut SSL, version: u16) -> c_int;
44692f3ab15Sopenharmony_ci        }
44792f3ab15Sopenharmony_ci    }
44892f3ab15Sopenharmony_ci}
44992f3ab15Sopenharmony_ci
45092f3ab15Sopenharmony_cicfg_if! {
45192f3ab15Sopenharmony_ci    if #[cfg(libressl270)] {
45292f3ab15Sopenharmony_ci        extern "C" {
45392f3ab15Sopenharmony_ci            pub fn SSL_CTX_get_min_proto_version(ctx: *mut SSL_CTX) -> c_int;
45492f3ab15Sopenharmony_ci            pub fn SSL_CTX_get_max_proto_version(ctx: *mut SSL_CTX) -> c_int;
45592f3ab15Sopenharmony_ci            pub fn SSL_get_min_proto_version(s: *mut SSL) -> c_int;
45692f3ab15Sopenharmony_ci            pub fn SSL_get_max_proto_version(s: *mut SSL) -> c_int;
45792f3ab15Sopenharmony_ci        }
45892f3ab15Sopenharmony_ci    }
45992f3ab15Sopenharmony_ci}
46092f3ab15Sopenharmony_ci
46192f3ab15Sopenharmony_ciextern "C" {
46292f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_cipher_list(ssl: *mut SSL_CTX, s: *const c_char) -> c_int;
46392f3ab15Sopenharmony_ci    pub fn SSL_CTX_new(method: *const SSL_METHOD) -> *mut SSL_CTX;
46492f3ab15Sopenharmony_ci    pub fn SSL_CTX_free(ctx: *mut SSL_CTX);
46592f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl273))]
46692f3ab15Sopenharmony_ci    pub fn SSL_CTX_up_ref(x: *mut SSL_CTX) -> c_int;
46792f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_cert_store(ctx: *const SSL_CTX) -> *mut X509_STORE;
46892f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_cert_store(ctx: *mut SSL_CTX, store: *mut X509_STORE);
46992f3ab15Sopenharmony_ci
47092f3ab15Sopenharmony_ci    pub fn SSL_get_current_cipher(ssl: *const SSL) -> *const SSL_CIPHER;
47192f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_get_bits(cipher: *const SSL_CIPHER, alg_bits: *mut c_int) -> c_int;
47292f3ab15Sopenharmony_ci}
47392f3ab15Sopenharmony_ciconst_ptr_api! {
47492f3ab15Sopenharmony_ci    extern "C" {
47592f3ab15Sopenharmony_ci        pub fn SSL_CIPHER_get_version(cipher: *const SSL_CIPHER) -> #[const_ptr_if(any(ossl110, libressl280))] c_char;
47692f3ab15Sopenharmony_ci    }
47792f3ab15Sopenharmony_ci}
47892f3ab15Sopenharmony_ciextern "C" {
47992f3ab15Sopenharmony_ci    #[cfg(ossl111)]
48092f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_get_handshake_digest(cipher: *const SSL_CIPHER) -> *const EVP_MD;
48192f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_get_name(cipher: *const SSL_CIPHER) -> *const c_char;
48292f3ab15Sopenharmony_ci    #[cfg(ossl111)]
48392f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_standard_name(cipher: *const SSL_CIPHER) -> *const c_char;
48492f3ab15Sopenharmony_ci    #[cfg(ossl111)]
48592f3ab15Sopenharmony_ci    pub fn OPENSSL_cipher_name(rfc_name: *const c_char) -> *const c_char;
48692f3ab15Sopenharmony_ci
48792f3ab15Sopenharmony_ci    pub fn SSL_pending(ssl: *const SSL) -> c_int;
48892f3ab15Sopenharmony_ci    pub fn SSL_set_bio(ssl: *mut SSL, rbio: *mut BIO, wbio: *mut BIO);
48992f3ab15Sopenharmony_ci    pub fn SSL_get_rbio(ssl: *const SSL) -> *mut BIO;
49092f3ab15Sopenharmony_ci    pub fn SSL_get_wbio(ssl: *const SSL) -> *mut BIO;
49192f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
49292f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_ciphersuites(ctx: *mut SSL_CTX, str: *const c_char) -> c_int;
49392f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
49492f3ab15Sopenharmony_ci    pub fn SSL_set_ciphersuites(ssl: *mut SSL, str: *const c_char) -> c_int;
49592f3ab15Sopenharmony_ci    pub fn SSL_set_cipher_list(ssl: *mut SSL, s: *const c_char) -> c_int;
49692f3ab15Sopenharmony_ci    pub fn SSL_set_ssl_method(s: *mut SSL, method: *const SSL_METHOD) -> c_int;
49792f3ab15Sopenharmony_ci    pub fn SSL_set_verify(
49892f3ab15Sopenharmony_ci        ssl: *mut SSL,
49992f3ab15Sopenharmony_ci        mode: c_int,
50092f3ab15Sopenharmony_ci        // FIXME should be unsafe
50192f3ab15Sopenharmony_ci        verify_callback: Option<extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
50292f3ab15Sopenharmony_ci    );
50392f3ab15Sopenharmony_ci    pub fn SSL_CTX_use_PrivateKey(ctx: *mut SSL_CTX, key: *mut EVP_PKEY) -> c_int;
50492f3ab15Sopenharmony_ci    pub fn SSL_CTX_use_certificate(ctx: *mut SSL_CTX, cert: *mut X509) -> c_int;
50592f3ab15Sopenharmony_ci
50692f3ab15Sopenharmony_ci    pub fn SSL_CTX_use_PrivateKey_file(
50792f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
50892f3ab15Sopenharmony_ci        key_file: *const c_char,
50992f3ab15Sopenharmony_ci        file_type: c_int,
51092f3ab15Sopenharmony_ci    ) -> c_int;
51192f3ab15Sopenharmony_ci    pub fn SSL_CTX_use_certificate_file(
51292f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
51392f3ab15Sopenharmony_ci        cert_file: *const c_char,
51492f3ab15Sopenharmony_ci        file_type: c_int,
51592f3ab15Sopenharmony_ci    ) -> c_int;
51692f3ab15Sopenharmony_ci    pub fn SSL_CTX_use_certificate_chain_file(
51792f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
51892f3ab15Sopenharmony_ci        cert_chain_file: *const c_char,
51992f3ab15Sopenharmony_ci    ) -> c_int;
52092f3ab15Sopenharmony_ci    pub fn SSL_use_PrivateKey_file(ssl: *mut SSL, file: *const c_char, type_: c_int) -> c_int;
52192f3ab15Sopenharmony_ci    pub fn SSL_use_PrivateKey(ssl: *mut SSL, pkey: *mut EVP_PKEY) -> c_int;
52292f3ab15Sopenharmony_ci    pub fn SSL_use_certificate(ssl: *mut SSL, x: *mut X509) -> c_int;
52392f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl332))]
52492f3ab15Sopenharmony_ci    pub fn SSL_use_certificate_chain_file(ssl: *mut SSL, file: *const c_char) -> c_int;
52592f3ab15Sopenharmony_ci    pub fn SSL_set_client_CA_list(s: *mut SSL, name_list: *mut stack_st_X509_NAME);
52692f3ab15Sopenharmony_ci    pub fn SSL_add_client_CA(ssl: *mut SSL, x: *mut X509) -> c_int;
52792f3ab15Sopenharmony_ci    pub fn SSL_load_client_CA_file(file: *const c_char) -> *mut stack_st_X509_NAME;
52892f3ab15Sopenharmony_ci
52992f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
53092f3ab15Sopenharmony_ci    pub fn SSL_load_error_strings();
53192f3ab15Sopenharmony_ci    pub fn SSL_state_string(ssl: *const SSL) -> *const c_char;
53292f3ab15Sopenharmony_ci    pub fn SSL_state_string_long(ssl: *const SSL) -> *const c_char;
53392f3ab15Sopenharmony_ci
53492f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_time(s: *const SSL_SESSION) -> c_long;
53592f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_timeout(s: *const SSL_SESSION) -> c_long;
53692f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl270))]
53792f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_protocol_version(s: *const SSL_SESSION) -> c_int;
53892f3ab15Sopenharmony_ci
53992f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
54092f3ab15Sopenharmony_ci    pub fn SSL_SESSION_set_max_early_data(ctx: *mut SSL_SESSION, max_early_data: u32) -> c_int;
54192f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
54292f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_max_early_data(ctx: *const SSL_SESSION) -> u32;
54392f3ab15Sopenharmony_ci
54492f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_id(s: *const SSL_SESSION, len: *mut c_uint) -> *const c_uchar;
54592f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl273))]
54692f3ab15Sopenharmony_ci    pub fn SSL_SESSION_up_ref(ses: *mut SSL_SESSION) -> c_int;
54792f3ab15Sopenharmony_ci    pub fn SSL_SESSION_free(s: *mut SSL_SESSION);
54892f3ab15Sopenharmony_ci}
54992f3ab15Sopenharmony_ciconst_ptr_api! {
55092f3ab15Sopenharmony_ci    extern "C" {
55192f3ab15Sopenharmony_ci        pub fn i2d_SSL_SESSION(s: #[const_ptr_if(ossl300)] SSL_SESSION, pp: *mut *mut c_uchar) -> c_int;
55292f3ab15Sopenharmony_ci    }
55392f3ab15Sopenharmony_ci}
55492f3ab15Sopenharmony_ciextern "C" {
55592f3ab15Sopenharmony_ci    pub fn SSL_set_session(ssl: *mut SSL, session: *mut SSL_SESSION) -> c_int;
55692f3ab15Sopenharmony_ci    pub fn SSL_CTX_add_session(ctx: *mut SSL_CTX, session: *mut SSL_SESSION) -> c_int;
55792f3ab15Sopenharmony_ci    pub fn SSL_CTX_remove_session(ctx: *mut SSL_CTX, session: *mut SSL_SESSION) -> c_int;
55892f3ab15Sopenharmony_ci    pub fn d2i_SSL_SESSION(
55992f3ab15Sopenharmony_ci        a: *mut *mut SSL_SESSION,
56092f3ab15Sopenharmony_ci        pp: *mut *const c_uchar,
56192f3ab15Sopenharmony_ci        len: c_long,
56292f3ab15Sopenharmony_ci    ) -> *mut SSL_SESSION;
56392f3ab15Sopenharmony_ci
56492f3ab15Sopenharmony_ci    #[cfg(not(ossl300))]
56592f3ab15Sopenharmony_ci    pub fn SSL_get_peer_certificate(ssl: *const SSL) -> *mut X509;
56692f3ab15Sopenharmony_ci    #[cfg(ossl300)]
56792f3ab15Sopenharmony_ci    pub fn SSL_get1_peer_certificate(ssl: *const SSL) -> *mut X509;
56892f3ab15Sopenharmony_ci
56992f3ab15Sopenharmony_ci    pub fn SSL_get_peer_cert_chain(ssl: *const SSL) -> *mut stack_st_X509;
57092f3ab15Sopenharmony_ci
57192f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_verify(
57292f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
57392f3ab15Sopenharmony_ci        mode: c_int,
57492f3ab15Sopenharmony_ci        verify_callback: Option<extern "C" fn(c_int, *mut X509_STORE_CTX) -> c_int>,
57592f3ab15Sopenharmony_ci    );
57692f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_verify_depth(ctx: *mut SSL_CTX, depth: c_int);
57792f3ab15Sopenharmony_ci
57892f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
57992f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_post_handshake_auth(ctx: *mut SSL_CTX, val: c_int);
58092f3ab15Sopenharmony_ci
58192f3ab15Sopenharmony_ci    pub fn SSL_CTX_check_private_key(ctx: *const SSL_CTX) -> c_int;
58292f3ab15Sopenharmony_ci
58392f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_session_id_context(
58492f3ab15Sopenharmony_ci        ssl: *mut SSL_CTX,
58592f3ab15Sopenharmony_ci        sid_ctx: *const c_uchar,
58692f3ab15Sopenharmony_ci        sid_ctx_len: c_uint,
58792f3ab15Sopenharmony_ci    ) -> c_int;
58892f3ab15Sopenharmony_ci
58992f3ab15Sopenharmony_ci    pub fn SSL_new(ctx: *mut SSL_CTX) -> *mut SSL;
59092f3ab15Sopenharmony_ci
59192f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
59292f3ab15Sopenharmony_ci    pub fn SSL_CTX_get0_param(ctx: *mut SSL_CTX) -> *mut X509_VERIFY_PARAM;
59392f3ab15Sopenharmony_ci
59492f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl261))]
59592f3ab15Sopenharmony_ci    pub fn SSL_get0_param(ssl: *mut SSL) -> *mut X509_VERIFY_PARAM;
59692f3ab15Sopenharmony_ci}
59792f3ab15Sopenharmony_ci
59892f3ab15Sopenharmony_ci#[cfg(ossl111)]
59992f3ab15Sopenharmony_cipub type SSL_client_hello_cb_fn =
60092f3ab15Sopenharmony_ci    Option<unsafe extern "C" fn(s: *mut SSL, al: *mut c_int, arg: *mut c_void) -> c_int>;
60192f3ab15Sopenharmony_ciextern "C" {
60292f3ab15Sopenharmony_ci    #[cfg(ossl111)]
60392f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_client_hello_cb(
60492f3ab15Sopenharmony_ci        c: *mut SSL_CTX,
60592f3ab15Sopenharmony_ci        cb: SSL_client_hello_cb_fn,
60692f3ab15Sopenharmony_ci        arg: *mut c_void,
60792f3ab15Sopenharmony_ci    );
60892f3ab15Sopenharmony_ci    #[cfg(ossl111)]
60992f3ab15Sopenharmony_ci    pub fn SSL_client_hello_isv2(s: *mut SSL) -> c_int;
61092f3ab15Sopenharmony_ci    #[cfg(ossl111)]
61192f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_legacy_version(s: *mut SSL) -> c_uint;
61292f3ab15Sopenharmony_ci    #[cfg(ossl111)]
61392f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_random(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
61492f3ab15Sopenharmony_ci    #[cfg(ossl111)]
61592f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_session_id(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
61692f3ab15Sopenharmony_ci    #[cfg(ossl111)]
61792f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_ciphers(s: *mut SSL, out: *mut *const c_uchar) -> size_t;
61892f3ab15Sopenharmony_ci    #[cfg(ossl111)]
61992f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_compression_methods(
62092f3ab15Sopenharmony_ci        s: *mut SSL,
62192f3ab15Sopenharmony_ci        out: *mut *const c_uchar,
62292f3ab15Sopenharmony_ci    ) -> size_t;
62392f3ab15Sopenharmony_ci    #[cfg(ossl111)]
62492f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get1_extensions_present(
62592f3ab15Sopenharmony_ci        s: *mut SSL,
62692f3ab15Sopenharmony_ci        out: *mut *mut c_int,
62792f3ab15Sopenharmony_ci        outlen: *mut size_t,
62892f3ab15Sopenharmony_ci    ) -> c_int;
62992f3ab15Sopenharmony_ci    #[cfg(ossl111)]
63092f3ab15Sopenharmony_ci    pub fn SSL_client_hello_get0_ext(
63192f3ab15Sopenharmony_ci        s: *mut SSL,
63292f3ab15Sopenharmony_ci        type_: c_uint,
63392f3ab15Sopenharmony_ci        out: *mut *const c_uchar,
63492f3ab15Sopenharmony_ci        outlen: *mut size_t,
63592f3ab15Sopenharmony_ci    ) -> c_int;
63692f3ab15Sopenharmony_ci
63792f3ab15Sopenharmony_ci    pub fn SSL_free(ssl: *mut SSL);
63892f3ab15Sopenharmony_ci    pub fn SSL_accept(ssl: *mut SSL) -> c_int;
63992f3ab15Sopenharmony_ci    #[cfg(ossl111)]
64092f3ab15Sopenharmony_ci    pub fn SSL_stateless(s: *mut SSL) -> c_int;
64192f3ab15Sopenharmony_ci    pub fn SSL_connect(ssl: *mut SSL) -> c_int;
64292f3ab15Sopenharmony_ci    pub fn SSL_read(ssl: *mut SSL, buf: *mut c_void, num: c_int) -> c_int;
64392f3ab15Sopenharmony_ci    pub fn SSL_peek(ssl: *mut SSL, buf: *mut c_void, num: c_int) -> c_int;
64492f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
64592f3ab15Sopenharmony_ci    pub fn SSL_read_early_data(
64692f3ab15Sopenharmony_ci        s: *mut SSL,
64792f3ab15Sopenharmony_ci        buf: *mut c_void,
64892f3ab15Sopenharmony_ci        num: size_t,
64992f3ab15Sopenharmony_ci        readbytes: *mut size_t,
65092f3ab15Sopenharmony_ci    ) -> c_int;
65192f3ab15Sopenharmony_ci    #[cfg(ossl111)]
65292f3ab15Sopenharmony_ci    pub fn SSL_bytes_to_cipher_list(
65392f3ab15Sopenharmony_ci        s: *mut SSL,
65492f3ab15Sopenharmony_ci        bytes: *const c_uchar,
65592f3ab15Sopenharmony_ci        len: size_t,
65692f3ab15Sopenharmony_ci        isv2format: c_int,
65792f3ab15Sopenharmony_ci        sk: *mut *mut stack_st_SSL_CIPHER,
65892f3ab15Sopenharmony_ci        scsvs: *mut *mut stack_st_SSL_CIPHER,
65992f3ab15Sopenharmony_ci    ) -> c_int;
66092f3ab15Sopenharmony_ci}
66192f3ab15Sopenharmony_ci
66292f3ab15Sopenharmony_ciextern "C" {
66392f3ab15Sopenharmony_ci    pub fn SSL_write(ssl: *mut SSL, buf: *const c_void, num: c_int) -> c_int;
66492f3ab15Sopenharmony_ci    #[cfg(any(ossl111, libressl340))]
66592f3ab15Sopenharmony_ci    pub fn SSL_write_early_data(
66692f3ab15Sopenharmony_ci        s: *mut SSL,
66792f3ab15Sopenharmony_ci        buf: *const c_void,
66892f3ab15Sopenharmony_ci        num: size_t,
66992f3ab15Sopenharmony_ci        written: *mut size_t,
67092f3ab15Sopenharmony_ci    ) -> c_int;
67192f3ab15Sopenharmony_ci    pub fn SSL_ctrl(ssl: *mut SSL, cmd: c_int, larg: c_long, parg: *mut c_void) -> c_long;
67292f3ab15Sopenharmony_ci    pub fn SSL_CTX_ctrl(ctx: *mut SSL_CTX, cmd: c_int, larg: c_long, parg: *mut c_void) -> c_long;
67392f3ab15Sopenharmony_ci    #[link_name = "SSL_CTX_callback_ctrl"]
67492f3ab15Sopenharmony_ci    pub fn SSL_CTX_callback_ctrl__fixed_rust(
67592f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
67692f3ab15Sopenharmony_ci        cmd: c_int,
67792f3ab15Sopenharmony_ci        fp: Option<unsafe extern "C" fn()>,
67892f3ab15Sopenharmony_ci    ) -> c_long;
67992f3ab15Sopenharmony_ci}
68092f3ab15Sopenharmony_ci
68192f3ab15Sopenharmony_cicfg_if! {
68292f3ab15Sopenharmony_ci    if #[cfg(any(ossl110, libressl291))] {
68392f3ab15Sopenharmony_ci        extern "C" {
68492f3ab15Sopenharmony_ci            pub fn TLS_method() -> *const SSL_METHOD;
68592f3ab15Sopenharmony_ci
68692f3ab15Sopenharmony_ci            pub fn DTLS_method() -> *const SSL_METHOD;
68792f3ab15Sopenharmony_ci
68892f3ab15Sopenharmony_ci            pub fn TLS_server_method() -> *const SSL_METHOD;
68992f3ab15Sopenharmony_ci
69092f3ab15Sopenharmony_ci            pub fn TLS_client_method() -> *const SSL_METHOD;
69192f3ab15Sopenharmony_ci        }
69292f3ab15Sopenharmony_ci    } else {
69392f3ab15Sopenharmony_ci        extern "C" {
69492f3ab15Sopenharmony_ci            #[cfg(not(osslconf = "OPENSSL_NO_SSL3_METHOD"))]
69592f3ab15Sopenharmony_ci            pub fn SSLv3_method() -> *const SSL_METHOD;
69692f3ab15Sopenharmony_ci
69792f3ab15Sopenharmony_ci            pub fn SSLv23_method() -> *const SSL_METHOD;
69892f3ab15Sopenharmony_ci
69992f3ab15Sopenharmony_ci            pub fn SSLv23_client_method() -> *const SSL_METHOD;
70092f3ab15Sopenharmony_ci
70192f3ab15Sopenharmony_ci            pub fn SSLv23_server_method() -> *const SSL_METHOD;
70292f3ab15Sopenharmony_ci
70392f3ab15Sopenharmony_ci            pub fn TLSv1_method() -> *const SSL_METHOD;
70492f3ab15Sopenharmony_ci
70592f3ab15Sopenharmony_ci            pub fn TLSv1_1_method() -> *const SSL_METHOD;
70692f3ab15Sopenharmony_ci
70792f3ab15Sopenharmony_ci            pub fn TLSv1_2_method() -> *const SSL_METHOD;
70892f3ab15Sopenharmony_ci
70992f3ab15Sopenharmony_ci            pub fn DTLSv1_method() -> *const SSL_METHOD;
71092f3ab15Sopenharmony_ci
71192f3ab15Sopenharmony_ci            #[cfg(ossl102)]
71292f3ab15Sopenharmony_ci            pub fn DTLSv1_2_method() -> *const SSL_METHOD;
71392f3ab15Sopenharmony_ci        }
71492f3ab15Sopenharmony_ci    }
71592f3ab15Sopenharmony_ci}
71692f3ab15Sopenharmony_ci
71792f3ab15Sopenharmony_ciextern "C" {
71892f3ab15Sopenharmony_ci    pub fn SSL_get_error(ssl: *const SSL, ret: c_int) -> c_int;
71992f3ab15Sopenharmony_ci    pub fn SSL_get_version(ssl: *const SSL) -> *const c_char;
72092f3ab15Sopenharmony_ci
72192f3ab15Sopenharmony_ci    pub fn SSL_do_handshake(ssl: *mut SSL) -> c_int;
72292f3ab15Sopenharmony_ci    pub fn SSL_shutdown(ssl: *mut SSL) -> c_int;
72392f3ab15Sopenharmony_ci
72492f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_client_CA_list(ctx: *mut SSL_CTX, list: *mut stack_st_X509_NAME);
72592f3ab15Sopenharmony_ci
72692f3ab15Sopenharmony_ci    pub fn SSL_CTX_add_client_CA(ctx: *mut SSL_CTX, cacert: *mut X509) -> c_int;
72792f3ab15Sopenharmony_ci
72892f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_default_verify_paths(ctx: *mut SSL_CTX) -> c_int;
72992f3ab15Sopenharmony_ci    pub fn SSL_CTX_load_verify_locations(
73092f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
73192f3ab15Sopenharmony_ci        CAfile: *const c_char,
73292f3ab15Sopenharmony_ci        CApath: *const c_char,
73392f3ab15Sopenharmony_ci    ) -> c_int;
73492f3ab15Sopenharmony_ci}
73592f3ab15Sopenharmony_ci
73692f3ab15Sopenharmony_ciconst_ptr_api! {
73792f3ab15Sopenharmony_ci    extern "C" {
73892f3ab15Sopenharmony_ci        pub fn SSL_get_ssl_method(ssl: #[const_ptr_if(ossl111b)] SSL) -> *const SSL_METHOD;
73992f3ab15Sopenharmony_ci    }
74092f3ab15Sopenharmony_ci}
74192f3ab15Sopenharmony_ci
74292f3ab15Sopenharmony_ciextern "C" {
74392f3ab15Sopenharmony_ci    pub fn SSL_set_connect_state(s: *mut SSL);
74492f3ab15Sopenharmony_ci    pub fn SSL_set_accept_state(s: *mut SSL);
74592f3ab15Sopenharmony_ci
74692f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
74792f3ab15Sopenharmony_ci    pub fn SSL_library_init() -> c_int;
74892f3ab15Sopenharmony_ci
74992f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_description(
75092f3ab15Sopenharmony_ci        cipher: *const SSL_CIPHER,
75192f3ab15Sopenharmony_ci        buf: *mut c_char,
75292f3ab15Sopenharmony_ci        size: c_int,
75392f3ab15Sopenharmony_ci    ) -> *mut c_char;
75492f3ab15Sopenharmony_ci
75592f3ab15Sopenharmony_ci    pub fn SSL_get_certificate(ssl: *const SSL) -> *mut X509;
75692f3ab15Sopenharmony_ci}
75792f3ab15Sopenharmony_ciconst_ptr_api! {
75892f3ab15Sopenharmony_ci    extern "C" {
75992f3ab15Sopenharmony_ci        pub fn SSL_get_privatekey(ssl: #[const_ptr_if(any(ossl102, libressl280))] SSL) -> *mut EVP_PKEY;
76092f3ab15Sopenharmony_ci    }
76192f3ab15Sopenharmony_ci}
76292f3ab15Sopenharmony_ci
76392f3ab15Sopenharmony_ciextern "C" {
76492f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl270))]
76592f3ab15Sopenharmony_ci    pub fn SSL_CTX_get0_certificate(ctx: *const SSL_CTX) -> *mut X509;
76692f3ab15Sopenharmony_ci    #[cfg(any(ossl102, libressl340))]
76792f3ab15Sopenharmony_ci    pub fn SSL_CTX_get0_privatekey(ctx: *const SSL_CTX) -> *mut EVP_PKEY;
76892f3ab15Sopenharmony_ci
76992f3ab15Sopenharmony_ci    pub fn SSL_set_shutdown(ss: *mut SSL, mode: c_int);
77092f3ab15Sopenharmony_ci    pub fn SSL_get_shutdown(ssl: *const SSL) -> c_int;
77192f3ab15Sopenharmony_ci    pub fn SSL_version(ssl: *const SSL) -> c_int;
77292f3ab15Sopenharmony_ci    pub fn SSL_get_session(s: *const SSL) -> *mut SSL_SESSION;
77392f3ab15Sopenharmony_ci    pub fn SSL_get_SSL_CTX(ssl: *const SSL) -> *mut SSL_CTX;
77492f3ab15Sopenharmony_ci    pub fn SSL_set_SSL_CTX(ssl: *mut SSL, ctx: *mut SSL_CTX) -> *mut SSL_CTX;
77592f3ab15Sopenharmony_ci
77692f3ab15Sopenharmony_ci    pub fn SSL_get_verify_result(ssl: *const SSL) -> c_long;
77792f3ab15Sopenharmony_ci    #[cfg(ossl110)]
77892f3ab15Sopenharmony_ci    pub fn SSL_get0_verified_chain(ssl: *const SSL) -> *mut stack_st_X509;
77992f3ab15Sopenharmony_ci
78092f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl270))]
78192f3ab15Sopenharmony_ci    pub fn SSL_get_client_random(ssl: *const SSL, out: *mut c_uchar, len: size_t) -> size_t;
78292f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl270))]
78392f3ab15Sopenharmony_ci    pub fn SSL_get_server_random(ssl: *const SSL, out: *mut c_uchar, len: size_t) -> size_t;
78492f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl273))]
78592f3ab15Sopenharmony_ci    pub fn SSL_SESSION_get_master_key(
78692f3ab15Sopenharmony_ci        session: *const SSL_SESSION,
78792f3ab15Sopenharmony_ci        out: *mut c_uchar,
78892f3ab15Sopenharmony_ci        outlen: size_t,
78992f3ab15Sopenharmony_ci    ) -> size_t;
79092f3ab15Sopenharmony_ci}
79192f3ab15Sopenharmony_ci
79292f3ab15Sopenharmony_ciextern "C" {
79392f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
79492f3ab15Sopenharmony_ci    pub fn SSL_get_ex_new_index(
79592f3ab15Sopenharmony_ci        argl: c_long,
79692f3ab15Sopenharmony_ci        argp: *mut c_void,
79792f3ab15Sopenharmony_ci        new_func: Option<CRYPTO_EX_new>,
79892f3ab15Sopenharmony_ci        dup_func: Option<CRYPTO_EX_dup>,
79992f3ab15Sopenharmony_ci        free_func: Option<CRYPTO_EX_free>,
80092f3ab15Sopenharmony_ci    ) -> c_int;
80192f3ab15Sopenharmony_ci
80292f3ab15Sopenharmony_ci    pub fn SSL_set_ex_data(ssl: *mut SSL, idx: c_int, data: *mut c_void) -> c_int;
80392f3ab15Sopenharmony_ci    pub fn SSL_get_ex_data(ssl: *const SSL, idx: c_int) -> *mut c_void;
80492f3ab15Sopenharmony_ci
80592f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
80692f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_ex_new_index(
80792f3ab15Sopenharmony_ci        argl: c_long,
80892f3ab15Sopenharmony_ci        argp: *mut c_void,
80992f3ab15Sopenharmony_ci        new_func: Option<CRYPTO_EX_new>,
81092f3ab15Sopenharmony_ci        dup_func: Option<CRYPTO_EX_dup>,
81192f3ab15Sopenharmony_ci        free_func: Option<CRYPTO_EX_free>,
81292f3ab15Sopenharmony_ci    ) -> c_int;
81392f3ab15Sopenharmony_ci
81492f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_ex_data(ctx: *mut SSL_CTX, idx: c_int, data: *mut c_void) -> c_int;
81592f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_ex_data(ctx: *const SSL_CTX, idx: c_int) -> *mut c_void;
81692f3ab15Sopenharmony_ci
81792f3ab15Sopenharmony_ci    pub fn SSL_get_ex_data_X509_STORE_CTX_idx() -> c_int;
81892f3ab15Sopenharmony_ci}
81992f3ab15Sopenharmony_ci
82092f3ab15Sopenharmony_ciextern "C" {
82192f3ab15Sopenharmony_ci    #[link_name = "SSL_CTX_set_tmp_dh_callback"]
82292f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_tmp_dh_callback__fixed_rust(
82392f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
82492f3ab15Sopenharmony_ci        dh: Option<
82592f3ab15Sopenharmony_ci            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut DH,
82692f3ab15Sopenharmony_ci        >,
82792f3ab15Sopenharmony_ci    );
82892f3ab15Sopenharmony_ci    #[link_name = "SSL_set_tmp_dh_callback"]
82992f3ab15Sopenharmony_ci    pub fn SSL_set_tmp_dh_callback__fixed_rust(
83092f3ab15Sopenharmony_ci        ctx: *mut SSL,
83192f3ab15Sopenharmony_ci        dh: Option<
83292f3ab15Sopenharmony_ci            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut DH,
83392f3ab15Sopenharmony_ci        >,
83492f3ab15Sopenharmony_ci    );
83592f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
83692f3ab15Sopenharmony_ci    #[link_name = "SSL_CTX_set_tmp_ecdh_callback"]
83792f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_tmp_ecdh_callback__fixed_rust(
83892f3ab15Sopenharmony_ci        ctx: *mut SSL_CTX,
83992f3ab15Sopenharmony_ci        ecdh: Option<
84092f3ab15Sopenharmony_ci            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut EC_KEY,
84192f3ab15Sopenharmony_ci        >,
84292f3ab15Sopenharmony_ci    );
84392f3ab15Sopenharmony_ci    #[cfg(not(ossl110))]
84492f3ab15Sopenharmony_ci    #[link_name = "SSL_set_tmp_ecdh_callback"]
84592f3ab15Sopenharmony_ci    pub fn SSL_set_tmp_ecdh_callback__fixed_rust(
84692f3ab15Sopenharmony_ci        ssl: *mut SSL,
84792f3ab15Sopenharmony_ci        ecdh: Option<
84892f3ab15Sopenharmony_ci            unsafe extern "C" fn(ssl: *mut SSL, is_export: c_int, keylength: c_int) -> *mut EC_KEY,
84992f3ab15Sopenharmony_ci        >,
85092f3ab15Sopenharmony_ci    );
85192f3ab15Sopenharmony_ci}
85292f3ab15Sopenharmony_ci
85392f3ab15Sopenharmony_cicfg_if! {
85492f3ab15Sopenharmony_ci    if #[cfg(libressl)] {
85592f3ab15Sopenharmony_ci        extern "C" {
85692f3ab15Sopenharmony_ci            pub fn SSL_get_current_compression(ssl: *mut SSL) -> *const libc::c_void;
85792f3ab15Sopenharmony_ci        }
85892f3ab15Sopenharmony_ci    } else if #[cfg(not(osslconf = "OPENSSL_NO_COMP"))] {
85992f3ab15Sopenharmony_ci        const_ptr_api! {
86092f3ab15Sopenharmony_ci            extern "C" {
86192f3ab15Sopenharmony_ci                pub fn SSL_get_current_compression(ssl: #[const_ptr_if(ossl111b)] SSL) -> *const COMP_METHOD;
86292f3ab15Sopenharmony_ci            }
86392f3ab15Sopenharmony_ci        }
86492f3ab15Sopenharmony_ci    }
86592f3ab15Sopenharmony_ci}
86692f3ab15Sopenharmony_cicfg_if! {
86792f3ab15Sopenharmony_ci    if #[cfg(libressl)] {
86892f3ab15Sopenharmony_ci        extern "C" {
86992f3ab15Sopenharmony_ci            pub fn SSL_COMP_get_name(comp: *const libc::c_void) -> *const c_char;
87092f3ab15Sopenharmony_ci        }
87192f3ab15Sopenharmony_ci    } else if #[cfg(not(osslconf = "OPENSSL_NO_COMP"))] {
87292f3ab15Sopenharmony_ci        extern "C" {
87392f3ab15Sopenharmony_ci            pub fn SSL_COMP_get_name(comp: *const COMP_METHOD) -> *const c_char;
87492f3ab15Sopenharmony_ci        }
87592f3ab15Sopenharmony_ci    }
87692f3ab15Sopenharmony_ci}
87792f3ab15Sopenharmony_ci
87892f3ab15Sopenharmony_ci#[cfg(not(osslconf = "OPENSSL_NO_COMP"))]
87992f3ab15Sopenharmony_ciextern "C" {
88092f3ab15Sopenharmony_ci    #[cfg(ossl110)]
88192f3ab15Sopenharmony_ci    pub fn COMP_get_type(meth: *const COMP_METHOD) -> i32;
88292f3ab15Sopenharmony_ci}
88392f3ab15Sopenharmony_ci
88492f3ab15Sopenharmony_ciextern "C" {
88592f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl270))]
88692f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_get_cipher_nid(c: *const SSL_CIPHER) -> c_int;
88792f3ab15Sopenharmony_ci    #[cfg(any(ossl110, libressl270))]
88892f3ab15Sopenharmony_ci    pub fn SSL_CIPHER_get_digest_nid(c: *const SSL_CIPHER) -> c_int;
88992f3ab15Sopenharmony_ci}
89092f3ab15Sopenharmony_ci
89192f3ab15Sopenharmony_ciconst_ptr_api! {
89292f3ab15Sopenharmony_ci    extern "C" {
89392f3ab15Sopenharmony_ci        #[cfg(ossl110)]
89492f3ab15Sopenharmony_ci        pub fn SSL_session_reused(ssl: #[const_ptr_if(ossl111c)] SSL) -> c_int;
89592f3ab15Sopenharmony_ci    }
89692f3ab15Sopenharmony_ci}
89792f3ab15Sopenharmony_ci
89892f3ab15Sopenharmony_ciconst_ptr_api! {
89992f3ab15Sopenharmony_ci    extern "C" {
90092f3ab15Sopenharmony_ci        #[cfg(any(ossl102, libressl273))]
90192f3ab15Sopenharmony_ci        pub fn SSL_is_server(s: #[const_ptr_if(any(ossl110f, libressl273))] SSL) -> c_int;
90292f3ab15Sopenharmony_ci    }
90392f3ab15Sopenharmony_ci}
90492f3ab15Sopenharmony_ci
90592f3ab15Sopenharmony_ciextern "C" {
90692f3ab15Sopenharmony_ci    #[cfg(ossl110)]
90792f3ab15Sopenharmony_ci    pub fn OPENSSL_init_ssl(opts: u64, settings: *const OPENSSL_INIT_SETTINGS) -> c_int;
90892f3ab15Sopenharmony_ci}
90992f3ab15Sopenharmony_ci
91092f3ab15Sopenharmony_ciextern "C" {
91192f3ab15Sopenharmony_ci    #[cfg(ossl111)]
91292f3ab15Sopenharmony_ci    pub fn SSL_CTX_set_num_tickets(ctx: *mut SSL_CTX, num_tickets: size_t) -> c_int;
91392f3ab15Sopenharmony_ci
91492f3ab15Sopenharmony_ci    #[cfg(ossl111)]
91592f3ab15Sopenharmony_ci    pub fn SSL_set_num_tickets(s: *mut SSL, num_tickets: size_t) -> c_int;
91692f3ab15Sopenharmony_ci
91792f3ab15Sopenharmony_ci    #[cfg(ossl111b)]
91892f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_num_tickets(ctx: *const SSL_CTX) -> size_t;
91992f3ab15Sopenharmony_ci    #[cfg(all(ossl111, not(ossl111b)))]
92092f3ab15Sopenharmony_ci    pub fn SSL_CTX_get_num_tickets(ctx: *mut SSL_CTX) -> size_t;
92192f3ab15Sopenharmony_ci
92292f3ab15Sopenharmony_ci    #[cfg(ossl111b)]
92392f3ab15Sopenharmony_ci    pub fn SSL_get_num_tickets(s: *const SSL) -> size_t;
92492f3ab15Sopenharmony_ci    #[cfg(all(ossl111, not(ossl111b)))]
92592f3ab15Sopenharmony_ci    pub fn SSL_get_num_tickets(s: *mut SSL) -> size_t;
92692f3ab15Sopenharmony_ci}
927