1 use libc::*; 2 3 #[allow(unused_imports)] 4 use *; 5 6 pub enum ASN1_INTEGER {} 7 pub enum ASN1_GENERALIZEDTIME {} 8 pub enum ASN1_STRING {} 9 pub enum ASN1_BIT_STRING {} 10 pub enum ASN1_TIME {} 11 pub enum ASN1_TYPE {} 12 pub enum ASN1_OBJECT {} 13 pub enum ASN1_OCTET_STRING {} 14 15 pub enum bio_st {} // FIXME remove 16 cfg_if! { 17 if #[cfg(any(ossl110, libressl280))] { 18 pub enum BIO {} 19 } else { 20 #[repr(C)] 21 pub struct BIO { 22 pub method: *mut BIO_METHOD, 23 pub callback: Option< 24 unsafe extern "C" fn(*mut BIO, c_int, *const c_char, c_int, c_long, c_long) -> c_long, 25 >, 26 pub cb_arg: *mut c_char, 27 pub init: c_int, 28 pub shutdown: c_int, 29 pub flags: c_int, 30 pub retry_reason: c_int, 31 pub num: c_int, 32 pub ptr: *mut c_void, 33 pub next_bio: *mut BIO, 34 pub prev_bio: *mut BIO, 35 pub references: c_int, 36 pub num_read: c_ulong, 37 pub num_write: c_ulong, 38 pub ex_data: CRYPTO_EX_DATA, 39 } 40 } 41 } 42 cfg_if! { 43 if #[cfg(ossl110)] { 44 pub enum BIGNUM {} 45 } else { 46 #[repr(C)] 47 pub struct BIGNUM { 48 pub d: *mut BN_ULONG, 49 pub top: c_int, 50 pub dmax: c_int, 51 pub neg: c_int, 52 pub flags: c_int, 53 } 54 } 55 } 56 pub enum BN_BLINDING {} 57 pub enum BN_MONT_CTX {} 58 59 pub enum BN_CTX {} 60 pub enum BN_GENCB {} 61 62 cfg_if! { 63 if #[cfg(any(ossl110, libressl280))] { 64 pub enum EVP_CIPHER {} 65 } else { 66 #[repr(C)] 67 pub struct EVP_CIPHER { 68 pub nid: c_int, 69 pub block_size: c_int, 70 pub key_len: c_int, 71 pub iv_len: c_int, 72 pub flags: c_ulong, 73 pub init: Option< 74 unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *const c_uchar, *const c_uchar, c_int) -> c_int, 75 >, 76 pub do_cipher: Option< 77 unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut c_uchar, *const c_uchar, size_t) -> c_int, 78 >, 79 pub cleanup: Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX) -> c_int>, 80 pub ctx_size: c_int, 81 pub set_asn1_parameters: 82 Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut ASN1_TYPE) -> c_int>, 83 pub get_asn1_parameters: 84 Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, *mut ASN1_TYPE) -> c_int>, 85 pub ctrl: 86 Option<unsafe extern "C" fn(*mut EVP_CIPHER_CTX, c_int, c_int, *mut c_void) -> c_int>, 87 pub app_data: *mut c_void, 88 } 89 } 90 } 91 pub enum EVP_CIPHER_CTX {} 92 pub enum EVP_MD {} 93 cfg_if! { 94 if #[cfg(any(ossl110, libressl280))] { 95 pub enum EVP_MD_CTX {} 96 } else { 97 #[repr(C)] 98 pub struct EVP_MD_CTX { 99 digest: *mut EVP_MD, 100 engine: *mut ENGINE, 101 flags: c_ulong, 102 md_data: *mut c_void, 103 pctx: *mut EVP_PKEY_CTX, 104 update: *mut c_void, 105 } 106 } 107 } 108 cfg_if! { 109 if #[cfg(any(ossl110, libressl280))] { 110 pub enum EVP_PKEY {} 111 } else { 112 #[repr(C)] 113 pub struct EVP_PKEY { 114 pub type_: c_int, 115 pub save_type: c_int, 116 pub references: c_int, 117 pub ameth: *const EVP_PKEY_ASN1_METHOD, 118 pub engine: *mut ENGINE, 119 pub pkey: *mut c_void, 120 pub save_parameters: c_int, 121 pub attributes: *mut stack_st_X509_ATTRIBUTE, 122 } 123 } 124 } 125 126 pub enum PKCS8_PRIV_KEY_INFO {} 127 128 pub enum EVP_PKEY_ASN1_METHOD {} 129 130 pub enum EVP_PKEY_CTX {} 131 132 cfg_if! { 133 if #[cfg(any(ossl110, libressl280))] { 134 pub enum HMAC_CTX {} 135 } else { 136 #[repr(C)] 137 pub struct HMAC_CTX { 138 md: *mut EVP_MD, 139 md_ctx: EVP_MD_CTX, 140 i_ctx: EVP_MD_CTX, 141 o_ctx: EVP_MD_CTX, 142 key_length: c_uint, 143 key: [c_uchar; 128], 144 } 145 } 146 } 147 148 cfg_if! { 149 if #[cfg(any(ossl110, libressl280))] { 150 pub enum DH {} 151 } else { 152 #[repr(C)] 153 pub struct DH { 154 pub pad: c_int, 155 pub version: c_int, 156 pub p: *mut ::BIGNUM, 157 pub g: *mut ::BIGNUM, 158 pub length: c_long, 159 pub pub_key: *mut ::BIGNUM, 160 pub priv_key: *mut ::BIGNUM, 161 pub flags: c_int, 162 pub method_mont_p: *mut ::BN_MONT_CTX, 163 pub q: *mut ::BIGNUM, 164 pub j: *mut ::BIGNUM, 165 pub seed: *mut c_uchar, 166 pub seedlen: c_int, 167 pub counter: *mut ::BIGNUM, 168 pub references: c_int, 169 pub ex_data: ::CRYPTO_EX_DATA, 170 pub meth: *const ::DH_METHOD, 171 pub engine: *mut ::ENGINE, 172 } 173 } 174 } 175 pub enum DH_METHOD {} 176 177 cfg_if! { 178 if #[cfg(any(ossl110, libressl280))] { 179 pub enum DSA {} 180 } else { 181 #[repr(C)] 182 pub struct DSA { 183 pub pad: c_int, 184 pub version: c_long, 185 pub write_params: c_int, 186 187 pub p: *mut BIGNUM, 188 pub q: *mut BIGNUM, 189 pub g: *mut BIGNUM, 190 pub pub_key: *mut BIGNUM, 191 pub priv_key: *mut BIGNUM, 192 pub kinv: *mut BIGNUM, 193 pub r: *mut BIGNUM, 194 195 pub flags: c_int, 196 pub method_mont_p: *mut BN_MONT_CTX, 197 pub references: c_int, 198 pub ex_data: CRYPTO_EX_DATA, 199 pub meth: *const DSA_METHOD, 200 pub engine: *mut ENGINE, 201 } 202 } 203 } 204 pub enum DSA_METHOD {} 205 206 cfg_if! { 207 if #[cfg(any(ossl110, libressl280))] { 208 pub enum RSA {} 209 } else if #[cfg(libressl)] { 210 #[repr(C)] 211 pub struct RSA { 212 pub pad: c_int, 213 pub version: c_long, 214 pub meth: *const ::RSA_METHOD, 215 216 pub engine: *mut ::ENGINE, 217 pub n: *mut ::BIGNUM, 218 pub e: *mut ::BIGNUM, 219 pub d: *mut ::BIGNUM, 220 pub p: *mut ::BIGNUM, 221 pub q: *mut ::BIGNUM, 222 pub dmp1: *mut ::BIGNUM, 223 pub dmq1: *mut ::BIGNUM, 224 pub iqmp: *mut ::BIGNUM, 225 226 pub ex_data: ::CRYPTO_EX_DATA, 227 pub references: c_int, 228 pub flags: c_int, 229 230 pub _method_mod_n: *mut ::BN_MONT_CTX, 231 pub _method_mod_p: *mut ::BN_MONT_CTX, 232 pub _method_mod_q: *mut ::BN_MONT_CTX, 233 234 pub blinding: *mut ::BN_BLINDING, 235 pub mt_blinding: *mut ::BN_BLINDING, 236 } 237 } else { 238 #[repr(C)] 239 pub struct RSA { 240 pub pad: c_int, 241 pub version: c_long, 242 pub meth: *const ::RSA_METHOD, 243 244 pub engine: *mut ::ENGINE, 245 pub n: *mut ::BIGNUM, 246 pub e: *mut ::BIGNUM, 247 pub d: *mut ::BIGNUM, 248 pub p: *mut ::BIGNUM, 249 pub q: *mut ::BIGNUM, 250 pub dmp1: *mut ::BIGNUM, 251 pub dmq1: *mut ::BIGNUM, 252 pub iqmp: *mut ::BIGNUM, 253 254 pub ex_data: ::CRYPTO_EX_DATA, 255 pub references: c_int, 256 pub flags: c_int, 257 258 pub _method_mod_n: *mut ::BN_MONT_CTX, 259 pub _method_mod_p: *mut ::BN_MONT_CTX, 260 pub _method_mod_q: *mut ::BN_MONT_CTX, 261 262 pub bignum_data: *mut c_char, 263 pub blinding: *mut ::BN_BLINDING, 264 pub mt_blinding: *mut ::BN_BLINDING, 265 } 266 } 267 } 268 pub enum RSA_METHOD {} 269 270 pub enum EC_KEY {} 271 272 cfg_if! { 273 if #[cfg(any(ossl110, libressl280))] { 274 pub enum X509 {} 275 } else if #[cfg(libressl)] { 276 #[repr(C)] 277 pub struct X509 { 278 pub cert_info: *mut X509_CINF, 279 pub sig_alg: *mut ::X509_ALGOR, 280 pub signature: *mut ::ASN1_BIT_STRING, 281 pub valid: c_int, 282 pub references: c_int, 283 pub name: *mut c_char, 284 pub ex_data: ::CRYPTO_EX_DATA, 285 pub ex_pathlen: c_long, 286 pub ex_pcpathlen: c_long, 287 pub ex_flags: c_ulong, 288 pub ex_kusage: c_ulong, 289 pub ex_xkusage: c_ulong, 290 pub ex_nscert: c_ulong, 291 skid: *mut c_void, 292 akid: *mut c_void, 293 policy_cache: *mut c_void, 294 crldp: *mut c_void, 295 altname: *mut c_void, 296 nc: *mut c_void, 297 #[cfg(not(osslconf = "OPENSSL_NO_SHA"))] 298 sha1_hash: [c_uchar; 20], 299 aux: *mut c_void, 300 } 301 } else { 302 #[repr(C)] 303 pub struct X509 { 304 pub cert_info: *mut X509_CINF, 305 pub sig_alg: *mut X509_ALGOR, 306 pub signature: *mut ASN1_BIT_STRING, 307 pub valid: c_int, 308 pub references: c_int, 309 pub name: *mut c_char, 310 pub ex_data: CRYPTO_EX_DATA, 311 pub ex_pathlen: c_long, 312 pub ex_pcpathlen: c_long, 313 pub ex_flags: c_ulong, 314 pub ex_kusage: c_ulong, 315 pub ex_xkusage: c_ulong, 316 pub ex_nscert: c_ulong, 317 skid: *mut c_void, 318 akid: *mut c_void, 319 policy_cache: *mut c_void, 320 crldp: *mut c_void, 321 altname: *mut c_void, 322 nc: *mut c_void, 323 #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))] 324 rfc3779_addr: *mut c_void, 325 #[cfg(not(osslconf = "OPENSSL_NO_RFC3779"))] 326 rfc3779_asid: *mut c_void, 327 #[cfg(not(osslconf = "OPENSSL_NO_SHA"))] 328 sha1_hash: [c_uchar; 20], 329 aux: *mut c_void, 330 } 331 } 332 } 333 cfg_if! { 334 if #[cfg(ossl110)] { 335 pub enum X509_ALGOR {} 336 } else { 337 #[repr(C)] 338 pub struct X509_ALGOR { 339 pub algorithm: *mut ::ASN1_OBJECT, 340 parameter: *mut c_void, 341 } 342 } 343 } 344 pub enum X509_CRL {} 345 stack!(stack_st_X509_CRL); 346 347 pub enum X509_NAME {} 348 349 cfg_if! { 350 if #[cfg(any(ossl110, libressl270))] { 351 pub enum X509_STORE {} 352 } else { 353 #[repr(C)] 354 pub struct X509_STORE { 355 cache: c_int, 356 pub objs: *mut stack_st_X509_OBJECT, 357 get_cert_methods: *mut stack_st_X509_LOOKUP, 358 param: *mut X509_VERIFY_PARAM, 359 verify: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>, 360 verify_cb: Option<extern "C" fn(ok: c_int, ctx: *mut X509_STORE_CTX) -> c_int>, 361 get_issuer: Option< 362 extern "C" fn(issuer: *mut *mut X509, ctx: *mut X509_STORE_CTX, x: *mut X509) -> c_int, 363 >, 364 check_issued: 365 Option<extern "C" fn(ctx: *mut X509_STORE_CTX, x: *mut X509, issuer: *mut X509) -> c_int>, 366 check_revocation: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>, 367 get_crl: Option< 368 extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut *mut X509_CRL, x: *mut X509) -> c_int, 369 >, 370 check_crl: Option<extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut X509_CRL) -> c_int>, 371 cert_crl: 372 Option<extern "C" fn(ctx: *mut X509_STORE_CTX, crl: *mut X509_CRL, x: *mut X509) -> c_int>, 373 lookup_certs: 374 Option<extern "C" fn(ctx: *mut X509_STORE_CTX, nm: *const X509_NAME) -> *mut stack_st_X509>, 375 lookup_crls: Option< 376 extern "C" fn(ctx: *const X509_STORE_CTX, nm: *const X509_NAME) -> *mut stack_st_X509_CRL, 377 >, 378 cleanup: Option<extern "C" fn(ctx: *mut X509_STORE_CTX) -> c_int>, 379 ex_data: CRYPTO_EX_DATA, 380 references: c_int, 381 } 382 } 383 } 384 385 pub enum X509_STORE_CTX {} 386 387 cfg_if! { 388 if #[cfg(any(ossl110, libressl280))] { 389 pub enum X509_VERIFY_PARAM {} 390 } else if #[cfg(libressl251)] { 391 #[repr(C)] 392 pub struct X509_VERIFY_PARAM { 393 pub name: *mut c_char, 394 pub check_time: time_t, 395 pub inh_flags: c_ulong, 396 pub flags: c_ulong, 397 pub purpose: c_int, 398 pub trust: c_int, 399 pub depth: c_int, 400 pub policies: *mut stack_st_ASN1_OBJECT, 401 id: *mut c_void, 402 } 403 } else if #[cfg(libressl)] { 404 #[repr(C)] 405 pub struct X509_VERIFY_PARAM { 406 pub name: *mut c_char, 407 pub check_time: time_t, 408 pub inh_flags: c_ulong, 409 pub flags: c_ulong, 410 pub purpose: c_int, 411 pub trust: c_int, 412 pub depth: c_int, 413 pub policies: *mut stack_st_ASN1_OBJECT, 414 //pub id: *mut X509_VERIFY_PARAM_ID, 415 } 416 } else { 417 #[repr(C)] 418 pub struct X509_VERIFY_PARAM { 419 pub name: *mut c_char, 420 pub check_time: time_t, 421 pub inh_flags: c_ulong, 422 pub flags: c_ulong, 423 pub purpose: c_int, 424 pub trust: c_int, 425 pub depth: c_int, 426 pub policies: *mut stack_st_ASN1_OBJECT, 427 #[cfg(ossl102)] 428 pub id: *mut X509_VERIFY_PARAM_ID, 429 } 430 } 431 } 432 433 #[repr(C)] 434 pub struct X509V3_CTX { 435 flags: c_int, 436 issuer_cert: *mut c_void, 437 subject_cert: *mut c_void, 438 subject_req: *mut c_void, 439 crl: *mut c_void, 440 db_meth: *mut c_void, 441 db: *mut c_void, 442 // I like the last comment line, it is copied from OpenSSL sources: 443 // Maybe more here 444 } 445 pub enum CONF {} 446 #[cfg(ossl110)] 447 pub enum OPENSSL_INIT_SETTINGS {} 448 449 pub enum ENGINE {} 450 cfg_if! { 451 if #[cfg(any(ossl110, libressl280))] { 452 pub enum SSL {} 453 } else if #[cfg(libressl251)] { 454 #[repr(C)] 455 pub struct SSL { 456 version: c_int, 457 method: *const ::SSL_METHOD, 458 rbio: *mut ::BIO, 459 wbio: *mut ::BIO, 460 bbio: *mut ::BIO, 461 pub server: c_int, 462 s3: *mut c_void, 463 d1: *mut c_void, 464 param: *mut c_void, 465 cipher_list: *mut stack_st_SSL_CIPHER, 466 cert: *mut c_void, 467 sid_ctx_length: c_uint, 468 sid_ctx: [c_uchar; ::SSL_MAX_SID_CTX_LENGTH as usize], 469 session: *mut ::SSL_SESSION, 470 verify_mode: c_int, 471 error: c_int, 472 error_code: c_int, 473 ctx: *mut ::SSL_CTX, 474 verify_result: c_long, 475 references: c_int, 476 client_version: c_int, 477 max_send_fragment: c_uint, 478 tlsext_hostname: *mut c_char, 479 tlsext_status_type: c_int, 480 initial_ctx: *mut ::SSL_CTX, 481 enc_read_ctx: *mut ::EVP_CIPHER_CTX, 482 read_hash: *mut EVP_MD_CTX, 483 internal: *mut c_void, 484 } 485 } else if #[cfg(libressl)] { 486 #[repr(C)] 487 pub struct SSL { 488 version: c_int, 489 type_: c_int, 490 method: *const ::SSL_METHOD, 491 rbio: *mut c_void, 492 wbio: *mut c_void, 493 bbio: *mut c_void, 494 rwstate: c_int, 495 in_handshake: c_int, 496 handshake_func: Option<unsafe extern "C" fn(*mut SSL) -> c_int>, 497 pub server: c_int, 498 new_session: c_int, 499 quiet_shutdown: c_int, 500 shutdown: c_int, 501 state: c_int, 502 rstate: c_int, 503 init_buf: *mut c_void, 504 init_msg: *mut c_void, 505 init_num: c_int, 506 init_off: c_int, 507 packet: *mut c_uchar, 508 packet_length: c_uint, 509 s3: *mut c_void, 510 d1: *mut c_void, 511 read_ahead: c_int, 512 msg_callback: Option< 513 unsafe extern "C" fn(c_int, 514 c_int, 515 c_int, 516 *const c_void, 517 size_t, 518 *mut SSL, 519 *mut c_void), 520 >, 521 msg_callback_arg: *mut c_void, 522 hit: c_int, 523 param: *mut c_void, 524 cipher_list: *mut stack_st_SSL_CIPHER, 525 cipher_list_by_id: *mut stack_st_SSL_CIPHER, 526 mac_flags: c_int, 527 aead_read_ctx: *mut c_void, 528 enc_read_ctx: *mut ::EVP_CIPHER_CTX, 529 read_hash: *mut ::EVP_MD_CTX, 530 aead_write_ctx: *mut c_void, 531 enc_write_ctx: *mut ::EVP_CIPHER_CTX, 532 write_hash: *mut ::EVP_MD_CTX, 533 cert: *mut c_void, 534 sid_ctx_length: c_uint, 535 sid_ctx: [c_uchar; ::SSL_MAX_SID_CTX_LENGTH as usize], 536 session: *mut ::SSL_SESSION, 537 generate_session_id: ::GEN_SESSION_CB, 538 verify_mode: c_int, 539 verify_callback: Option<unsafe extern "C" fn(c_int, *mut ::X509_STORE_CTX) -> c_int>, 540 info_callback: Option<unsafe extern "C" fn(*mut SSL, c_int, c_int)>, 541 error: c_int, 542 error_code: c_int, 543 ctx: *mut ::SSL_CTX, 544 debug: c_int, 545 verify_result: c_long, 546 ex_data: ::CRYPTO_EX_DATA, 547 client_CA: *mut stack_st_X509_NAME, 548 references: c_int, 549 options: c_ulong, 550 mode: c_ulong, 551 max_cert_list: c_long, 552 first_packet: c_int, 553 client_version: c_int, 554 max_send_fragment: c_uint, 555 tlsext_debug_cb: 556 Option<unsafe extern "C" fn(*mut SSL, c_int, c_int, *mut c_uchar, c_int, *mut c_void)>, 557 tlsext_debug_arg: *mut c_void, 558 tlsext_hostname: *mut c_char, 559 servername_done: c_int, 560 tlsext_status_type: c_int, 561 tlsext_status_expected: c_int, 562 tlsext_ocsp_ids: *mut c_void, 563 tlsext_ocsp_exts: *mut c_void, 564 tlsext_ocsp_resp: *mut c_uchar, 565 tlsext_ocsp_resplen: c_int, 566 tlsext_ticket_expected: c_int, 567 tlsext_ecpointformatlist_length: size_t, 568 tlsext_ecpointformatlist: *mut c_uchar, 569 tlsext_ellipticcurvelist_length: size_t, 570 tlsext_ellipticcurvelist: *mut c_uchar, 571 tlsext_session_ticket: *mut c_void, 572 tlsext_session_ticket_ext_cb: ::tls_session_ticket_ext_cb_fn, 573 tls_session_ticket_ext_cb_arg: *mut c_void, 574 tls_session_secret_cb: ::tls_session_secret_cb_fn, 575 tls_session_secret_cb_arg: *mut c_void, 576 initial_ctx: *mut ::SSL_CTX, 577 next_proto_negotiated: *mut c_uchar, 578 next_proto_negotiated_len: c_uchar, 579 srtp_profiles: *mut c_void, 580 srtp_profile: *mut c_void, 581 tlsext_heartbeat: c_uint, 582 tlsext_hb_pending: c_uint, 583 tlsext_hb_seq: c_uint, 584 alpn_client_proto_list: *mut c_uchar, 585 alpn_client_proto_list_len: c_uint, 586 renegotiate: c_int, 587 } 588 } else { 589 #[repr(C)] 590 pub struct SSL { 591 version: c_int, 592 type_: c_int, 593 method: *const ::SSL_METHOD, 594 rbio: *mut c_void, 595 wbio: *mut c_void, 596 bbio: *mut c_void, 597 rwstate: c_int, 598 in_handshake: c_int, 599 handshake_func: Option<unsafe extern "C" fn(*mut SSL) -> c_int>, 600 pub server: c_int, 601 new_session: c_int, 602 quiet_session: c_int, 603 shutdown: c_int, 604 state: c_int, 605 rstate: c_int, 606 init_buf: *mut c_void, 607 init_msg: *mut c_void, 608 init_num: c_int, 609 init_off: c_int, 610 packet: *mut c_uchar, 611 packet_length: c_uint, 612 s2: *mut c_void, 613 s3: *mut c_void, 614 d1: *mut c_void, 615 read_ahead: c_int, 616 msg_callback: Option< 617 unsafe extern "C" fn(c_int, c_int, c_int, *const c_void, size_t, *mut SSL, *mut c_void), 618 >, 619 msg_callback_arg: *mut c_void, 620 hit: c_int, 621 param: *mut c_void, 622 cipher_list: *mut stack_st_SSL_CIPHER, 623 cipher_list_by_id: *mut stack_st_SSL_CIPHER, 624 mac_flags: c_int, 625 enc_read_ctx: *mut ::EVP_CIPHER_CTX, 626 read_hash: *mut ::EVP_MD_CTX, 627 expand: *mut c_void, 628 enc_write_ctx: *mut ::EVP_CIPHER_CTX, 629 write_hash: *mut ::EVP_MD_CTX, 630 compress: *mut c_void, 631 cert: *mut c_void, 632 sid_ctx_length: c_uint, 633 sid_ctx: [c_uchar; ::SSL_MAX_SID_CTX_LENGTH as usize], 634 session: *mut ::SSL_SESSION, 635 generate_session_id: ::GEN_SESSION_CB, 636 verify_mode: c_int, 637 verify_callback: Option<unsafe extern "C" fn(c_int, *mut ::X509_STORE_CTX) -> c_int>, 638 info_callback: Option<unsafe extern "C" fn(*mut SSL, c_int, c_int)>, 639 error: c_int, 640 error_code: c_int, 641 #[cfg(not(osslconf = "OPENSSL_NO_KRB5"))] 642 kssl_ctx: *mut c_void, 643 #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] 644 psk_client_callback: Option< 645 unsafe extern "C" fn(*mut SSL, *const c_char, *mut c_char, c_uint, *mut c_uchar, c_uint) 646 -> c_uint, 647 >, 648 #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] 649 psk_server_callback: 650 Option<unsafe extern "C" fn(*mut SSL, *const c_char, *mut c_uchar, c_uint) -> c_uint>, 651 ctx: *mut ::SSL_CTX, 652 debug: c_int, 653 verify_result: c_long, 654 ex_data: ::CRYPTO_EX_DATA, 655 client_CA: *mut stack_st_X509_NAME, 656 references: c_int, 657 options: c_ulong, 658 mode: c_ulong, 659 max_cert_list: c_long, 660 first_packet: c_int, 661 client_version: c_int, 662 max_send_fragment: c_uint, 663 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 664 tlsext_debug_cb: 665 Option<unsafe extern "C" fn(*mut SSL, c_int, c_int, *mut c_uchar, c_int, *mut c_void)>, 666 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 667 tlsext_debug_arg: *mut c_void, 668 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 669 tlsext_hostname: *mut c_char, 670 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 671 servername_done: c_int, 672 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 673 tlsext_status_type: c_int, 674 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 675 tlsext_status_expected: c_int, 676 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 677 tlsext_ocsp_ids: *mut c_void, 678 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 679 tlsext_ocsp_exts: *mut c_void, 680 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 681 tlsext_ocsp_resp: *mut c_uchar, 682 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 683 tlsext_ocsp_resplen: c_int, 684 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 685 tlsext_ticket_expected: c_int, 686 #[cfg(all( 687 not(osslconf = "OPENSSL_NO_TLSEXT"), 688 not(osslconf = "OPENSSL_NO_EC") 689 ))] 690 tlsext_ecpointformatlist_length: size_t, 691 #[cfg(all( 692 not(osslconf = "OPENSSL_NO_TLSEXT"), 693 not(osslconf = "OPENSSL_NO_EC") 694 ))] 695 tlsext_ecpointformatlist: *mut c_uchar, 696 #[cfg(all( 697 not(osslconf = "OPENSSL_NO_TLSEXT"), 698 not(osslconf = "OPENSSL_NO_EC") 699 ))] 700 tlsext_ellipticcurvelist_length: size_t, 701 #[cfg(all( 702 not(osslconf = "OPENSSL_NO_TLSEXT"), 703 not(osslconf = "OPENSSL_NO_EC") 704 ))] 705 tlsext_ellipticcurvelist: *mut c_uchar, 706 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 707 tlsext_opaque_prf_input: *mut c_void, 708 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 709 tlsext_opaque_prf_input_len: size_t, 710 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 711 tlsext_session_ticket: *mut c_void, 712 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 713 tlsext_session_ticket_ext_cb: ::tls_session_ticket_ext_cb_fn, 714 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 715 tls_session_ticket_ext_cb_arg: *mut c_void, 716 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 717 tls_session_secret_cb: ::tls_session_secret_cb_fn, 718 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 719 tls_session_secret_cb_arg: *mut c_void, 720 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 721 initial_ctx: *mut ::SSL_CTX, 722 #[cfg(all( 723 not(osslconf = "OPENSSL_NO_TLSEXT"), 724 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 725 ))] 726 next_proto_negotiated: *mut c_uchar, 727 #[cfg(all( 728 not(osslconf = "OPENSSL_NO_TLSEXT"), 729 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 730 ))] 731 next_proto_negotiated_len: c_uchar, 732 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 733 srtp_profiles: *mut c_void, 734 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 735 srtp_profile: *mut c_void, 736 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 737 tlsext_heartbeat: c_uint, 738 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 739 tlsext_hb_pending: c_uint, 740 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 741 tlsext_hb_seq: c_uint, 742 renegotiate: c_int, 743 #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] 744 srp_ctx: ::SRP_CTX, 745 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 746 alpn_client_proto_list: *mut c_uchar, 747 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 748 alpn_client_proto_list_len: c_uint, 749 } 750 } 751 } 752 cfg_if! { 753 if #[cfg(any(ossl110, libressl280))] { 754 pub enum SSL_CTX {} 755 } else if #[cfg(libressl251)] { 756 #[repr(C)] 757 pub struct SSL_CTX { 758 method: *const ::SSL_METHOD, 759 cipher_list: *mut stack_st_SSL_CIPHER, 760 cert_store: *mut c_void, 761 session_timeout: c_long, 762 pub references: c_int, 763 extra_certs: *mut stack_st_X509, 764 verify_mode: c_int, 765 sid_ctx_length: c_uint, 766 sid_ctx: [c_uchar; ::SSL_MAX_SID_CTX_LENGTH as usize], 767 param: *mut ::X509_VERIFY_PARAM, 768 default_passwd_callback: *mut c_void, 769 default_passwd_callback_userdata: *mut c_void, 770 internal: *mut c_void, 771 } 772 } else if #[cfg(libressl)] { 773 #[repr(C)] 774 pub struct SSL_CTX { 775 method: *mut c_void, 776 cipher_list: *mut c_void, 777 cipher_list_by_id: *mut c_void, 778 cert_store: *mut c_void, 779 sessions: *mut c_void, 780 session_cache_size: c_ulong, 781 session_cache_head: *mut c_void, 782 session_cache_tail: *mut c_void, 783 session_cache_mode: c_int, 784 session_timeout: c_long, 785 new_session_cb: *mut c_void, 786 remove_session_cb: *mut c_void, 787 get_session_cb: *mut c_void, 788 stats: [c_int; 11], 789 pub references: c_int, 790 app_verify_callback: *mut c_void, 791 app_verify_arg: *mut c_void, 792 default_passwd_callback: *mut c_void, 793 default_passwd_callback_userdata: *mut c_void, 794 client_cert_cb: *mut c_void, 795 app_gen_cookie_cb: *mut c_void, 796 app_verify_cookie_cb: *mut c_void, 797 ex_dat: ::CRYPTO_EX_DATA, 798 rsa_md5: *mut c_void, 799 md5: *mut c_void, 800 sha1: *mut c_void, 801 extra_certs: *mut c_void, 802 comp_methods: *mut c_void, 803 info_callback: *mut c_void, 804 client_CA: *mut c_void, 805 options: c_ulong, 806 mode: c_ulong, 807 max_cert_list: c_long, 808 cert: *mut c_void, 809 read_ahead: c_int, 810 msg_callback: *mut c_void, 811 msg_callback_arg: *mut c_void, 812 verify_mode: c_int, 813 sid_ctx_length: c_uint, 814 sid_ctx: [c_uchar; 32], 815 default_verify_callback: *mut c_void, 816 generate_session_id: *mut c_void, 817 param: *mut c_void, 818 quiet_shutdown: c_int, 819 max_send_fragment: c_uint, 820 821 #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))] 822 client_cert_engine: *mut c_void, 823 824 tlsext_servername_callback: *mut c_void, 825 tlsect_servername_arg: *mut c_void, 826 tlsext_tick_key_name: [c_uchar; 16], 827 tlsext_tick_hmac_key: [c_uchar; 16], 828 tlsext_tick_aes_key: [c_uchar; 16], 829 tlsext_ticket_key_cb: *mut c_void, 830 tlsext_status_cb: *mut c_void, 831 tlsext_status_arg: *mut c_void, 832 tlsext_opaque_prf_input_callback: *mut c_void, 833 tlsext_opaque_prf_input_callback_arg: *mut c_void, 834 835 next_protos_advertised_cb: *mut c_void, 836 next_protos_advertised_cb_arg: *mut c_void, 837 next_proto_select_cb: *mut c_void, 838 next_proto_select_cb_arg: *mut c_void, 839 840 srtp_profiles: *mut c_void, 841 } 842 } else { 843 #[repr(C)] 844 pub struct SSL_CTX { 845 method: *mut c_void, 846 cipher_list: *mut c_void, 847 cipher_list_by_id: *mut c_void, 848 cert_store: *mut c_void, 849 sessions: *mut c_void, 850 session_cache_size: c_ulong, 851 session_cache_head: *mut c_void, 852 session_cache_tail: *mut c_void, 853 session_cache_mode: c_int, 854 session_timeout: c_long, 855 new_session_cb: *mut c_void, 856 remove_session_cb: *mut c_void, 857 get_session_cb: *mut c_void, 858 stats: [c_int; 11], 859 pub references: c_int, 860 app_verify_callback: *mut c_void, 861 app_verify_arg: *mut c_void, 862 default_passwd_callback: *mut c_void, 863 default_passwd_callback_userdata: *mut c_void, 864 client_cert_cb: *mut c_void, 865 app_gen_cookie_cb: *mut c_void, 866 app_verify_cookie_cb: *mut c_void, 867 ex_dat: ::CRYPTO_EX_DATA, 868 rsa_md5: *mut c_void, 869 md5: *mut c_void, 870 sha1: *mut c_void, 871 extra_certs: *mut c_void, 872 comp_methods: *mut c_void, 873 info_callback: *mut c_void, 874 client_CA: *mut c_void, 875 options: c_ulong, 876 mode: c_ulong, 877 max_cert_list: c_long, 878 cert: *mut c_void, 879 read_ahead: c_int, 880 msg_callback: *mut c_void, 881 msg_callback_arg: *mut c_void, 882 verify_mode: c_int, 883 sid_ctx_length: c_uint, 884 sid_ctx: [c_uchar; 32], 885 default_verify_callback: *mut c_void, 886 generate_session_id: *mut c_void, 887 param: *mut c_void, 888 quiet_shutdown: c_int, 889 max_send_fragment: c_uint, 890 891 #[cfg(not(osslconf = "OPENSSL_NO_ENGINE"))] 892 client_cert_engine: *mut c_void, 893 894 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 895 tlsext_servername_callback: *mut c_void, 896 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 897 tlsect_servername_arg: *mut c_void, 898 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 899 tlsext_tick_key_name: [c_uchar; 16], 900 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 901 tlsext_tick_hmac_key: [c_uchar; 16], 902 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 903 tlsext_tick_aes_key: [c_uchar; 16], 904 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 905 tlsext_ticket_key_cb: *mut c_void, 906 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 907 tlsext_status_cb: *mut c_void, 908 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 909 tlsext_status_arg: *mut c_void, 910 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 911 tlsext_opaque_prf_input_callback: *mut c_void, 912 #[cfg(not(osslconf = "OPENSSL_NO_TLSEXT"))] 913 tlsext_opaque_prf_input_callback_arg: *mut c_void, 914 915 #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] 916 psk_identity_hint: *mut c_void, 917 #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] 918 psk_client_callback: *mut c_void, 919 #[cfg(not(osslconf = "OPENSSL_NO_PSK"))] 920 psk_server_callback: *mut c_void, 921 922 #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] 923 freelist_max_len: c_uint, 924 #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] 925 wbuf_freelist: *mut c_void, 926 #[cfg(not(osslconf = "OPENSSL_NO_BUF_FREELISTS"))] 927 rbuf_freelist: *mut c_void, 928 929 #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] 930 srp_ctx: SRP_CTX, 931 932 #[cfg(all( 933 not(osslconf = "OPENSSL_NO_TLSEXT"), 934 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 935 ))] 936 next_protos_advertised_cb: *mut c_void, 937 #[cfg(all( 938 not(osslconf = "OPENSSL_NO_TLSEXT"), 939 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 940 ))] 941 next_protos_advertised_cb_arg: *mut c_void, 942 #[cfg(all( 943 not(osslconf = "OPENSSL_NO_TLSEXT"), 944 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 945 ))] 946 next_proto_select_cb: *mut c_void, 947 #[cfg(all( 948 not(osslconf = "OPENSSL_NO_TLSEXT"), 949 not(osslconf = "OPENSSL_NO_NEXTPROTONEG") 950 ))] 951 next_proto_select_cb_arg: *mut c_void, 952 953 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl101))] 954 srtp_profiles: *mut c_void, 955 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 956 alpn_select_cb: *mut c_void, 957 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 958 alpn_select_cb_arg: *mut c_void, 959 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 960 alpn_client_proto_list: *mut c_void, 961 #[cfg(all(not(osslconf = "OPENSSL_NO_TLSEXT"), ossl102))] 962 alpn_client_proto_list_len: c_uint, 963 964 #[cfg(all( 965 not(osslconf = "OPENSSL_NO_TLSEXT"), 966 not(osslconf = "OPENSSL_NO_EC"), 967 ossl102 968 ))] 969 tlsext_ecpointformatlist_length: size_t, 970 #[cfg(all( 971 not(osslconf = "OPENSSL_NO_TLSEXT"), 972 not(osslconf = "OPENSSL_NO_EC"), 973 ossl102 974 ))] 975 tlsext_ecpointformatlist: *mut c_uchar, 976 #[cfg(all( 977 not(osslconf = "OPENSSL_NO_TLSEXT"), 978 not(osslconf = "OPENSSL_NO_EC"), 979 ossl102 980 ))] 981 tlsext_ellipticcurvelist_length: size_t, 982 #[cfg(all( 983 not(osslconf = "OPENSSL_NO_TLSEXT"), 984 not(osslconf = "OPENSSL_NO_EC"), 985 ossl102 986 ))] 987 tlsext_ellipticcurvelist: *mut c_uchar, 988 } 989 990 #[repr(C)] 991 #[cfg(not(osslconf = "OPENSSL_NO_SRP"))] 992 pub struct SRP_CTX { 993 SRP_cb_arg: *mut c_void, 994 TLS_ext_srp_username_callback: *mut c_void, 995 SRP_verify_param_callback: *mut c_void, 996 SRP_give_srp_client_pwd_callback: *mut c_void, 997 login: *mut c_void, 998 N: *mut c_void, 999 g: *mut c_void, 1000 s: *mut c_void, 1001 B: *mut c_void, 1002 A: *mut c_void, 1003 a: *mut c_void, 1004 b: *mut c_void, 1005 v: *mut c_void, 1006 info: *mut c_void, 1007 stringth: c_int, 1008 srp_Mask: c_ulong, 1009 } 1010 } 1011 } 1012 1013 pub enum COMP_METHOD {} 1014 1015 cfg_if! { 1016 if #[cfg(any(ossl110, libressl280))] { 1017 pub enum CRYPTO_EX_DATA {} 1018 } else if #[cfg(libressl)] { 1019 #[repr(C)] 1020 pub struct CRYPTO_EX_DATA { 1021 pub sk: *mut ::stack_st_void, 1022 } 1023 } else { 1024 #[repr(C)] 1025 pub struct CRYPTO_EX_DATA { 1026 pub sk: *mut stack_st_void, 1027 pub dummy: c_int, 1028 } 1029 } 1030 } 1031 1032 pub enum OCSP_RESPONSE {} 1033