use libc::*; #[allow(unused_imports)] use super::super::*; pub enum ASN1_INTEGER {} pub enum ASN1_GENERALIZEDTIME {} pub enum ASN1_STRING {} pub enum ASN1_BIT_STRING {} pub enum ASN1_TIME {} pub enum ASN1_TYPE {} pub enum ASN1_OBJECT {} pub enum ASN1_OCTET_STRING {} pub enum bio_st {} // FIXME remove cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum BIO {} } else { #[repr(C)] pub struct BIO { pub method: *mut BIO_METHOD, pub callback: Option< unsafe extern "C" fn(*mut BIO, c_int, *const c_char, c_int, c_long, c_long) -> c_long, >, pub cb_arg: *mut c_char, pub init: c_int, pub shutdown: c_int, pub flags: c_int, pub retry_reason: c_int, pub num: c_int, pub ptr: *mut c_void, pub next_bio: *mut BIO, pub prev_bio: *mut BIO, pub references: c_int, pub num_read: c_ulong, pub num_write: c_ulong, pub ex_data: CRYPTO_EX_DATA, } } } cfg_if! { if #[cfg(any(ossl110, libressl350))] { pub enum BIGNUM {} } else { #[repr(C)] pub struct BIGNUM { pub d: *mut BN_ULONG, pub top: c_int, pub dmax: c_int, pub neg: c_int, pub flags: c_int, } } } pub enum BN_BLINDING {} pub enum BN_MONT_CTX {} pub enum BN_CTX {} pub enum BN_GENCB {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum EVP_CIPHER {} } else { #[repr(C)] pub struct EVP_CIPHER { pub nid: c_int, pub block_size: c_int, pub key_len: c_int, pub iv_len: c_int, pub flags: c_ulong, pub init: Option< unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *const c_uchar, *const c_uchar, c_int) -> c_int, >, pub do_cipher: Option< unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut c_uchar, *const c_uchar, size_t) -> c_int, >, pub cleanup: Option c_int>, pub ctx_size: c_int, pub set_asn1_parameters: Option c_int>, pub get_asn1_parameters: Option c_int>, pub ctrl: Option c_int>, pub app_data: *mut c_void, } } } pub enum EVP_CIPHER_CTX {} pub enum EVP_MD {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum EVP_MD_CTX {} } else { #[repr(C)] pub struct EVP_MD_CTX { digest: *mut EVP_MD, engine: *mut ENGINE, flags: c_ulong, md_data: *mut c_void, pctx: *mut EVP_PKEY_CTX, update: *mut c_void, } } } pub enum PKCS8_PRIV_KEY_INFO {} pub enum EVP_PKEY_ASN1_METHOD {} pub enum EVP_PKEY_CTX {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum HMAC_CTX {} } else { #[repr(C)] pub struct HMAC_CTX { md: *mut EVP_MD, md_ctx: EVP_MD_CTX, i_ctx: EVP_MD_CTX, o_ctx: EVP_MD_CTX, key_length: c_uint, key: [c_uchar; 128], } } } cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum DH {} } else { #[repr(C)] pub struct DH { pub pad: c_int, pub version: c_int, pub p: *mut BIGNUM, pub g: *mut BIGNUM, pub length: c_long, pub pub_key: *mut BIGNUM, pub priv_key: *mut BIGNUM, pub flags: c_int, pub method_mont_p: *mut BN_MONT_CTX, pub q: *mut BIGNUM, pub j: *mut BIGNUM, pub seed: *mut c_uchar, pub seedlen: c_int, pub counter: *mut BIGNUM, pub references: c_int, pub ex_data: CRYPTO_EX_DATA, pub meth: *const DH_METHOD, pub engine: *mut ENGINE, } } } pub enum DH_METHOD {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum DSA {} } else { #[repr(C)] pub struct DSA { pub pad: c_int, pub version: c_long, pub write_params: c_int, pub p: *mut BIGNUM, pub q: *mut BIGNUM, pub g: *mut BIGNUM, pub pub_key: *mut BIGNUM, pub priv_key: *mut BIGNUM, pub kinv: *mut BIGNUM, pub r: *mut BIGNUM, pub flags: c_int, pub method_mont_p: *mut BN_MONT_CTX, pub references: c_int, pub ex_data: CRYPTO_EX_DATA, pub meth: *const DSA_METHOD, pub engine: *mut ENGINE, } } } pub enum DSA_METHOD {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum RSA {} } else if #[cfg(libressl)] { #[repr(C)] pub struct RSA { pub pad: c_int, pub version: c_long, pub meth: *const RSA_METHOD, pub engine: *mut ENGINE, pub n: *mut BIGNUM, pub e: *mut BIGNUM, pub d: *mut BIGNUM, pub p: *mut BIGNUM, pub q: *mut BIGNUM, pub dmp1: *mut BIGNUM, pub dmq1: *mut BIGNUM, pub iqmp: *mut BIGNUM, pub ex_data: CRYPTO_EX_DATA, pub references: c_int, pub flags: c_int, pub _method_mod_n: *mut BN_MONT_CTX, pub _method_mod_p: *mut BN_MONT_CTX, pub _method_mod_q: *mut BN_MONT_CTX, pub blinding: *mut BN_BLINDING, pub mt_blinding: *mut BN_BLINDING, } } else { #[repr(C)] pub struct RSA { pub pad: c_int, pub version: c_long, pub meth: *const RSA_METHOD, pub engine: *mut ENGINE, pub n: *mut BIGNUM, pub e: *mut BIGNUM, pub d: *mut BIGNUM, pub p: *mut BIGNUM, pub q: *mut BIGNUM, pub dmp1: *mut BIGNUM, pub dmq1: *mut BIGNUM, pub iqmp: *mut BIGNUM, pub ex_data: CRYPTO_EX_DATA, pub references: c_int, pub flags: c_int, pub _method_mod_n: *mut BN_MONT_CTX, pub _method_mod_p: *mut BN_MONT_CTX, pub _method_mod_q: *mut BN_MONT_CTX, pub bignum_data: *mut c_char, pub blinding: *mut BN_BLINDING, pub mt_blinding: *mut BN_BLINDING, } } } pub enum RSA_METHOD {} pub enum EC_KEY {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum X509 {} } else if #[cfg(libressl)] { #[repr(C)] pub struct X509 { pub cert_info: *mut X509_CINF, pub sig_alg: *mut X509_ALGOR, pub signature: *mut ASN1_BIT_STRING, pub valid: c_int, pub references: c_int, pub name: *mut c_char, pub ex_data: CRYPTO_EX_DATA, pub ex_pathlen: c_long, pub ex_pcpathlen: c_long, pub ex_flags: c_ulong, pub ex_kusage: c_ulong, pub ex_xkusage: c_ulong, pub ex_nscert: c_ulong, skid: *mut c_void, akid: *mut c_void, policy_cache: *mut c_void, crldp: *mut c_void, altname: *mut c_void, nc: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_SHA"))] sha1_hash: [c_uchar; 20], aux: *mut c_void, } } else { #[repr(C)] pub struct X509 { pub cert_info: *mut X509_CINF, pub sig_alg: *mut X509_ALGOR, pub signature: *mut ASN1_BIT_STRING, pub valid: c_int, pub references: c_int, pub name: *mut c_char, pub ex_data: CRYPTO_EX_DATA, pub ex_pathlen: c_long, pub ex_pcpathlen: c_long, pub ex_flags: c_ulong, pub ex_kusage: c_ulong, pub ex_xkusage: c_ulong, pub ex_nscert: c_ulong, skid: *mut c_void, akid: *mut c_void, policy_cache: *mut c_void, crldp: *mut c_void, altname: *mut c_void, nc: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))] rfc3779_addr: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))] rfc3779_asid: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_SHA"))] sha1_hash: [c_uchar; 20], aux: *mut c_void, } } } cfg_if! { if #[cfg(ossl110)] { pub enum X509_ALGOR {} } else { #[repr(C)] pub struct X509_ALGOR { pub algorithm: *mut ASN1_OBJECT, parameter: *mut c_void, } } } pub enum X509_LOOKUP_METHOD {} pub enum X509_NAME {} cfg_if! { if #[cfg(any(ossl110, libressl270))] { pub enum X509_STORE {} } else { #[repr(C)] pub struct X509_STORE { cache: c_int, pub objs: *mut stack_st_X509_OBJECT, get_cert_methods: *mut stack_st_X509_LOOKUP, param: *mut X509_VERIFY_PARAM, verify: Option c_int>, verify_cb: Option c_int>, get_issuer: Option< extern "C" fn(issuer: *mut *mut X509, ctx: *mut X509_STORE_CTX, x: *mut X509) -> c_int, >, check_issued: Option c_int>, check_revocation: Option c_int>, get_crl: Option< extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut *mut X509_CRL, x: *mut X509) -> c_int, >, check_crl: Option c_int>, cert_crl: Option c_int>, lookup_certs: Option *mut stack_st_X509>, lookup_crls: Option< extern "C" fn(ctx: *const X509_STORE_CTX, nm: *const X509_NAME) -> *mut stack_st_X509_CRL, >, cleanup: Option c_int>, ex_data: CRYPTO_EX_DATA, references: c_int, } } } pub enum X509_STORE_CTX {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum X509_VERIFY_PARAM {} } else if #[cfg(libressl251)] { #[repr(C)] pub struct X509_VERIFY_PARAM { pub name: *mut c_char, pub check_time: time_t, pub inh_flags: c_ulong, pub flags: c_ulong, pub purpose: c_int, pub trust: c_int, pub depth: c_int, pub policies: *mut stack_st_ASN1_OBJECT, id: *mut c_void, } } else if #[cfg(libressl)] { #[repr(C)] pub struct X509_VERIFY_PARAM { pub name: *mut c_char, pub check_time: time_t, pub inh_flags: c_ulong, pub flags: c_ulong, pub purpose: c_int, pub trust: c_int, pub depth: c_int, pub policies: *mut stack_st_ASN1_OBJECT, //pub id: *mut X509_VERIFY_PARAM_ID, } } else { #[repr(C)] pub struct X509_VERIFY_PARAM { pub name: *mut c_char, pub check_time: time_t, pub inh_flags: c_ulong, pub flags: c_ulong, pub purpose: c_int, pub trust: c_int, pub depth: c_int, pub policies: *mut stack_st_ASN1_OBJECT, #[cfg(ossl102)] pub id: *mut X509_VERIFY_PARAM_ID, } } } cfg_if! { if #[cfg(any(ossl110, libressl270))] { pub enum X509_OBJECT {} } else { #[repr(C)] pub struct X509_OBJECT { pub type_: c_int, pub data: X509_OBJECT_data, } #[repr(C)] pub union X509_OBJECT_data { pub ptr: *mut c_char, pub x509: *mut X509, pub crl: *mut X509_CRL, pub pkey: *mut EVP_PKEY, } } } pub enum X509_LOOKUP {} #[repr(C)] pub struct X509V3_CTX { flags: c_int, issuer_cert: *mut c_void, subject_cert: *mut c_void, subject_req: *mut c_void, crl: *mut c_void, db_meth: *mut c_void, db: *mut c_void, #[cfg(ossl300)] issuer_pkey: *mut c_void, // I like the last comment line, it is copied from OpenSSL sources: // Maybe more here } pub enum CONF {} #[cfg(ossl110)] pub enum OPENSSL_INIT_SETTINGS {} pub enum ENGINE {} cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum SSL {} } else if #[cfg(libressl251)] { #[repr(C)] pub struct SSL { version: c_int, method: *const SSL_METHOD, rbio: *mut BIO, wbio: *mut BIO, bbio: *mut BIO, pub server: c_int, s3: *mut c_void, d1: *mut c_void, param: *mut c_void, cipher_list: *mut stack_st_SSL_CIPHER, cert: *mut c_void, sid_ctx_length: c_uint, sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize], session: *mut SSL_SESSION, verify_mode: c_int, error: c_int, error_code: c_int, ctx: *mut SSL_CTX, verify_result: c_long, references: c_int, client_version: c_int, max_send_fragment: c_uint, tlsext_hostname: *mut c_char, tlsext_status_type: c_int, initial_ctx: *mut SSL_CTX, enc_read_ctx: *mut EVP_CIPHER_CTX, read_hash: *mut EVP_MD_CTX, internal: *mut c_void, } } else if #[cfg(libressl)] { #[repr(C)] pub struct SSL { version: c_int, type_: c_int, method: *const SSL_METHOD, rbio: *mut c_void, wbio: *mut c_void, bbio: *mut c_void, rwstate: c_int, in_handshake: c_int, handshake_func: Option c_int>, pub server: c_int, new_session: c_int, quiet_shutdown: c_int, shutdown: c_int, state: c_int, rstate: c_int, init_buf: *mut c_void, init_msg: *mut c_void, init_num: c_int, init_off: c_int, packet: *mut c_uchar, packet_length: c_uint, s3: *mut c_void, d1: *mut c_void, read_ahead: c_int, msg_callback: Option< unsafe extern "C" fn(c_int, c_int, c_int, *const c_void, size_t, *mut SSL, *mut c_void), >, msg_callback_arg: *mut c_void, hit: c_int, param: *mut c_void, cipher_list: *mut stack_st_SSL_CIPHER, cipher_list_by_id: *mut stack_st_SSL_CIPHER, mac_flags: c_int, aead_read_ctx: *mut c_void, enc_read_ctx: *mut EVP_CIPHER_CTX, read_hash: *mut EVP_MD_CTX, aead_write_ctx: *mut c_void, enc_write_ctx: *mut EVP_CIPHER_CTX, write_hash: *mut EVP_MD_CTX, cert: *mut c_void, sid_ctx_length: c_uint, sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize], session: *mut SSL_SESSION, generate_session_id: GEN_SESSION_CB, verify_mode: c_int, verify_callback: Option c_int>, info_callback: Option, error: c_int, error_code: c_int, ctx: *mut SSL_CTX, debug: c_int, verify_result: c_long, ex_data: CRYPTO_EX_DATA, client_CA: *mut stack_st_X509_NAME, references: c_int, options: c_ulong, mode: c_ulong, max_cert_list: c_long, first_packet: c_int, client_version: c_int, max_send_fragment: c_uint, tlsext_debug_cb: Option, tlsext_debug_arg: *mut c_void, tlsext_hostname: *mut c_char, servername_done: c_int, tlsext_status_type: c_int, tlsext_status_expected: c_int, tlsext_ocsp_ids: *mut c_void, tlsext_ocsp_exts: *mut c_void, tlsext_ocsp_resp: *mut c_uchar, tlsext_ocsp_resplen: c_int, tlsext_ticket_expected: c_int, tlsext_ecpointformatlist_length: size_t, tlsext_ecpointformatlist: *mut c_uchar, tlsext_ellipticcurvelist_length: size_t, tlsext_ellipticcurvelist: *mut c_uchar, tlsext_session_ticket: *mut c_void, tlsext_session_ticket_ext_cb: tls_session_ticket_ext_cb_fn, tls_session_ticket_ext_cb_arg: *mut c_void, tls_session_secret_cb: tls_session_secret_cb_fn, tls_session_secret_cb_arg: *mut c_void, initial_ctx: *mut SSL_CTX, next_proto_negotiated: *mut c_uchar, next_proto_negotiated_len: c_uchar, srtp_profiles: *mut c_void, srtp_profile: *mut c_void, tlsext_heartbeat: c_uint, tlsext_hb_pending: c_uint, tlsext_hb_seq: c_uint, alpn_client_proto_list: *mut c_uchar, alpn_client_proto_list_len: c_uint, renegotiate: c_int, } } else { #[repr(C)] pub struct SSL { version: c_int, type_: c_int, method: *const SSL_METHOD, rbio: *mut c_void, wbio: *mut c_void, bbio: *mut c_void, rwstate: c_int, in_handshake: c_int, handshake_func: Option c_int>, pub server: c_int, new_session: c_int, quiet_session: c_int, shutdown: c_int, state: c_int, rstate: c_int, init_buf: *mut c_void, init_msg: *mut c_void, init_num: c_int, init_off: c_int, packet: *mut c_uchar, packet_length: c_uint, s2: *mut c_void, s3: *mut c_void, d1: *mut c_void, read_ahead: c_int, msg_callback: Option< unsafe extern "C" fn(c_int, c_int, c_int, *const c_void, size_t, *mut SSL, *mut c_void), >, msg_callback_arg: *mut c_void, hit: c_int, param: *mut c_void, cipher_list: *mut stack_st_SSL_CIPHER, cipher_list_by_id: *mut stack_st_SSL_CIPHER, mac_flags: c_int, enc_read_ctx: *mut EVP_CIPHER_CTX, read_hash: *mut EVP_MD_CTX, expand: *mut c_void, enc_write_ctx: *mut EVP_CIPHER_CTX, write_hash: *mut EVP_MD_CTX, compress: *mut c_void, cert: *mut c_void, sid_ctx_length: c_uint, sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize], session: *mut SSL_SESSION, generate_session_id: GEN_SESSION_CB, verify_mode: c_int, verify_callback: Option c_int>, info_callback: Option, error: c_int, error_code: c_int, #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))] kssl_ctx: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] psk_client_callback: Option< unsafe extern "C" fn(*mut SSL, *const c_char, *mut c_char, c_uint, *mut c_uchar, c_uint) -> c_uint, >, #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] psk_server_callback: Option c_uint>, ctx: *mut SSL_CTX, debug: c_int, verify_result: c_long, ex_data: CRYPTO_EX_DATA, client_CA: *mut stack_st_X509_NAME, references: c_int, options: c_ulong, mode: c_ulong, max_cert_list: c_long, first_packet: c_int, client_version: c_int, max_send_fragment: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_debug_cb: Option, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_debug_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_hostname: *mut c_char, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] servername_done: c_int, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_status_type: c_int, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_status_expected: c_int, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ocsp_ids: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ocsp_exts: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ocsp_resp: *mut c_uchar, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ocsp_resplen: c_int, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ticket_expected: c_int, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC") ))] tlsext_ecpointformatlist_length: size_t, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC") ))] tlsext_ecpointformatlist: *mut c_uchar, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC") ))] tlsext_ellipticcurvelist_length: size_t, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC") ))] tlsext_ellipticcurvelist: *mut c_uchar, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_opaque_prf_input: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_opaque_prf_input_len: size_t, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_session_ticket: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_session_ticket_ext_cb: tls_session_ticket_ext_cb_fn, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tls_session_ticket_ext_cb_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tls_session_secret_cb: tls_session_secret_cb_fn, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tls_session_secret_cb_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] initial_ctx: *mut SSL_CTX, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_proto_negotiated: *mut c_uchar, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_proto_negotiated_len: c_uchar, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] srtp_profiles: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] srtp_profile: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_heartbeat: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_hb_pending: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_hb_seq: c_uint, renegotiate: c_int, #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] srp_ctx: SRP_CTX, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_client_proto_list: *mut c_uchar, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_client_proto_list_len: c_uint, } } } cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum SSL_CTX {} } else if #[cfg(libressl251)] { #[repr(C)] pub struct SSL_CTX { method: *const SSL_METHOD, cipher_list: *mut stack_st_SSL_CIPHER, cert_store: *mut c_void, session_timeout: c_long, pub references: c_int, extra_certs: *mut stack_st_X509, verify_mode: c_int, sid_ctx_length: c_uint, sid_ctx: [c_uchar; SSL_MAX_SID_CTX_LENGTH as usize], param: *mut X509_VERIFY_PARAM, default_passwd_callback: *mut c_void, default_passwd_callback_userdata: *mut c_void, internal: *mut c_void, } } else if #[cfg(libressl)] { #[repr(C)] pub struct SSL_CTX { method: *mut c_void, cipher_list: *mut c_void, cipher_list_by_id: *mut c_void, cert_store: *mut c_void, sessions: *mut c_void, session_cache_size: c_ulong, session_cache_head: *mut c_void, session_cache_tail: *mut c_void, session_cache_mode: c_int, session_timeout: c_long, new_session_cb: *mut c_void, remove_session_cb: *mut c_void, get_session_cb: *mut c_void, stats: [c_int; 11], pub references: c_int, app_verify_callback: *mut c_void, app_verify_arg: *mut c_void, default_passwd_callback: *mut c_void, default_passwd_callback_userdata: *mut c_void, client_cert_cb: *mut c_void, app_gen_cookie_cb: *mut c_void, app_verify_cookie_cb: *mut c_void, ex_dat: CRYPTO_EX_DATA, rsa_md5: *mut c_void, md5: *mut c_void, sha1: *mut c_void, extra_certs: *mut c_void, comp_methods: *mut c_void, info_callback: *mut c_void, client_CA: *mut c_void, options: c_ulong, mode: c_ulong, max_cert_list: c_long, cert: *mut c_void, read_ahead: c_int, msg_callback: *mut c_void, msg_callback_arg: *mut c_void, verify_mode: c_int, sid_ctx_length: c_uint, sid_ctx: [c_uchar; 32], default_verify_callback: *mut c_void, generate_session_id: *mut c_void, param: *mut c_void, quiet_shutdown: c_int, max_send_fragment: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))] client_cert_engine: *mut c_void, tlsext_servername_callback: *mut c_void, tlsect_servername_arg: *mut c_void, tlsext_tick_key_name: [c_uchar; 16], tlsext_tick_hmac_key: [c_uchar; 16], tlsext_tick_aes_key: [c_uchar; 16], tlsext_ticket_key_cb: *mut c_void, tlsext_status_cb: *mut c_void, tlsext_status_arg: *mut c_void, tlsext_opaque_prf_input_callback: *mut c_void, tlsext_opaque_prf_input_callback_arg: *mut c_void, next_protos_advertised_cb: *mut c_void, next_protos_advertised_cb_arg: *mut c_void, next_proto_select_cb: *mut c_void, next_proto_select_cb_arg: *mut c_void, srtp_profiles: *mut c_void, } } else { #[repr(C)] pub struct SSL_CTX { method: *mut c_void, cipher_list: *mut c_void, cipher_list_by_id: *mut c_void, cert_store: *mut c_void, sessions: *mut c_void, session_cache_size: c_ulong, session_cache_head: *mut c_void, session_cache_tail: *mut c_void, session_cache_mode: c_int, session_timeout: c_long, new_session_cb: *mut c_void, remove_session_cb: *mut c_void, get_session_cb: *mut c_void, stats: [c_int; 11], pub references: c_int, app_verify_callback: *mut c_void, app_verify_arg: *mut c_void, default_passwd_callback: *mut c_void, default_passwd_callback_userdata: *mut c_void, client_cert_cb: *mut c_void, app_gen_cookie_cb: *mut c_void, app_verify_cookie_cb: *mut c_void, ex_dat: CRYPTO_EX_DATA, rsa_md5: *mut c_void, md5: *mut c_void, sha1: *mut c_void, extra_certs: *mut c_void, comp_methods: *mut c_void, info_callback: *mut c_void, client_CA: *mut c_void, options: c_ulong, mode: c_ulong, max_cert_list: c_long, cert: *mut c_void, read_ahead: c_int, msg_callback: *mut c_void, msg_callback_arg: *mut c_void, verify_mode: c_int, sid_ctx_length: c_uint, sid_ctx: [c_uchar; 32], default_verify_callback: *mut c_void, generate_session_id: *mut c_void, param: *mut c_void, quiet_shutdown: c_int, max_send_fragment: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))] client_cert_engine: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_servername_callback: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsect_servername_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_tick_key_name: [c_uchar; 16], #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_tick_hmac_key: [c_uchar; 16], #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_tick_aes_key: [c_uchar; 16], #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_ticket_key_cb: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_status_cb: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_status_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_opaque_prf_input_callback: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] tlsext_opaque_prf_input_callback_arg: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] psk_identity_hint: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] psk_client_callback: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] psk_server_callback: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] freelist_max_len: c_uint, #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] wbuf_freelist: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] rbuf_freelist: *mut c_void, #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] srp_ctx: SRP_CTX, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_protos_advertised_cb: *mut c_void, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_protos_advertised_cb_arg: *mut c_void, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_proto_select_cb: *mut c_void, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_NEXTPROTONEG") ))] next_proto_select_cb_arg: *mut c_void, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl101))] srtp_profiles: *mut c_void, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_select_cb: *mut c_void, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_select_cb_arg: *mut c_void, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_client_proto_list: *mut c_void, #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] alpn_client_proto_list_len: c_uint, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC"), ossl102 ))] tlsext_ecpointformatlist_length: size_t, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC"), ossl102 ))] tlsext_ecpointformatlist: *mut c_uchar, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC"), ossl102 ))] tlsext_ellipticcurvelist_length: size_t, #[cfg(all( not(osslconf = "OPENSSL_NO_TLSEXT"), not(osslconf = "OPENSSL_NO_EC"), ossl102 ))] tlsext_ellipticcurvelist: *mut c_uchar, } #[repr(C)] #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] pub struct SRP_CTX { SRP_cb_arg: *mut c_void, TLS_ext_srp_username_callback: *mut c_void, SRP_verify_param_callback: *mut c_void, SRP_give_srp_client_pwd_callback: *mut c_void, login: *mut c_void, N: *mut c_void, g: *mut c_void, s: *mut c_void, B: *mut c_void, A: *mut c_void, a: *mut c_void, b: *mut c_void, v: *mut c_void, info: *mut c_void, stringth: c_int, srp_Mask: c_ulong, } } } pub enum COMP_CTX {} cfg_if! { if #[cfg(any(ossl110, libressl350))] { pub enum COMP_METHOD {} } else { #[repr(C)] pub struct COMP_METHOD { pub type_: c_int, pub name: *const c_char, init: Option c_int>, finish: Option, compress: Option< unsafe extern "C" fn( *mut COMP_CTX, *mut c_uchar, c_uint, *mut c_uchar, c_uint, ) -> c_int, >, expand: Option< unsafe extern "C" fn( *mut COMP_CTX, *mut c_uchar, c_uint, *mut c_uchar, c_uint, ) -> c_int, >, ctrl: Option c_long>, callback_ctrl: Option c_long>, } } } cfg_if! { if #[cfg(any(ossl110, libressl280))] { pub enum CRYPTO_EX_DATA {} } else if #[cfg(libressl)] { #[repr(C)] pub struct CRYPTO_EX_DATA { pub sk: *mut stack_st_void, } } else { #[repr(C)] pub struct CRYPTO_EX_DATA { pub sk: *mut stack_st_void, pub dummy: c_int, } } } pub enum OCSP_RESPONSE {} #[cfg(ossl300)] pub enum OSSL_PROVIDER {} #[cfg(ossl300)] pub enum OSSL_LIB_CTX {}