ssl.h 107.4 KB
Newer Older
R
Rich Salz 已提交
1
/*
2
 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
3
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
4
 * Copyright 2005 Nokia. All rights reserved.
5
 *
R
Rich Salz 已提交
6 7 8 9
 * Licensed under the OpenSSL license (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
10
 */
R
Rich Salz 已提交
11

12 13
#ifndef HEADER_SSL_H
# define HEADER_SSL_H
14

15
# include <openssl/e_os2.h>
16
# include <openssl/opensslconf.h>
R
Rich Salz 已提交
17
# include <openssl/comp.h>
18
# include <openssl/bio.h>
19
# if OPENSSL_API_COMPAT < 0x10100000L
20
#  include <openssl/x509.h>
21 22 23
#  include <openssl/crypto.h>
#  include <openssl/buffer.h>
# endif
24
# include <openssl/lhash.h>
25 26
# include <openssl/pem.h>
# include <openssl/hmac.h>
M
Matt Caswell 已提交
27
# include <openssl/async.h>
28

29 30
# include <openssl/safestack.h>
# include <openssl/symhacks.h>
R
Rich Salz 已提交
31
# include <openssl/ct.h>
32
# include <openssl/sslerr.h>
33

34 35 36 37
#ifdef  __cplusplus
extern "C" {
#endif

R
Rich Salz 已提交
38
/* OpenSSL version number for ASN.1 encoding of the session information */
39 40
/*-
 * Version 0 - initial version
41 42
 * Version 1 - added the optional peer certificate
 */
43
# define SSL_SESSION_ASN1_VERSION 0x0001
44

45 46 47 48 49
# define SSL_MAX_SSL_SESSION_ID_LENGTH           32
# define SSL_MAX_SID_CTX_LENGTH                  32

# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES     (512/8)
# define SSL_MAX_KEY_ARG_LENGTH                  8
M
Matt Caswell 已提交
50
# define SSL_MAX_MASTER_KEY_LENGTH               48
51

52 53 54
/* The maximum number of encrypt/decrypt pipelines we can support */
# define SSL_MAX_PIPELINES  32

55 56
/* text strings for the ciphers */

57
/* These are used to specify which ciphers to use and not to use */
58

59 60 61 62 63 64 65 66 67 68
# define SSL_TXT_LOW             "LOW"
# define SSL_TXT_MEDIUM          "MEDIUM"
# define SSL_TXT_HIGH            "HIGH"
# define SSL_TXT_FIPS            "FIPS"

# define SSL_TXT_aNULL           "aNULL"
# define SSL_TXT_eNULL           "eNULL"
# define SSL_TXT_NULL            "NULL"

# define SSL_TXT_kRSA            "kRSA"
69 70 71
# define SSL_TXT_kDHr            "kDHr"/* this cipher class has been removed */
# define SSL_TXT_kDHd            "kDHd"/* this cipher class has been removed */
# define SSL_TXT_kDH             "kDH"/* this cipher class has been removed */
72 73
# define SSL_TXT_kEDH            "kEDH"/* alias for kDHE */
# define SSL_TXT_kDHE            "kDHE"
74 75 76
# define SSL_TXT_kECDHr          "kECDHr"/* this cipher class has been removed */
# define SSL_TXT_kECDHe          "kECDHe"/* this cipher class has been removed */
# define SSL_TXT_kECDH           "kECDH"/* this cipher class has been removed */
77 78 79
# define SSL_TXT_kEECDH          "kEECDH"/* alias for kECDHE */
# define SSL_TXT_kECDHE          "kECDHE"
# define SSL_TXT_kPSK            "kPSK"
80 81 82
# define SSL_TXT_kRSAPSK         "kRSAPSK"
# define SSL_TXT_kECDHEPSK       "kECDHEPSK"
# define SSL_TXT_kDHEPSK         "kDHEPSK"
83 84 85 86 87
# define SSL_TXT_kGOST           "kGOST"
# define SSL_TXT_kSRP            "kSRP"

# define SSL_TXT_aRSA            "aRSA"
# define SSL_TXT_aDSS            "aDSS"
88 89
# define SSL_TXT_aDH             "aDH"/* this cipher class has been removed */
# define SSL_TXT_aECDH           "aECDH"/* this cipher class has been removed */
90 91
# define SSL_TXT_aECDSA          "aECDSA"
# define SSL_TXT_aPSK            "aPSK"
92 93 94 95
# define SSL_TXT_aGOST94         "aGOST94"
# define SSL_TXT_aGOST01         "aGOST01"
# define SSL_TXT_aGOST12         "aGOST12"
# define SSL_TXT_aGOST           "aGOST"
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
# define SSL_TXT_aSRP            "aSRP"

# define SSL_TXT_DSS             "DSS"
# define SSL_TXT_DH              "DH"
# define SSL_TXT_DHE             "DHE"/* same as "kDHE:-ADH" */
# define SSL_TXT_EDH             "EDH"/* alias for DHE */
# define SSL_TXT_ADH             "ADH"
# define SSL_TXT_RSA             "RSA"
# define SSL_TXT_ECDH            "ECDH"
# define SSL_TXT_EECDH           "EECDH"/* alias for ECDHE" */
# define SSL_TXT_ECDHE           "ECDHE"/* same as "kECDHE:-AECDH" */
# define SSL_TXT_AECDH           "AECDH"
# define SSL_TXT_ECDSA           "ECDSA"
# define SSL_TXT_PSK             "PSK"
# define SSL_TXT_SRP             "SRP"

# define SSL_TXT_DES             "DES"
# define SSL_TXT_3DES            "3DES"
# define SSL_TXT_RC4             "RC4"
# define SSL_TXT_RC2             "RC2"
# define SSL_TXT_IDEA            "IDEA"
# define SSL_TXT_SEED            "SEED"
# define SSL_TXT_AES128          "AES128"
# define SSL_TXT_AES256          "AES256"
# define SSL_TXT_AES             "AES"
# define SSL_TXT_AES_GCM         "AESGCM"
D
Dr. Stephen Henson 已提交
122
# define SSL_TXT_AES_CCM         "AESCCM"
D
Dr. Stephen Henson 已提交
123
# define SSL_TXT_AES_CCM_8       "AESCCM8"
124 125 126
# define SSL_TXT_CAMELLIA128     "CAMELLIA128"
# define SSL_TXT_CAMELLIA256     "CAMELLIA256"
# define SSL_TXT_CAMELLIA        "CAMELLIA"
A
Andy Polyakov 已提交
127
# define SSL_TXT_CHACHA20        "CHACHA20"
128
# define SSL_TXT_GOST            "GOST89"
129 130 131 132
# define SSL_TXT_ARIA            "ARIA"
# define SSL_TXT_ARIA_GCM        "ARIAGCM"
# define SSL_TXT_ARIA128         "ARIA128"
# define SSL_TXT_ARIA256         "ARIA256"
133 134 135 136 137

# define SSL_TXT_MD5             "MD5"
# define SSL_TXT_SHA1            "SHA1"
# define SSL_TXT_SHA             "SHA"/* same as "SHA1" */
# define SSL_TXT_GOST94          "GOST94"
138 139 140
# define SSL_TXT_GOST89MAC       "GOST89MAC"
# define SSL_TXT_GOST12          "GOST12"
# define SSL_TXT_GOST89MAC12     "GOST89MAC12"
141 142 143 144 145 146 147 148 149
# define SSL_TXT_SHA256          "SHA256"
# define SSL_TXT_SHA384          "SHA384"

# define SSL_TXT_SSLV3           "SSLv3"
# define SSL_TXT_TLSV1           "TLSv1"
# define SSL_TXT_TLSV1_1         "TLSv1.1"
# define SSL_TXT_TLSV1_2         "TLSv1.2"

# define SSL_TXT_ALL             "ALL"
150

151
/*-
152 153 154 155 156 157 158 159 160 161 162 163 164
 * COMPLEMENTOF* definitions. These identifiers are used to (de-select)
 * ciphers normally not being used.
 * Example: "RC4" will activate all ciphers using RC4 including ciphers
 * without authentication, which would normally disabled by DEFAULT (due
 * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT"
 * will make sure that it is also disabled in the specific selection.
 * COMPLEMENTOF* identifiers are portable between version, as adjustments
 * to the default cipher setup will also be included here.
 *
 * COMPLEMENTOFDEFAULT does not experience the same special treatment that
 * DEFAULT gets, as only selection is being done and no sorting as needed
 * for DEFAULT.
 */
165 166 167 168 169 170
# define SSL_TXT_CMPALL          "COMPLEMENTOFALL"
# define SSL_TXT_CMPDEF          "COMPLEMENTOFDEFAULT"

/*
 * The following cipher list is used by default. It also is substituted when
 * an application-defined cipher list string starts with 'DEFAULT'.
171
 * This applies to ciphersuites for TLSv1.2 and below.
172
 */
173
# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
174
/* This is the default set of TLSv1.3 ciphersuites */
M
Matt Caswell 已提交
175 176 177 178 179 180 181 182
# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
#  define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
                                   "TLS_CHACHA20_POLY1305_SHA256:" \
                                   "TLS_AES_128_GCM_SHA256"
# else
#  define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
                                   "TLS_AES_128_GCM_SHA256"
#endif
183 184
/*
 * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
185
 * starts with a reasonable order, and all we have to do for DEFAULT is
186 187
 * throwing out anonymous and unencrypted ciphersuites! (The latter are not
 * actually enabled by ALL, but "ALL:RSA" would enable some of them.)
188
 */
189

190
/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
191 192
# define SSL_SENT_SHUTDOWN       1
# define SSL_RECEIVED_SHUTDOWN   2
193

194 195 196 197 198 199 200 201
#ifdef __cplusplus
}
#endif

#ifdef  __cplusplus
extern "C" {
#endif

202 203
# define SSL_FILETYPE_ASN1       X509_FILETYPE_ASN1
# define SSL_FILETYPE_PEM        X509_FILETYPE_PEM
204

205 206 207 208
/*
 * This is needed to stop compilers complaining about the 'struct ssl_st *'
 * function parameters used to prototype callbacks in SSL_CTX.
 */
209
typedef struct ssl_st *ssl_crock_st;
D
Dr. Stephen Henson 已提交
210
typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
211 212 213
typedef struct ssl_method_st SSL_METHOD;
typedef struct ssl_cipher_st SSL_CIPHER;
typedef struct ssl_session_st SSL_SESSION;
214
typedef struct tls_sigalgs_st TLS_SIGALGS;
215
typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
216
typedef struct ssl_comp_st SSL_COMP;
217

218 219
STACK_OF(SSL_CIPHER);
STACK_OF(SSL_COMP);
220

B
Ben Laurie 已提交
221
/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/
222 223 224 225
typedef struct srtp_protection_profile_st {
    const char *name;
    unsigned long id;
} SRTP_PROTECTION_PROFILE;
B
Ben Laurie 已提交
226

227
DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE)
B
Ben Laurie 已提交
228

F
FdaSilvaYY 已提交
229 230 231 232 233
typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data,
                                            int len, void *arg);
typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len,
                                        STACK_OF(SSL_CIPHER) *peer_ciphers,
                                        const SSL_CIPHER **cipher, void *arg);
234

235 236 237 238 239 240 241 242 243
/* Extension context codes */
/* This extension is only allowed in TLS */
#define SSL_EXT_TLS_ONLY                        0x0001
/* This extension is only allowed in DTLS */
#define SSL_EXT_DTLS_ONLY                       0x0002
/* Some extensions may be allowed in DTLS but we don't implement them for it */
#define SSL_EXT_TLS_IMPLEMENTATION_ONLY         0x0004
/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */
#define SSL_EXT_SSL3_ALLOWED                    0x0008
244
/* Extension is only defined for TLS1.2 and below */
245 246 247
#define SSL_EXT_TLS1_2_AND_BELOW_ONLY           0x0010
/* Extension is only defined for TLS1.3 and above */
#define SSL_EXT_TLS1_3_ONLY                     0x0020
248 249 250
/* Ignore this extension during parsing if we are resuming */
#define SSL_EXT_IGNORE_ON_RESUMPTION            0x0040
#define SSL_EXT_CLIENT_HELLO                    0x0080
251
/* Really means TLS1.2 or below */
252 253 254 255 256 257 258
#define SSL_EXT_TLS1_2_SERVER_HELLO             0x0100
#define SSL_EXT_TLS1_3_SERVER_HELLO             0x0200
#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS     0x0400
#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST      0x0800
#define SSL_EXT_TLS1_3_CERTIFICATE              0x1000
#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET       0x2000
#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST      0x4000
259

260
/* Typedefs for handling custom extensions */
D
Dr. Stephen Henson 已提交
261

F
FdaSilvaYY 已提交
262 263 264
typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
                                 const unsigned char **out, size_t *outlen,
                                 int *al, void *add_arg);
265

F
FdaSilvaYY 已提交
266 267
typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
                                   const unsigned char *out, void *add_arg);
D
Dr. Stephen Henson 已提交
268

F
FdaSilvaYY 已提交
269 270 271
typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
                                   const unsigned char *in, size_t inlen,
                                   int *al, void *parse_arg);
272

273

F
FdaSilvaYY 已提交
274 275 276 277 278 279
typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type,
                                        unsigned int context,
                                        const unsigned char **out,
                                        size_t *outlen, X509 *x,
                                        size_t chainidx,
                                        int *al, void *add_arg);
280

F
FdaSilvaYY 已提交
281 282 283 284
typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type,
                                          unsigned int context,
                                          const unsigned char *out,
                                          void *add_arg);
285

F
FdaSilvaYY 已提交
286 287 288 289 290 291
typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type,
                                          unsigned int context,
                                          const unsigned char *in,
                                          size_t inlen, X509 *x,
                                          size_t chainidx,
                                          int *al, void *parse_arg);
292

R
Rich Salz 已提交
293
/* Typedef for verification callback */
R
Rich Salz 已提交
294
typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);
R
Rich Salz 已提交
295

296 297 298
/*
 * Some values are reserved until OpenSSL 1.2.0 because they were previously
 * included in SSL_OP_ALL in a 1.1.x release.
P
Pauli 已提交
299
 *
300 301 302
 * Reserved value (until OpenSSL 1.2.0)                  0x00000001U
 * Reserved value (until OpenSSL 1.2.0)                  0x00000002U
 */
303
/* Allow initial connection to servers that don't support RI */
D
Dr. Stephen Henson 已提交
304
# define SSL_OP_LEGACY_SERVER_CONNECT                    0x00000004U
305 306

/* Reserved value (until OpenSSL 1.2.0)                  0x00000008U */
D
Dr. Stephen Henson 已提交
307
# define SSL_OP_TLSEXT_PADDING                           0x00000010U
308
/* Reserved value (until OpenSSL 1.2.0)                  0x00000020U */
D
Dr. Stephen Henson 已提交
309
# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG                   0x00000040U
310 311 312 313 314
/*
 * Reserved value (until OpenSSL 1.2.0)                  0x00000080U
 * Reserved value (until OpenSSL 1.2.0)                  0x00000100U
 * Reserved value (until OpenSSL 1.2.0)                  0x00000200U
 */
315

316 317 318
/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */
# define SSL_OP_ALLOW_NO_DHE_KEX                         0x00000400U

319 320 321 322 323
/*
 * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in
 * OpenSSL 0.9.6d.  Usually (depending on the application protocol) the
 * workaround is not needed.  Unfortunately some broken SSL/TLS
 * implementations cannot handle it at all, which is why we include it in
T
Todd Short 已提交
324
 * SSL_OP_ALL. Added in 0.9.6e
325
 */
D
Dr. Stephen Henson 已提交
326
# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800U
327

B
Ben Laurie 已提交
328
/* DTLS options */
T
Todd Short 已提交
329
# define SSL_OP_NO_QUERY_MTU                             0x00001000U
B
Ben Laurie 已提交
330
/* Turn on Cookie Exchange (on relevant for servers) */
T
Todd Short 已提交
331
# define SSL_OP_COOKIE_EXCHANGE                          0x00002000U
332
/* Don't use RFC4507 ticket extension */
T
Todd Short 已提交
333
# define SSL_OP_NO_TICKET                                0x00004000U
334 335 336
# ifndef OPENSSL_NO_DTLS1_METHOD
/* Use Cisco's "speshul" version of DTLS_BAD_VER
 * (only with deprecated DTLSv1_client_method())  */
T
Todd Short 已提交
337
#  define SSL_OP_CISCO_ANYCONNECT                        0x00008000U
338
# endif
B
Ben Laurie 已提交
339

340
/* As server, disallow session resumption on renegotiation */
D
Dr. Stephen Henson 已提交
341
# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION   0x00010000U
342
/* Don't use compression even if supported */
D
Dr. Stephen Henson 已提交
343
# define SSL_OP_NO_COMPRESSION                           0x00020000U
344
/* Permit unsafe legacy renegotiation */
D
Dr. Stephen Henson 已提交
345
# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION        0x00040000U
D
David Woodhouse 已提交
346 347
/* Disable encrypt-then-mac */
# define SSL_OP_NO_ENCRYPT_THEN_MAC                      0x00080000U
348 349 350 351 352 353 354

/*
 * Enable TLSv1.3 Compatibility mode. This is on by default. A future version
 * of OpenSSL may have this disabled by default.
 */
# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U

355 356 357
/* Prioritize Chacha20Poly1305 when client does.
 * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */
# define SSL_OP_PRIORITIZE_CHACHA                        0x00200000U
358

359 360 361
/*
 * Set on servers to choose the cipher according to the server's preferences
 */
D
Dr. Stephen Henson 已提交
362
# define SSL_OP_CIPHER_SERVER_PREFERENCE                 0x00400000U
363 364 365
/*
 * If set, a server will allow a client to issue a SSLv3.0 version number as
 * latest version supported in the premaster secret, even when TLSv1.0
366
 * (version 3.1) was announced in the client hello. Normally this is
367 368
 * forbidden to prevent version rollback attacks.
 */
D
Dr. Stephen Henson 已提交
369
# define SSL_OP_TLS_ROLLBACK_BUG                         0x00800000U
370

371 372 373 374 375 376
/*
 * Switches off automatic TLSv1.3 anti-replay protection for early data. This
 * is a server-side option only (no effect on the client).
 */
# define SSL_OP_NO_ANTI_REPLAY                           0x01000000U

D
Dr. Stephen Henson 已提交
377 378 379 380
# define SSL_OP_NO_SSLv3                                 0x02000000U
# define SSL_OP_NO_TLSv1                                 0x04000000U
# define SSL_OP_NO_TLSv1_2                               0x08000000U
# define SSL_OP_NO_TLSv1_1                               0x10000000U
381
# define SSL_OP_NO_TLSv1_3                               0x20000000U
382

D
Dr. Stephen Henson 已提交
383 384
# define SSL_OP_NO_DTLSv1                                0x04000000U
# define SSL_OP_NO_DTLSv1_2                              0x08000000U
D
Dr. Stephen Henson 已提交
385

386
# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\
387
        SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3)
388 389
# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2)

T
Todd Short 已提交
390 391 392
/* Disallow all renegotiation */
# define SSL_OP_NO_RENEGOTIATION                         0x40000000U

393 394 395 396 397
/*
 * Make server add server-hello extension from early version of cryptopro
 * draft, when GOST ciphersuite is negotiated. Required for interoperability
 * with CryptoPro CSP 3.x
 */
D
Dr. Stephen Henson 已提交
398
# define SSL_OP_CRYPTOPRO_TLSEXT_BUG                     0x80000000U
399

T
Todd Short 已提交
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
/*
 * SSL_OP_ALL: various bug workarounds that should be rather harmless.
 * This used to be 0x000FFFFFL before 0.9.7.
 * This used to be 0x80000BFFU before 1.1.1.
 */
# define SSL_OP_ALL        (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\
                            SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\
                            SSL_OP_LEGACY_SERVER_CONNECT|\
                            SSL_OP_TLSEXT_PADDING|\
                            SSL_OP_SAFARI_ECDHE_ECDSA_BUG)

/* OBSOLETE OPTIONS: retained for compatibility */

/* Removed from OpenSSL 1.1.0. Was 0x00000001L */
/* Related to removed SSLv2. */
# define SSL_OP_MICROSOFT_SESS_ID_BUG                    0x0
/* Removed from OpenSSL 1.1.0. Was 0x00000002L */
/* Related to removed SSLv2. */
# define SSL_OP_NETSCAPE_CHALLENGE_BUG                   0x0
/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */
/* Dead forever, see CVE-2010-4180 */
# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG         0x0
/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */
/* Refers to ancient SSLREF and SSLv2. */
# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG              0x0
/* Removed from OpenSSL 1.1.0. Was 0x00000020 */
# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER               0x0
/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */
# define SSL_OP_MSIE_SSLV2_RSA_PADDING                   0x0
/* Removed from OpenSSL 1.1.0. Was 0x00000080 */
/* Ancient SSLeay version. */
# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG                 0x0
/* Removed from OpenSSL 1.1.0. Was 0x00000100L */
# define SSL_OP_TLS_D5_BUG                               0x0
/* Removed from OpenSSL 1.1.0. Was 0x00000200L */
# define SSL_OP_TLS_BLOCK_PADDING_BUG                    0x0
/* Removed from OpenSSL 1.1.0. Was 0x00080000L */
# define SSL_OP_SINGLE_ECDH_USE                          0x0
/* Removed from OpenSSL 1.1.0. Was 0x00100000L */
# define SSL_OP_SINGLE_DH_USE                            0x0
/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */
# define SSL_OP_EPHEMERAL_RSA                            0x0
/* Removed from OpenSSL 1.1.0. Was 0x01000000L */
# define SSL_OP_NO_SSLv2                                 0x0
/* Removed from OpenSSL 1.0.1. Was 0x08000000L */
# define SSL_OP_PKCS1_CHECK_1                            0x0
/* Removed from OpenSSL 1.0.1. Was 0x10000000L */
# define SSL_OP_PKCS1_CHECK_2                            0x0
448
/* Removed from OpenSSL 1.1.0. Was 0x20000000L */
T
Todd Short 已提交
449 450 451 452
# define SSL_OP_NETSCAPE_CA_DN_BUG                       0x0
/* Removed from OpenSSL 1.1.0. Was 0x40000000L */
# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG          0x0

453 454 455
/*
 * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success
 * when just a single record has been written):
456
 */
D
Dr. Stephen Henson 已提交
457
# define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001U
458 459 460 461 462 463
/*
 * Make it possible to retry SSL_write() with changed buffer location (buffer
 * contents must stay the same!); this is not the default to avoid the
 * misconception that non-blocking SSL_write() behaves like non-blocking
 * write():
 */
D
Dr. Stephen Henson 已提交
464
# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U
465 466 467
/*
 * Never bother the application with retries if the transport is blocking:
 */
D
Dr. Stephen Henson 已提交
468
# define SSL_MODE_AUTO_RETRY 0x00000004U
469
/* Don't attempt to automatically build certificate chain */
D
Dr. Stephen Henson 已提交
470
# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U
471 472
/*
 * Save RAM by releasing read and write buffers when they're empty. (SSL3 and
473
 * TLS only.) Released buffers are freed.
474
 */
D
Dr. Stephen Henson 已提交
475
# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
476 477
/*
 * Send the current time in the Random fields of the ClientHello and
478 479 480
 * ServerHello records for compatibility with hypothetical implementations
 * that require it.
 */
D
Dr. Stephen Henson 已提交
481 482
# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U
# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U
483 484 485 486 487 488 489
/*
 * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications
 * that reconnect with a downgraded protocol version; see
 * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your
 * application attempts a normal handshake. Only use this in explicit
 * fallback retries, following the guidance in
 * draft-ietf-tls-downgrade-scsv-00.
490
 */
D
Dr. Stephen Henson 已提交
491
# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
M
Matt Caswell 已提交
492 493 494 495
/*
 * Support Asynchronous operation
 */
# define SSL_MODE_ASYNC 0x00000100U
496

497
/* Cert related flags */
498 499
/*
 * Many implementations ignore some aspects of the TLS standards such as
F
FdaSilvaYY 已提交
500
 * enforcing certificate chain algorithms. When this is set we enforce them.
501
 */
D
Dr. Stephen Henson 已提交
502
# define SSL_CERT_FLAG_TLS_STRICT                0x00000001U
503 504

/* Suite B modes, takes same values as certificate verify flags */
505
# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
506
/* Suite B 192 bit only mode */
507
# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
508
/* Suite B 128 bit mode allowing 192 bit algorithms */
509
# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
510

511
/* Perform all sorts of protocol violations for testing purposes */
512
# define SSL_CERT_FLAG_BROKEN_PROTOCOL           0x10000000
513

514 515
/* Flags for building certificate chains */
/* Treat any existing certificates as untrusted CAs */
516
# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED          0x1
D
typo  
Dr. Stephen Henson 已提交
517
/* Don't include root CA in chain */
518
# define SSL_BUILD_CHAIN_FLAG_NO_ROOT            0x2
D
Dr. Stephen Henson 已提交
519
/* Just check certificates already there */
520
# define SSL_BUILD_CHAIN_FLAG_CHECK              0x4
D
Dr. Stephen Henson 已提交
521
/* Ignore verification errors */
522
# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR       0x8
523
/* Clear verification errors from queue */
524
# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR        0x10
525

526 527
/* Flags returned by SSL_check_chain */
/* Certificate can be used with this session */
528
# define CERT_PKEY_VALID         0x1
529
/* Certificate can also be used for signing */
530
# define CERT_PKEY_SIGN          0x2
531
/* EE certificate signing algorithm OK */
532
# define CERT_PKEY_EE_SIGNATURE  0x10
533
/* CA signature algorithms OK */
534
# define CERT_PKEY_CA_SIGNATURE  0x20
535
/* EE certificate parameters OK */
536
# define CERT_PKEY_EE_PARAM      0x40
537
/* CA certificate parameters OK */
538
# define CERT_PKEY_CA_PARAM      0x80
539
/* Signing explicitly allowed as opposed to SHA1 fallback */
540
# define CERT_PKEY_EXPLICIT_SIGN 0x100
541
/* Client CA issuer names match (always set for server cert) */
542
# define CERT_PKEY_ISSUER_NAME   0x200
543
/* Cert type matches client types (always set for server cert) */
544
# define CERT_PKEY_CERT_TYPE     0x400
545
/* Cert chain suitable to Suite B */
546 547 548 549 550 551 552 553
# define CERT_PKEY_SUITEB        0x800

# define SSL_CONF_FLAG_CMDLINE           0x1
# define SSL_CONF_FLAG_FILE              0x2
# define SSL_CONF_FLAG_CLIENT            0x4
# define SSL_CONF_FLAG_SERVER            0x8
# define SSL_CONF_FLAG_SHOW_ERRORS       0x10
# define SSL_CONF_FLAG_CERTIFICATE       0x20
554
# define SSL_CONF_FLAG_REQUIRE_PRIVATE   0x40
D
Dr. Stephen Henson 已提交
555
/* Configuration value types */
556 557 558 559
# define SSL_CONF_TYPE_UNKNOWN           0x0
# define SSL_CONF_TYPE_STRING            0x1
# define SSL_CONF_TYPE_FILE              0x2
# define SSL_CONF_TYPE_DIR               0x3
560
# define SSL_CONF_TYPE_NONE              0x4
561

562 563
/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */
# define SSL_COOKIE_LENGTH                       4096
564

565 566 567 568 569
/*
 * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they
 * cannot be used to clear bits.
 */

570
unsigned long SSL_CTX_get_options(const SSL_CTX *ctx);
F
FdaSilvaYY 已提交
571
unsigned long SSL_get_options(const SSL *s);
572 573 574 575
unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op);
unsigned long SSL_clear_options(SSL *s, unsigned long op);
unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
unsigned long SSL_set_options(SSL *s, unsigned long op);
576

577 578 579 580 581 582 583 584 585 586 587
# define SSL_CTX_set_mode(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
# define SSL_CTX_clear_mode(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)
# define SSL_CTX_get_mode(ctx) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)
# define SSL_clear_mode(ssl,op) \
        SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)
# define SSL_set_mode(ssl,op) \
        SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
# define SSL_get_mode(ssl) \
588
        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)
589
# define SSL_set_mtu(ssl, mtu) \
B
Ben Laurie 已提交
590
        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
591
# define DTLS_set_link_mtu(ssl, mtu) \
592
        SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL)
593
# define DTLS_get_link_min_mtu(ssl) \
594
        SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL)
595

596 597
# define SSL_get_secure_renegotiation_support(ssl) \
        SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)
598

599 600 601 602 603
# ifndef OPENSSL_NO_HEARTBEATS
#  define SSL_heartbeat(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL)
# endif

604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623
# define SSL_CTX_set_cert_flags(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
# define SSL_set_cert_flags(s,op) \
        SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
# define SSL_CTX_clear_cert_flags(ctx,op) \
        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
# define SSL_clear_cert_flags(s,op) \
        SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)

void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
                              void (*cb) (int write_p, int version,
                                          int content_type, const void *buf,
                                          size_t len, SSL *ssl, void *arg));
void SSL_set_msg_callback(SSL *ssl,
                          void (*cb) (int write_p, int version,
                                      int content_type, const void *buf,
                                      size_t len, SSL *ssl, void *arg));
# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))
# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))

624 625 626
# define SSL_get_extms_support(s) \
        SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL)

627 628
# ifndef OPENSSL_NO_SRP

B
Ben Laurie 已提交
629
/* see tls_srp.c */
M
Matt Caswell 已提交
630 631
__owur int SSL_SRP_CTX_init(SSL *s);
__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx);
B
Ben Laurie 已提交
632 633
int SSL_SRP_CTX_free(SSL *ctx);
int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx);
M
Matt Caswell 已提交
634 635
__owur int SSL_srp_server_param_with_username(SSL *s, int *ad);
__owur int SRP_Calc_A_param(SSL *s);
B
Ben Laurie 已提交
636

637
# endif
638

639 640
/* 100k max cert list */
# define SSL_MAX_CERT_LIST_DEFAULT 1024*100
641

642 643 644 645 646 647 648 649 650 651 652 653 654 655
# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT      (1024*20)

/*
 * This callback type is used inside SSL_CTX, SSL, and in the functions that
 * set them. It is used to override the generation of SSL/TLS session IDs in
 * a server. Return value should be zero on an error, non-zero to proceed.
 * Also, callbacks should themselves check if the id they generate is unique
 * otherwise the SSL handshake will fail with an error - callbacks can do
 * this using the 'ssl' value they're passed by;
 * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in
 * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32
 * bytes. The callback can alter this length to be less if desired. It is
 * also an error for the callback to set the size to zero.
 */
R
Rich Salz 已提交
656
typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id,
657
                               unsigned int *id_len);
658

659 660 661 662 663
# define SSL_SESS_CACHE_OFF                      0x0000
# define SSL_SESS_CACHE_CLIENT                   0x0001
# define SSL_SESS_CACHE_SERVER                   0x0002
# define SSL_SESS_CACHE_BOTH     (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)
# define SSL_SESS_CACHE_NO_AUTO_CLEAR            0x0080
664
/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */
665 666 667 668
# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP       0x0100
# define SSL_SESS_CACHE_NO_INTERNAL_STORE        0x0200
# define SSL_SESS_CACHE_NO_INTERNAL \
        (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)
669

B
Ben Laurie 已提交
670
LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);
671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703
# define SSL_CTX_sess_number(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
# define SSL_CTX_sess_connect(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)
# define SSL_CTX_sess_connect_good(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)
# define SSL_CTX_sess_connect_renegotiate(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)
# define SSL_CTX_sess_accept(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)
# define SSL_CTX_sess_accept_renegotiate(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)
# define SSL_CTX_sess_accept_good(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)
# define SSL_CTX_sess_hits(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)
# define SSL_CTX_sess_cb_hits(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)
# define SSL_CTX_sess_misses(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)
# define SSL_CTX_sess_timeouts(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)
# define SSL_CTX_sess_cache_full(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)

void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
                             int (*new_session_cb) (struct ssl_st *ssl,
                                                    SSL_SESSION *sess));
int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
                                              SSL_SESSION *sess);
void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
                                void (*remove_session_cb) (struct ssl_ctx_st
                                                           *ctx,
F
FdaSilvaYY 已提交
704
                                                           SSL_SESSION *sess));
705 706 707 708 709
void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx,
                                                  SSL_SESSION *sess);
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
                             SSL_SESSION *(*get_session_cb) (struct ssl_st
                                                             *ssl,
E
Emilia Kasper 已提交
710
                                                             const unsigned char
711 712 713
                                                             *data, int len,
                                                             int *copy));
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,
E
Emilia Kasper 已提交
714
                                                       const unsigned char *data,
715 716
                                                       int len, int *copy);
void SSL_CTX_set_info_callback(SSL_CTX *ctx,
F
FdaSilvaYY 已提交
717
                               void (*cb) (const SSL *ssl, int type, int val));
718 719 720 721 722 723 724 725
void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,
                                                 int val);
void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
                                int (*client_cert_cb) (SSL *ssl, X509 **x509,
                                                       EVP_PKEY **pkey));
int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,
                                                 EVP_PKEY **pkey);
# ifndef OPENSSL_NO_ENGINE
M
Matt Caswell 已提交
726
__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e);
727 728 729 730 731 732 733 734 735
# endif
void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
                                    int (*app_gen_cookie_cb) (SSL *ssl,
                                                              unsigned char
                                                              *cookie,
                                                              unsigned int
                                                              *cookie_len));
void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
                                  int (*app_verify_cookie_cb) (SSL *ssl,
F
FdaSilvaYY 已提交
736 737
                                                               const unsigned
                                                               char *cookie,
738 739
                                                               unsigned int
                                                               cookie_len));
740 741 742 743 744 745 746 747 748 749 750

void SSL_CTX_set_stateless_cookie_generate_cb(
    SSL_CTX *ctx,
    int (*gen_stateless_cookie_cb) (SSL *ssl,
                                    unsigned char *cookie,
                                    size_t *cookie_len));
void SSL_CTX_set_stateless_cookie_verify_cb(
    SSL_CTX *ctx,
    int (*verify_stateless_cookie_cb) (SSL *ssl,
                                       const unsigned char *cookie,
                                       size_t cookie_len));
751
# ifndef OPENSSL_NO_NEXTPROTONEG
752 753 754 755 756

typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl,
                                              const unsigned char **out,
                                              unsigned int *outlen,
                                              void *arg);
B
Ben Laurie 已提交
757
void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,
F
FdaSilvaYY 已提交
758 759
                                           SSL_CTX_npn_advertised_cb_func cb,
                                           void *arg);
760 761 762 763 764 765 766 767
#  define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb

typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s,
                                          unsigned char **out,
                                          unsigned char *outlen,
                                          const unsigned char *in,
                                          unsigned int inlen,
                                          void *arg);
B
Ben Laurie 已提交
768
void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
769
                                      SSL_CTX_npn_select_cb_func cb,
R
Rich Salz 已提交
770
                                      void *arg);
771 772
#  define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb

773
void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
774
                                    unsigned *len);
775
#  define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated
776
# endif
B
Ben Laurie 已提交
777

M
Matt Caswell 已提交
778
__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
F
FdaSilvaYY 已提交
779 780 781
                                 const unsigned char *in, unsigned int inlen,
                                 const unsigned char *client,
                                 unsigned int client_len);
B
Ben Laurie 已提交
782

783 784 785 786
# define OPENSSL_NPN_UNSUPPORTED 0
# define OPENSSL_NPN_NEGOTIATED  1
# define OPENSSL_NPN_NO_OVERLAP  2

M
Matt Caswell 已提交
787
__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
T
Todd Short 已提交
788
                                   unsigned int protos_len);
M
Matt Caswell 已提交
789
__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
T
Todd Short 已提交
790
                               unsigned int protos_len);
791
typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl,
792 793 794 795
                                           const unsigned char **out,
                                           unsigned char *outlen,
                                           const unsigned char *in,
                                           unsigned int inlen,
796 797 798 799
                                           void *arg);
void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
                                SSL_CTX_alpn_select_cb_func cb,
                                void *arg);
A
Adam Langley 已提交
800
void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
T
Todd Short 已提交
801
                            unsigned int *len);
802 803 804 805 806 807 808 809

# ifndef OPENSSL_NO_PSK
/*
 * the maximum length of the buffer given to callbacks containing the
 * resulting identity/psk
 */
#  define PSK_MAX_IDENTITY_LEN 128
#  define PSK_MAX_PSK_LEN 256
810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825
typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
                                               const char *hint,
                                               char *identity,
                                               unsigned int max_identity_len,
                                               unsigned char *psk,
                                               unsigned int max_psk_len);
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);

typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl,
                                               const char *identity,
                                               unsigned char *psk,
                                               unsigned int max_psk_len);
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb);
void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb);

M
Matt Caswell 已提交
826 827
__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);
__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);
828 829
const char *SSL_get_psk_identity_hint(const SSL *s);
const char *SSL_get_psk_identity(const SSL *s);
830
# endif
831

M
Matt Caswell 已提交
832 833 834 835 836 837 838 839 840
typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl,
                                            const unsigned char *identity,
                                            size_t identity_len,
                                            SSL_SESSION **sess);
typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md,
                                           const unsigned char **id,
                                           size_t *idlen,
                                           SSL_SESSION **sess);

841 842 843 844 845
void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb);
void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
                                           SSL_psk_find_session_cb_func cb);
void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb);
void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
846
                                          SSL_psk_use_session_cb_func cb);
847

848 849
/* Register callbacks to handle custom TLS Extensions for client or server. */

850 851 852
__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx,
                                         unsigned int ext_type);

F
FdaSilvaYY 已提交
853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx,
                                         unsigned int ext_type,
                                         custom_ext_add_cb add_cb,
                                         custom_ext_free_cb free_cb,
                                         void *add_arg,
                                         custom_ext_parse_cb parse_cb,
                                         void *parse_arg);

__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx,
                                         unsigned int ext_type,
                                         custom_ext_add_cb add_cb,
                                         custom_ext_free_cb free_cb,
                                         void *add_arg,
                                         custom_ext_parse_cb parse_cb,
                                         void *parse_arg);
868

869 870
__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
                                  unsigned int context,
871 872
                                  SSL_custom_ext_add_cb_ex add_cb,
                                  SSL_custom_ext_free_cb_ex free_cb,
873
                                  void *add_arg,
874
                                  SSL_custom_ext_parse_cb_ex parse_cb,
875 876
                                  void *parse_arg);

M
Matt Caswell 已提交
877
__owur int SSL_extension_supported(unsigned int ext_type);
878

M
Matt Caswell 已提交
879 880 881 882 883
# define SSL_NOTHING            1
# define SSL_WRITING            2
# define SSL_READING            3
# define SSL_X509_LOOKUP        4
# define SSL_ASYNC_PAUSED       5
M
Matt Caswell 已提交
884
# define SSL_ASYNC_NO_JOBS      6
885
# define SSL_CLIENT_HELLO_CB    7
886 887

/* These will only be used when doing non-blocking IO */
888 889 890 891 892 893 894
# define SSL_want_nothing(s)         (SSL_want(s) == SSL_NOTHING)
# define SSL_want_read(s)            (SSL_want(s) == SSL_READING)
# define SSL_want_write(s)           (SSL_want(s) == SSL_WRITING)
# define SSL_want_x509_lookup(s)     (SSL_want(s) == SSL_X509_LOOKUP)
# define SSL_want_async(s)           (SSL_want(s) == SSL_ASYNC_PAUSED)
# define SSL_want_async_job(s)       (SSL_want(s) == SSL_ASYNC_NO_JOBS)
# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB)
895

896 897
# define SSL_MAC_FLAG_READ_MAC_STREAM 1
# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2
898

899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917
/*
 * A callback for logging out TLS key material. This callback should log out
 * |line| followed by a newline.
 */
typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line);

/*
 * SSL_CTX_set_keylog_callback configures a callback to log key material. This
 * is intended for debugging use with tools like Wireshark. The cb function
 * should log line followed by a newline.
 */
void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb);

/*
 * SSL_CTX_get_keylog_callback returns the callback configured by
 * SSL_CTX_set_keylog_callback.
 */
SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx);

918
int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data);
919
uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx);
920
int SSL_set_max_early_data(SSL *s, uint32_t max_early_data);
921
uint32_t SSL_get_max_early_data(const SSL *s);
922

923 924 925 926
#ifdef __cplusplus
}
#endif

927 928 929 930 931
# include <openssl/ssl2.h>
# include <openssl/ssl3.h>
# include <openssl/tls1.h>      /* This is mostly sslv3 with a few tweaks */
# include <openssl/dtls1.h>     /* Datagram TLS */
# include <openssl/srtp.h>      /* Support for the use_srtp extension */
932

933 934 935 936
#ifdef  __cplusplus
extern "C" {
#endif

937 938 939 940 941 942 943
/*
 * These need to be after the above set of includes due to a compiler bug
 * in VisualStudio 2015
 */
DEFINE_STACK_OF_CONST(SSL_CIPHER)
DEFINE_STACK_OF(SSL_COMP)

U
Ulf Möller 已提交
944
/* compatibility */
945
# define SSL_set_app_data(s,arg)         (SSL_set_ex_data(s,0,(char *)(arg)))
946
# define SSL_get_app_data(s)             (SSL_get_ex_data(s,0))
947 948
# define SSL_SESSION_set_app_data(s,a)   (SSL_SESSION_set_ex_data(s,0, \
                                                                  (char *)(a)))
949 950
# define SSL_SESSION_get_app_data(s)     (SSL_SESSION_get_ex_data(s,0))
# define SSL_CTX_get_app_data(ctx)       (SSL_CTX_get_ex_data(ctx,0))
951 952
# define SSL_CTX_set_app_data(ctx,arg)   (SSL_CTX_set_ex_data(ctx,0, \
                                                              (char *)(arg)))
R
Rich Salz 已提交
953
DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug))
954

955
/* TLSv1.3 KeyUpdate message types */
956 957 958 959 960
/* -1 used so that this is an invalid value for the on-the-wire protocol */
#define SSL_KEY_UPDATE_NONE             -1
/* Values as defined for the on-the-wire protocol */
#define SSL_KEY_UPDATE_NOT_REQUESTED     0
#define SSL_KEY_UPDATE_REQUESTED         1
M
Matt Caswell 已提交
961 962 963 964 965 966 967 968 969 970 971 972 973

/*
 * The valid handshake states (one for each type message sent and one for each
 * type of message received). There are also two "special" states:
 * TLS = TLS or DTLS state
 * DTLS = DTLS specific state
 * CR/SR = Client Read/Server Read
 * CW/SW = Client Write/Server Write
 *
 * The "special" states are:
 * TLS_ST_BEFORE = No handshake has been initiated yet
 * TLS_ST_OK = A handshake has been successfully completed
 */
974
typedef enum {
M
Matt Caswell 已提交
975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
    TLS_ST_BEFORE,
    TLS_ST_OK,
    DTLS_ST_CR_HELLO_VERIFY_REQUEST,
    TLS_ST_CR_SRVR_HELLO,
    TLS_ST_CR_CERT,
    TLS_ST_CR_CERT_STATUS,
    TLS_ST_CR_KEY_EXCH,
    TLS_ST_CR_CERT_REQ,
    TLS_ST_CR_SRVR_DONE,
    TLS_ST_CR_SESSION_TICKET,
    TLS_ST_CR_CHANGE,
    TLS_ST_CR_FINISHED,
    TLS_ST_CW_CLNT_HELLO,
    TLS_ST_CW_CERT,
    TLS_ST_CW_KEY_EXCH,
    TLS_ST_CW_CERT_VRFY,
    TLS_ST_CW_CHANGE,
    TLS_ST_CW_NEXT_PROTO,
    TLS_ST_CW_FINISHED,
    TLS_ST_SW_HELLO_REQ,
    TLS_ST_SR_CLNT_HELLO,
    DTLS_ST_SW_HELLO_VERIFY_REQUEST,
    TLS_ST_SW_SRVR_HELLO,
    TLS_ST_SW_CERT,
    TLS_ST_SW_KEY_EXCH,
    TLS_ST_SW_CERT_REQ,
    TLS_ST_SW_SRVR_DONE,
    TLS_ST_SR_CERT,
    TLS_ST_SR_KEY_EXCH,
    TLS_ST_SR_CERT_VRFY,
    TLS_ST_SR_NEXT_PROTO,
    TLS_ST_SR_CHANGE,
    TLS_ST_SR_FINISHED,
    TLS_ST_SW_SESSION_TICKET,
    TLS_ST_SW_CERT_STATUS,
    TLS_ST_SW_CHANGE,
M
Matt Caswell 已提交
1011 1012
    TLS_ST_SW_FINISHED,
    TLS_ST_SW_ENCRYPTED_EXTENSIONS,
1013 1014
    TLS_ST_CR_ENCRYPTED_EXTENSIONS,
    TLS_ST_CR_CERT_VRFY,
1015
    TLS_ST_SW_CERT_VRFY,
1016
    TLS_ST_CR_HELLO_REQ,
1017
    TLS_ST_SW_KEY_UPDATE,
1018 1019
    TLS_ST_CW_KEY_UPDATE,
    TLS_ST_SR_KEY_UPDATE,
1020
    TLS_ST_CR_KEY_UPDATE,
1021
    TLS_ST_EARLY_DATA,
1022 1023 1024
    TLS_ST_PENDING_EARLY_DATA_END,
    TLS_ST_CW_END_OF_EARLY_DATA,
    TLS_ST_SR_END_OF_EARLY_DATA
1025
} OSSL_HANDSHAKE_STATE;
M
Matt Caswell 已提交
1026

1027
/*
M
Matt Caswell 已提交
1028 1029 1030 1031 1032
 * Most of the following state values are no longer used and are defined to be
 * the closest equivalent value in the current state machine code. Not all
 * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT
 * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP,
 * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT.
1033 1034 1035 1036
 */

# define SSL_ST_CONNECT                  0x1000
# define SSL_ST_ACCEPT                   0x2000
M
Matt Caswell 已提交
1037

1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052
# define SSL_ST_MASK                     0x0FFF

# define SSL_CB_LOOP                     0x01
# define SSL_CB_EXIT                     0x02
# define SSL_CB_READ                     0x04
# define SSL_CB_WRITE                    0x08
# define SSL_CB_ALERT                    0x4000/* used in callback */
# define SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
# define SSL_CB_WRITE_ALERT              (SSL_CB_ALERT|SSL_CB_WRITE)
# define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
# define SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
# define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
# define SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
# define SSL_CB_HANDSHAKE_START          0x10
# define SSL_CB_HANDSHAKE_DONE           0x20
1053 1054

/* Is the SSL_connection established? */
1055 1056
# define SSL_in_connect_init(a)          (SSL_in_init(a) && !SSL_is_server(a))
# define SSL_in_accept_init(a)           (SSL_in_init(a) && SSL_is_server(a))
M
Matt Caswell 已提交
1057 1058 1059
int SSL_in_init(SSL *s);
int SSL_in_before(SSL *s);
int SSL_is_init_finished(SSL *s);
1060 1061

/*
1062 1063
 * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you
 * should not need these
1064 1065 1066 1067
 */
# define SSL_ST_READ_HEADER                      0xF0
# define SSL_ST_READ_BODY                        0xF1
# define SSL_ST_READ_DONE                        0xF2
1068

1069 1070
/*-
 * Obtain latest Finished message
1071 1072
 *   -- that we sent (SSL_get_finished)
 *   -- that we expected from peer (SSL_get_peer_finished).
1073 1074
 * Returns length (0 == no Finished so far), copies up to 'count' bytes.
 */
B
Ben Laurie 已提交
1075 1076
size_t SSL_get_finished(const SSL *s, void *buf, size_t count);
size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);
1077

1078
/*
1079
 * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are
1080 1081 1082 1083 1084 1085
 * 'ored' with SSL_VERIFY_PEER if they are desired
 */
# define SSL_VERIFY_NONE                 0x00
# define SSL_VERIFY_PEER                 0x01
# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
# define SSL_VERIFY_CLIENT_ONCE          0x04
1086
# define SSL_VERIFY_POST_HANDSHAKE       0x08
1087

1088
# if OPENSSL_API_COMPAT < 0x10100000L
1089
#  define OpenSSL_add_ssl_algorithms()   SSL_library_init()
1090 1091
#  define SSLeay_add_ssl_algorithms()    SSL_library_init()
# endif
1092

U
Ulf Möller 已提交
1093
/* More backward compatibility */
1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108
# define SSL_get_cipher(s) \
                SSL_CIPHER_get_name(SSL_get_current_cipher(s))
# define SSL_get_cipher_bits(s,np) \
                SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
# define SSL_get_cipher_version(s) \
                SSL_CIPHER_get_version(SSL_get_current_cipher(s))
# define SSL_get_cipher_name(s) \
                SSL_CIPHER_get_name(SSL_get_current_cipher(s))
# define SSL_get_time(a)         SSL_SESSION_get_time(a)
# define SSL_set_time(a,b)       SSL_SESSION_set_time((a),(b))
# define SSL_get_timeout(a)      SSL_SESSION_get_timeout(a)
# define SSL_set_timeout(a,b)    SSL_SESSION_set_timeout((a),(b))

# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
D
Dr. Stephen Henson 已提交
1109 1110

DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
1111 1112
# define SSL_AD_REASON_OFFSET            1000/* offset to get SSL_R_... value
                                              * from SSL_AD_... */
1113
/* These alert types are for SSLv3 and TLSv1 */
1114
# define SSL_AD_CLOSE_NOTIFY             SSL3_AD_CLOSE_NOTIFY
1115
/* fatal */
1116
# define SSL_AD_UNEXPECTED_MESSAGE       SSL3_AD_UNEXPECTED_MESSAGE
1117
/* fatal */
1118 1119 1120
# define SSL_AD_BAD_RECORD_MAC           SSL3_AD_BAD_RECORD_MAC
# define SSL_AD_DECRYPTION_FAILED        TLS1_AD_DECRYPTION_FAILED
# define SSL_AD_RECORD_OVERFLOW          TLS1_AD_RECORD_OVERFLOW
1121
/* fatal */
1122
# define SSL_AD_DECOMPRESSION_FAILURE    SSL3_AD_DECOMPRESSION_FAILURE
1123
/* fatal */
1124
# define SSL_AD_HANDSHAKE_FAILURE        SSL3_AD_HANDSHAKE_FAILURE
1125
/* Not for TLS */
1126 1127 1128 1129 1130 1131
# define SSL_AD_NO_CERTIFICATE           SSL3_AD_NO_CERTIFICATE
# define SSL_AD_BAD_CERTIFICATE          SSL3_AD_BAD_CERTIFICATE
# define SSL_AD_UNSUPPORTED_CERTIFICATE  SSL3_AD_UNSUPPORTED_CERTIFICATE
# define SSL_AD_CERTIFICATE_REVOKED      SSL3_AD_CERTIFICATE_REVOKED
# define SSL_AD_CERTIFICATE_EXPIRED      SSL3_AD_CERTIFICATE_EXPIRED
# define SSL_AD_CERTIFICATE_UNKNOWN      SSL3_AD_CERTIFICATE_UNKNOWN
1132
/* fatal */
1133
# define SSL_AD_ILLEGAL_PARAMETER        SSL3_AD_ILLEGAL_PARAMETER
1134
/* fatal */
1135
# define SSL_AD_UNKNOWN_CA               TLS1_AD_UNKNOWN_CA
1136
/* fatal */
1137
# define SSL_AD_ACCESS_DENIED            TLS1_AD_ACCESS_DENIED
1138
/* fatal */
1139 1140
# define SSL_AD_DECODE_ERROR             TLS1_AD_DECODE_ERROR
# define SSL_AD_DECRYPT_ERROR            TLS1_AD_DECRYPT_ERROR
1141
/* fatal */
1142
# define SSL_AD_EXPORT_RESTRICTION       TLS1_AD_EXPORT_RESTRICTION
1143
/* fatal */
1144
# define SSL_AD_PROTOCOL_VERSION         TLS1_AD_PROTOCOL_VERSION
1145
/* fatal */
1146
# define SSL_AD_INSUFFICIENT_SECURITY    TLS1_AD_INSUFFICIENT_SECURITY
1147
/* fatal */
1148 1149 1150
# define SSL_AD_INTERNAL_ERROR           TLS1_AD_INTERNAL_ERROR
# define SSL_AD_USER_CANCELLED           TLS1_AD_USER_CANCELLED
# define SSL_AD_NO_RENEGOTIATION         TLS1_AD_NO_RENEGOTIATION
1151
# define SSL_AD_MISSING_EXTENSION        TLS13_AD_MISSING_EXTENSION
1152
# define SSL_AD_CERTIFICATE_REQUIRED     TLS13_AD_CERTIFICATE_REQUIRED
1153 1154 1155 1156 1157
# define SSL_AD_UNSUPPORTED_EXTENSION    TLS1_AD_UNSUPPORTED_EXTENSION
# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
# define SSL_AD_UNRECOGNIZED_NAME        TLS1_AD_UNRECOGNIZED_NAME
# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE
# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE
1158
/* fatal */
1159
# define SSL_AD_UNKNOWN_PSK_IDENTITY     TLS1_AD_UNKNOWN_PSK_IDENTITY
1160
/* fatal */
1161
# define SSL_AD_INAPPROPRIATE_FALLBACK   TLS1_AD_INAPPROPRIATE_FALLBACK
1162
# define SSL_AD_NO_APPLICATION_PROTOCOL  TLS1_AD_NO_APPLICATION_PROTOCOL
1163 1164 1165 1166 1167 1168 1169 1170 1171 1172
# define SSL_ERROR_NONE                  0
# define SSL_ERROR_SSL                   1
# define SSL_ERROR_WANT_READ             2
# define SSL_ERROR_WANT_WRITE            3
# define SSL_ERROR_WANT_X509_LOOKUP      4
# define SSL_ERROR_SYSCALL               5/* look at error stack/return
                                           * value/errno */
# define SSL_ERROR_ZERO_RETURN           6
# define SSL_ERROR_WANT_CONNECT          7
# define SSL_ERROR_WANT_ACCEPT           8
M
Matt Caswell 已提交
1173
# define SSL_ERROR_WANT_ASYNC            9
M
Matt Caswell 已提交
1174
# define SSL_ERROR_WANT_ASYNC_JOB       10
1175
# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11
1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186
# define SSL_CTRL_SET_TMP_DH                     3
# define SSL_CTRL_SET_TMP_ECDH                   4
# define SSL_CTRL_SET_TMP_DH_CB                  6
# define SSL_CTRL_GET_CLIENT_CERT_REQUEST        9
# define SSL_CTRL_GET_NUM_RENEGOTIATIONS         10
# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS       11
# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS       12
# define SSL_CTRL_GET_FLAGS                      13
# define SSL_CTRL_EXTRA_CHAIN_CERT               14
# define SSL_CTRL_SET_MSG_CALLBACK               15
# define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
B
Ben Laurie 已提交
1187
/* only applies to datagram connections */
1188
# define SSL_CTRL_SET_MTU                17
1189
/* Stats */
1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211
# define SSL_CTRL_SESS_NUMBER                    20
# define SSL_CTRL_SESS_CONNECT                   21
# define SSL_CTRL_SESS_CONNECT_GOOD              22
# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE       23
# define SSL_CTRL_SESS_ACCEPT                    24
# define SSL_CTRL_SESS_ACCEPT_GOOD               25
# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE        26
# define SSL_CTRL_SESS_HIT                       27
# define SSL_CTRL_SESS_CB_HIT                    28
# define SSL_CTRL_SESS_MISSES                    29
# define SSL_CTRL_SESS_TIMEOUTS                  30
# define SSL_CTRL_SESS_CACHE_FULL                31
# define SSL_CTRL_MODE                           33
# define SSL_CTRL_GET_READ_AHEAD                 40
# define SSL_CTRL_SET_READ_AHEAD                 41
# define SSL_CTRL_SET_SESS_CACHE_SIZE            42
# define SSL_CTRL_GET_SESS_CACHE_SIZE            43
# define SSL_CTRL_SET_SESS_CACHE_MODE            44
# define SSL_CTRL_GET_SESS_CACHE_MODE            45
# define SSL_CTRL_GET_MAX_CERT_LIST              50
# define SSL_CTRL_SET_MAX_CERT_LIST              51
# define SSL_CTRL_SET_MAX_SEND_FRAGMENT          52
B
Bodo Möller 已提交
1212
/* see tls1.h for macros based on these */
1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239
# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB       53
# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG      54
# define SSL_CTRL_SET_TLSEXT_HOSTNAME            55
# define SSL_CTRL_SET_TLSEXT_DEBUG_CB            56
# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG           57
# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS         58
# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS         59
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT    60 */
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */
/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB       63
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG   64
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE     65
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS     66
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS     67
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS      68
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS      69
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP        70
# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP        71
# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB       72
# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB    75
# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB                76
# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB             77
# define SSL_CTRL_SET_SRP_ARG            78
# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME               79
# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH               80
# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD               81
1240 1241 1242 1243 1244
# ifndef OPENSSL_NO_HEARTBEATS
#  define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT               85
#  define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING        86
#  define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS    87
# endif
1245 1246 1247 1248 1249 1250 1251 1252 1253
# define DTLS_CTRL_GET_TIMEOUT           73
# define DTLS_CTRL_HANDLE_TIMEOUT        74
# define SSL_CTRL_GET_RI_SUPPORT                 76
# define SSL_CTRL_CLEAR_MODE                     78
# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB      79
# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS          82
# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS        83
# define SSL_CTRL_CHAIN                          88
# define SSL_CTRL_CHAIN_CERT                     89
1254 1255 1256 1257
# define SSL_CTRL_GET_GROUPS                     90
# define SSL_CTRL_SET_GROUPS                     91
# define SSL_CTRL_SET_GROUPS_LIST                92
# define SSL_CTRL_GET_SHARED_GROUP               93
1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278
# define SSL_CTRL_SET_SIGALGS                    97
# define SSL_CTRL_SET_SIGALGS_LIST               98
# define SSL_CTRL_CERT_FLAGS                     99
# define SSL_CTRL_CLEAR_CERT_FLAGS               100
# define SSL_CTRL_SET_CLIENT_SIGALGS             101
# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST        102
# define SSL_CTRL_GET_CLIENT_CERT_TYPES          103
# define SSL_CTRL_SET_CLIENT_CERT_TYPES          104
# define SSL_CTRL_BUILD_CERT_CHAIN               105
# define SSL_CTRL_SET_VERIFY_CERT_STORE          106
# define SSL_CTRL_SET_CHAIN_CERT_STORE           107
# define SSL_CTRL_GET_PEER_SIGNATURE_NID         108
# define SSL_CTRL_GET_SERVER_TMP_KEY             109
# define SSL_CTRL_GET_RAW_CIPHERLIST             110
# define SSL_CTRL_GET_EC_POINT_FORMATS           111
# define SSL_CTRL_GET_CHAIN_CERTS                115
# define SSL_CTRL_SELECT_CURRENT_CERT            116
# define SSL_CTRL_SET_CURRENT_CERT               117
# define SSL_CTRL_SET_DH_AUTO                    118
# define DTLS_CTRL_SET_LINK_MTU                  120
# define DTLS_CTRL_GET_LINK_MIN_MTU              121
1279
# define SSL_CTRL_GET_EXTMS_SUPPORT              122
1280 1281
# define SSL_CTRL_SET_MIN_PROTO_VERSION          123
# define SSL_CTRL_SET_MAX_PROTO_VERSION          124
1282 1283
# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT        125
# define SSL_CTRL_SET_MAX_PIPELINES              126
1284
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE     127
1285 1286
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB       128
# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG   129
1287 1288
# define SSL_CTRL_GET_MIN_PROTO_VERSION          130
# define SSL_CTRL_GET_MAX_PROTO_VERSION          131
1289 1290 1291 1292
# define SSL_CERT_SET_FIRST                      1
# define SSL_CERT_SET_NEXT                       2
# define SSL_CERT_SET_SERVER                     3
# define DTLSv1_get_timeout(ssl, arg) \
1293
        SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg))
1294 1295 1296 1297 1298 1299 1300 1301 1302
# define DTLSv1_handle_timeout(ssl) \
        SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
# define SSL_num_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)
# define SSL_clear_num_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)
# define SSL_total_renegotiations(ssl) \
        SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)
# define SSL_CTX_set_tmp_dh(ctx,dh) \
1303
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
1304
# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
1305
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
1306 1307 1308 1309 1310
# define SSL_CTX_set_dh_auto(ctx, onoff) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
# define SSL_set_dh_auto(s, onoff) \
        SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL)
# define SSL_set_tmp_dh(ssl,dh) \
1311
        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh))
1312
# define SSL_set_tmp_ecdh(ssl,ecdh) \
1313
        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
1314
# define SSL_CTX_add_extra_chain_cert(ctx,x509) \
1315
        SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509))
1316 1317 1318 1319 1320 1321 1322
# define SSL_CTX_get_extra_chain_certs(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
# define SSL_CTX_clear_extra_chain_certs(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
# define SSL_CTX_set0_chain(ctx,sk) \
1323
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
1324
# define SSL_CTX_set1_chain(ctx,sk) \
1325
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
1326
# define SSL_CTX_add0_chain_cert(ctx,x509) \
1327
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
1328
# define SSL_CTX_add1_chain_cert(ctx,x509) \
1329
        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
1330 1331 1332 1333 1334 1335 1336
# define SSL_CTX_get0_chain_certs(ctx,px509) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
# define SSL_CTX_clear_chain_certs(ctx) \
        SSL_CTX_set0_chain(ctx,NULL)
# define SSL_CTX_build_cert_chain(ctx, flags) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
# define SSL_CTX_select_current_cert(ctx,x509) \
1337
        SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
1338 1339 1340
# define SSL_CTX_set_current_cert(ctx, op) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
# define SSL_CTX_set0_verify_cert_store(ctx,st) \
1341
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
1342
# define SSL_CTX_set1_verify_cert_store(ctx,st) \
1343
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
1344
# define SSL_CTX_set0_chain_cert_store(ctx,st) \
1345
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
1346
# define SSL_CTX_set1_chain_cert_store(ctx,st) \
1347
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
1348
# define SSL_set0_chain(ctx,sk) \
1349
        SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
1350
# define SSL_set1_chain(ctx,sk) \
1351
        SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
1352
# define SSL_add0_chain_cert(ctx,x509) \
1353
        SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
1354
# define SSL_add1_chain_cert(ctx,x509) \
1355
        SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
1356 1357 1358 1359 1360 1361 1362
# define SSL_get0_chain_certs(ctx,px509) \
        SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
# define SSL_clear_chain_certs(ctx) \
        SSL_set0_chain(ctx,NULL)
# define SSL_build_cert_chain(s, flags) \
        SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
# define SSL_select_current_cert(ctx,x509) \
1363
        SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
1364 1365 1366
# define SSL_set_current_cert(ctx,op) \
        SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
# define SSL_set0_verify_cert_store(s,st) \
1367
        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
1368
# define SSL_set1_verify_cert_store(s,st) \
1369
        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
1370
# define SSL_set0_chain_cert_store(s,st) \
1371
        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st))
1372
# define SSL_set1_chain_cert_store(s,st) \
1373
        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st))
1374
# define SSL_get1_groups(ctx, s) \
1375
        SSL_ctrl(ctx,SSL_CTRL_GET_GROUPS,0,(char *)(s))
1376
# define SSL_CTX_set1_groups(ctx, glist, glistlen) \
1377
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist))
1378
# define SSL_CTX_set1_groups_list(ctx, s) \
1379
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))
1380
# define SSL_set1_groups(ctx, glist, glistlen) \
1381
        SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist))
1382
# define SSL_set1_groups_list(ctx, s) \
1383
        SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))
1384 1385
# define SSL_get_shared_group(s, n) \
        SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL)
1386
# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \
1387
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
1388
# define SSL_CTX_set1_sigalgs_list(ctx, s) \
1389
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s))
1390
# define SSL_set1_sigalgs(ctx, slist, slistlen) \
1391
        SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist))
1392
# define SSL_set1_sigalgs_list(ctx, s) \
1393
        SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s))
1394
# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \
1395
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist))
1396
# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \
1397
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s))
1398
# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \
1399
        SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)(slist))
1400
# define SSL_set1_client_sigalgs_list(ctx, s) \
1401
        SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s))
1402
# define SSL_get0_certificate_types(s, clist) \
1403
        SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist))
1404
# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \
1405 1406
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \
                     (char *)(clist))
1407
# define SSL_set1_client_certificate_types(s, clist, clistlen) \
1408
        SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist))
1409 1410 1411 1412 1413 1414 1415 1416
# define SSL_get_peer_signature_nid(s, pn) \
        SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)
# define SSL_get_server_tmp_key(s, pk) \
        SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk)
# define SSL_get0_raw_cipherlist(s, plst) \
        SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst)
# define SSL_get0_ec_point_formats(s, plst) \
        SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst)
F
FdaSilvaYY 已提交
1417
# define SSL_CTX_set_min_proto_version(ctx, version) \
1418
        SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
F
FdaSilvaYY 已提交
1419
# define SSL_CTX_set_max_proto_version(ctx, version) \
1420
        SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
F
FdaSilvaYY 已提交
1421
# define SSL_CTX_get_min_proto_version(ctx) \
1422
        SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL)
F
FdaSilvaYY 已提交
1423
# define SSL_CTX_get_max_proto_version(ctx) \
1424
        SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL)
F
FdaSilvaYY 已提交
1425
# define SSL_set_min_proto_version(s, version) \
1426
        SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL)
F
FdaSilvaYY 已提交
1427
# define SSL_set_max_proto_version(s, version) \
1428
        SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL)
F
FdaSilvaYY 已提交
1429
# define SSL_get_min_proto_version(s) \
1430
        SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL)
F
FdaSilvaYY 已提交
1431
# define SSL_get_max_proto_version(s) \
1432
        SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL)
1433

1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450
/*
 * The following symbol names are old and obsolete. They are kept
 * for compatibility reasons only and should not be used anymore.
 */
# define SSL_CTRL_GET_CURVES           SSL_CTRL_GET_GROUPS
# define SSL_CTRL_SET_CURVES           SSL_CTRL_SET_GROUPS
# define SSL_CTRL_SET_CURVES_LIST      SSL_CTRL_SET_GROUPS_LIST
# define SSL_CTRL_GET_SHARED_CURVE     SSL_CTRL_GET_SHARED_GROUP

# define SSL_get1_curves               SSL_get1_groups
# define SSL_CTX_set1_curves           SSL_CTX_set1_groups
# define SSL_CTX_set1_curves_list      SSL_CTX_set1_groups_list
# define SSL_set1_curves               SSL_set1_groups
# define SSL_set1_curves_list          SSL_set1_groups_list
# define SSL_get_shared_curve          SSL_get_shared_group


F
FdaSilvaYY 已提交
1451
# if OPENSSL_API_COMPAT < 0x10100000L
1452
/* Provide some compatibility macros for removed functionality. */
F
FdaSilvaYY 已提交
1453 1454 1455 1456 1457 1458
#  define SSL_CTX_need_tmp_RSA(ctx)                0
#  define SSL_CTX_set_tmp_rsa(ctx,rsa)             1
#  define SSL_need_tmp_RSA(ssl)                    0
#  define SSL_set_tmp_rsa(ssl,rsa)                 1
#  define SSL_CTX_set_ecdh_auto(dummy, onoff)      ((onoff) != 0)
#  define SSL_set_ecdh_auto(dummy, onoff)          ((onoff) != 0)
1459
/*
V
Viktor Szakats 已提交
1460
 * We "pretend" to call the callback to avoid warnings about unused static
1461 1462
 * functions.
 */
F
FdaSilvaYY 已提交
1463 1464 1465
#  define SSL_CTX_set_tmp_rsa_callback(ctx, cb)    while(0) (cb)(NULL, 0, 0)
#  define SSL_set_tmp_rsa_callback(ssl, cb)        while(0) (cb)(NULL, 0, 0)
# endif
1466
__owur const BIO_METHOD *BIO_f_ssl(void);
M
Matt Caswell 已提交
1467 1468 1469 1470
__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from);
1471 1472
void BIO_ssl_shutdown(BIO *ssl_bio);

M
Matt Caswell 已提交
1473 1474
__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str);
__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
1475
int SSL_CTX_up_ref(SSL_CTX *ctx);
1476
void SSL_CTX_free(SSL_CTX *);
M
Matt Caswell 已提交
1477 1478 1479
__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx);
__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);
1480
void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *);
T
Todd Short 已提交
1481
void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *);
M
Matt Caswell 已提交
1482 1483
__owur int SSL_want(const SSL *s);
__owur int SSL_clear(SSL *s);
1484

1485
void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm);
1486

M
Matt Caswell 已提交
1487
__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s);
B
Benjamin Kaduk 已提交
1488
__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s);
1489
__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits);
1490
__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c);
M
Matt Caswell 已提交
1491
__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c);
1492 1493
__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
__owur const char *OPENSSL_cipher_name(const char *rfc_name);
1494
__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
P
Paul Yang 已提交
1495
__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c);
T
Todd Short 已提交
1496 1497
__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
1498
__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
T
Todd Short 已提交
1499
__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
M
Matt Caswell 已提交
1500 1501 1502 1503 1504

__owur int SSL_get_fd(const SSL *s);
__owur int SSL_get_rfd(const SSL *s);
__owur int SSL_get_wfd(const SSL *s);
__owur const char *SSL_get_cipher_list(const SSL *s, int n);
M
Matt Caswell 已提交
1505
__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size);
M
Matt Caswell 已提交
1506 1507
__owur int SSL_get_read_ahead(const SSL *s);
__owur int SSL_pending(const SSL *s);
M
Matt Caswell 已提交
1508
__owur int SSL_has_pending(const SSL *s);
1509
# ifndef OPENSSL_NO_SOCK
M
Matt Caswell 已提交
1510 1511 1512
__owur int SSL_set_fd(SSL *s, int fd);
__owur int SSL_set_rfd(SSL *s, int fd);
__owur int SSL_set_wfd(SSL *s, int fd);
1513
# endif
1514 1515
void SSL_set0_rbio(SSL *s, BIO *rbio);
void SSL_set0_wbio(SSL *s, BIO *wbio);
1516
void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio);
M
Matt Caswell 已提交
1517 1518 1519
__owur BIO *SSL_get_rbio(const SSL *s);
__owur BIO *SSL_get_wbio(const SSL *s);
__owur int SSL_set_cipher_list(SSL *s, const char *str);
1520 1521
__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str);
__owur int SSL_set_ciphersuites(SSL *s, const char *str);
1522
void SSL_set_read_ahead(SSL *s, int yes);
M
Matt Caswell 已提交
1523 1524
__owur int SSL_get_verify_mode(const SSL *s);
__owur int SSL_get_verify_depth(const SSL *s);
R
Rich Salz 已提交
1525 1526
__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s);
void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback);
1527 1528 1529
void SSL_set_verify_depth(SSL *s, int depth);
void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg);
# ifndef OPENSSL_NO_RSA
M
Matt Caswell 已提交
1530
__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
F
FdaSilvaYY 已提交
1531 1532
__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d,
                                      long len);
D
Dr. Stephen Henson 已提交
1533
# endif
M
Matt Caswell 已提交
1534 1535
__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d,
F
FdaSilvaYY 已提交
1536
                                   long len);
M
Matt Caswell 已提交
1537 1538
__owur int SSL_use_certificate(SSL *ssl, X509 *x);
__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
T
Todd Short 已提交
1539 1540
__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey,
                                STACK_OF(X509) *chain, int override);
1541

1542 1543

/* serverinfo file format versions */
1544 1545
# define SSL_SERVERINFOV1   1
# define SSL_SERVERINFOV2   2
1546

1547
/* Set serverinfo data for the current active cert. */
M
Matt Caswell 已提交
1548
__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
F
FdaSilvaYY 已提交
1549
                                  size_t serverinfo_length);
1550 1551 1552
__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version,
                                     const unsigned char *serverinfo,
                                     size_t serverinfo_length);
M
Matt Caswell 已提交
1553
__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
B
Ben Laurie 已提交
1554

D
Dr. Stephen Henson 已提交
1555
#ifndef OPENSSL_NO_RSA
M
Matt Caswell 已提交
1556
__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
D
Dr. Stephen Henson 已提交
1557 1558
#endif

M
Matt Caswell 已提交
1559 1560
__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type);
D
Dr. Stephen Henson 已提交
1561 1562

#ifndef OPENSSL_NO_RSA
F
FdaSilvaYY 已提交
1563 1564
__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file,
                                          int type);
D
Dr. Stephen Henson 已提交
1565
#endif
F
FdaSilvaYY 已提交
1566 1567 1568 1569
__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file,
                                       int type);
__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file,
                                        int type);
1570
/* PEM type */
M
Matt Caswell 已提交
1571
__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);
1572
__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file);
M
Matt Caswell 已提交
1573 1574
__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
F
FdaSilvaYY 已提交
1575
                                               const char *file);
1576 1577
int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,
                                       const char *dir);
1578

F
FdaSilvaYY 已提交
1579 1580
# if OPENSSL_API_COMPAT < 0x10100000L
#  define SSL_load_error_strings() \
1581 1582
    OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
                     | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
F
FdaSilvaYY 已提交
1583
# endif
M
Matt Caswell 已提交
1584

M
Matt Caswell 已提交
1585 1586 1587 1588 1589 1590 1591 1592
__owur const char *SSL_state_string(const SSL *s);
__owur const char *SSL_rstate_string(const SSL *s);
__owur const char *SSL_state_string_long(const SSL *s);
__owur const char *SSL_rstate_string_long(const SSL *s);
__owur long SSL_SESSION_get_time(const SSL_SESSION *s);
__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t);
__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s);
__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
1593
__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s);
1594 1595
__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version);

L
Lyon Chen 已提交
1596
__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s);
1597 1598 1599 1600 1601 1602 1603
__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname);
void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s,
                                    const unsigned char **alpn,
                                    size_t *len);
__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s,
                                          const unsigned char *alpn,
                                          size_t len);
R
Rich Salz 已提交
1604
__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s);
M
Matt Caswell 已提交
1605
__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher);
M
Matt Caswell 已提交
1606 1607
__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s);
__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s);
1608
void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick,
F
FdaSilvaYY 已提交
1609
                             size_t *len);
1610
__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s);
1611 1612
__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s,
                                          uint32_t max_early_data);
M
Matt Caswell 已提交
1613
__owur int SSL_copy_session_id(SSL *to, const SSL *from);
M
Matt Caswell 已提交
1614
__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s);
F
FdaSilvaYY 已提交
1615 1616 1617
__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s,
                                       const unsigned char *sid_ctx,
                                       unsigned int sid_ctx_len);
1618 1619
__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid,
                               unsigned int sid_len);
1620
__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s);
1621

M
Matt Caswell 已提交
1622
__owur SSL_SESSION *SSL_SESSION_new(void);
M
Matt Caswell 已提交
1623
__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src);
B
Ben Laurie 已提交
1624
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
1625
                                        unsigned int *len);
1626
const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
F
FdaSilvaYY 已提交
1627
                                                 unsigned int *len);
M
Matt Caswell 已提交
1628
__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);
1629 1630 1631 1632 1633
# ifndef OPENSSL_NO_STDIO
int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
# endif
int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x);
1634
int SSL_SESSION_up_ref(SSL_SESSION *ses);
1635
void SSL_SESSION_free(SSL_SESSION *ses);
M
Matt Caswell 已提交
1636 1637
__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);
__owur int SSL_set_session(SSL *to, SSL_SESSION *session);
F
FdaSilvaYY 已提交
1638 1639 1640 1641 1642 1643 1644
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session);
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session);
__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb);
__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb);
__owur int SSL_has_matching_session_id(const SSL *s,
                                       const unsigned char *id,
                                       unsigned int id_len);
1645 1646 1647 1648
SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
                             long length);

# ifdef HEADER_X509_H
M
Matt Caswell 已提交
1649
__owur X509 *SSL_get_peer_certificate(const SSL *s);
1650
# endif
1651

M
Matt Caswell 已提交
1652
__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);
1653

M
Matt Caswell 已提交
1654 1655
__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
R
Rich Salz 已提交
1656 1657
__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx);
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback);
1658 1659 1660 1661 1662 1663 1664
void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
                                      int (*cb) (X509_STORE_CTX *, void *),
                                      void *arg);
void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),
                         void *arg);
# ifndef OPENSSL_NO_RSA
M
Matt Caswell 已提交
1665 1666
__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d,
F
FdaSilvaYY 已提交
1667
                                          long len);
D
Dr. Stephen Henson 已提交
1668
# endif
M
Matt Caswell 已提交
1669 1670
__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx,
F
FdaSilvaYY 已提交
1671
                                       const unsigned char *d, long len);
M
Matt Caswell 已提交
1672 1673
__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len,
F
FdaSilvaYY 已提交
1674
                                        const unsigned char *d);
T
Todd Short 已提交
1675 1676
__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey,
                                    STACK_OF(X509) *chain, int override);
1677

1678 1679
void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
1680 1681
pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx);
void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx);
M
Matt Caswell 已提交
1682 1683
void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb);
void SSL_set_default_passwd_cb_userdata(SSL *s, void *u);
1684 1685
pem_password_cb *SSL_get_default_passwd_cb(SSL *s);
void *SSL_get_default_passwd_cb_userdata(SSL *s);
1686

M
Matt Caswell 已提交
1687 1688
__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx);
__owur int SSL_check_private_key(const SSL *ctx);
1689

F
FdaSilvaYY 已提交
1690 1691 1692
__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx,
                                          const unsigned char *sid_ctx,
                                          unsigned int sid_ctx_len);
1693

1694
SSL *SSL_new(SSL_CTX *ctx);
1695
int SSL_up_ref(SSL *s);
R
Rich Salz 已提交
1696
int SSL_is_dtls(const SSL *s);
M
Matt Caswell 已提交
1697
__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
F
FdaSilvaYY 已提交
1698
                                      unsigned int sid_ctx_len);
1699

F
FdaSilvaYY 已提交
1700 1701 1702 1703
__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose);
__owur int SSL_set_purpose(SSL *ssl, int purpose);
__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust);
__owur int SSL_set_trust(SSL *ssl, int trust);
1704

1705 1706
__owur int SSL_set1_host(SSL *s, const char *hostname);
__owur int SSL_add1_host(SSL *s, const char *hostname);
1707
__owur const char *SSL_get0_peername(SSL *s);
1708 1709 1710 1711 1712 1713 1714
void SSL_set_hostflags(SSL *s, unsigned int flags);

__owur int SSL_CTX_dane_enable(SSL_CTX *ctx);
__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md,
                                  uint8_t mtype, uint8_t ord);
__owur int SSL_dane_enable(SSL *s, const char *basedomain);
__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
1715
                             uint8_t mtype, unsigned const char *data, size_t dlen);
1716 1717 1718 1719 1720 1721 1722 1723
__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki);
__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
                              uint8_t *mtype, unsigned const char **data,
                              size_t *dlen);
/*
 * Bridge opacity barrier between libcrypt and libssl, also needed to support
 * offline testing in test/danetest.c
 */
1724
SSL_DANE *SSL_get0_dane(SSL *ssl);
1725 1726 1727 1728 1729 1730 1731
/*
 * DANE flags
 */
unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags);
unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags);
unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags);
unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags);
1732

M
Matt Caswell 已提交
1733 1734
__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);
__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);
D
Dr. Stephen Henson 已提交
1735

M
Matt Caswell 已提交
1736 1737
__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);
__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);
1738

1739 1740 1741
# ifndef OPENSSL_NO_SRP
int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name);
int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password);
B
Ben Laurie 已提交
1742 1743
int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength);
int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx,
1744
                                        char *(*cb) (SSL *, void *));
B
Ben Laurie 已提交
1745
int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx,
1746
                                          int (*cb) (SSL *, void *));
B
Ben Laurie 已提交
1747
int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx,
1748
                                      int (*cb) (SSL *, int *, void *));
B
Ben Laurie 已提交
1749 1750 1751
int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg);

int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g,
1752
                             BIGNUM *sa, BIGNUM *v, char *info);
B
Ben Laurie 已提交
1753
int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass,
1754
                                const char *grp);
B
Ben Laurie 已提交
1755

M
Matt Caswell 已提交
1756 1757
__owur BIGNUM *SSL_get_srp_g(SSL *s);
__owur BIGNUM *SSL_get_srp_N(SSL *s);
B
Ben Laurie 已提交
1758

M
Matt Caswell 已提交
1759 1760
__owur char *SSL_get_srp_username(SSL *s);
__owur char *SSL_get_srp_userinfo(SSL *s);
1761
# endif
B
Ben Laurie 已提交
1762

B
Benjamin Kaduk 已提交
1763
/*
1764
 * ClientHello callback and helpers.
B
Benjamin Kaduk 已提交
1765
 */
1766 1767 1768 1769 1770

# define SSL_CLIENT_HELLO_SUCCESS 1
# define SSL_CLIENT_HELLO_ERROR   0
# define SSL_CLIENT_HELLO_RETRY   (-1)

1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783
typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg);
void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
                                 void *arg);
int SSL_client_hello_isv2(SSL *s);
unsigned int SSL_client_hello_get0_legacy_version(SSL *s);
size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out);
size_t SSL_client_hello_get0_compression_methods(SSL *s,
                                                 const unsigned char **out);
int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen);
int SSL_client_hello_get0_ext(SSL *s, unsigned int type,
                              const unsigned char **out, size_t *outlen);
B
Benjamin Kaduk 已提交
1784

1785 1786
void SSL_certs_clear(SSL *s);
void SSL_free(SSL *ssl);
1787 1788
# ifdef OSSL_ASYNC_FD
/*
F
FdaSilvaYY 已提交
1789
 * Windows application developer has to include windows.h to use these.
1790
 */
M
Matt Caswell 已提交
1791
__owur int SSL_waiting_for_async(SSL *s);
M
Matt Caswell 已提交
1792 1793 1794 1795
__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds);
__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd,
                                     size_t *numaddfds, OSSL_ASYNC_FD *delfd,
                                     size_t *numdelfds);
1796
# endif
M
Matt Caswell 已提交
1797
__owur int SSL_accept(SSL *ssl);
M
Matt Caswell 已提交
1798
__owur int SSL_stateless(SSL *s);
M
Matt Caswell 已提交
1799 1800
__owur int SSL_connect(SSL *ssl);
__owur int SSL_read(SSL *ssl, void *buf, int num);
1801
__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
1802

1803 1804 1805
# define SSL_READ_EARLY_DATA_ERROR   0
# define SSL_READ_EARLY_DATA_SUCCESS 1
# define SSL_READ_EARLY_DATA_FINISH  2
1806

1807 1808
__owur int SSL_read_early_data(SSL *s, void *buf, size_t num,
                               size_t *readbytes);
M
Matt Caswell 已提交
1809
__owur int SSL_peek(SSL *ssl, void *buf, int num);
1810
__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
M
Matt Caswell 已提交
1811
__owur int SSL_write(SSL *ssl, const void *buf, int num);
M
Matt Caswell 已提交
1812
__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
1813 1814
__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num,
                                size_t *written);
1815 1816 1817 1818 1819
long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);
long SSL_callback_ctrl(SSL *, int, void (*)(void));
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));

1820 1821 1822 1823
# define SSL_EARLY_DATA_NOT_SENT    0
# define SSL_EARLY_DATA_REJECTED    1
# define SSL_EARLY_DATA_ACCEPTED    2

1824
__owur int SSL_get_early_data_status(const SSL *s);
1825

M
Matt Caswell 已提交
1826 1827
__owur int SSL_get_error(const SSL *s, int ret_code);
__owur const char *SSL_get_version(const SSL *s);
1828 1829

/* This sets the 'default' SSL version that SSL_new() will create */
M
Matt Caswell 已提交
1830
__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
1831

1832
# ifndef OPENSSL_NO_SSL3_METHOD
1833
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */
F
FdaSilvaYY 已提交
1834 1835
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void))
1836
# endif
1837

1838 1839
#define SSLv23_method           TLS_method
#define SSLv23_server_method    TLS_server_method
1840
#define SSLv23_client_method    TLS_client_method
1841

1842 1843 1844
/* Negotiate highest available SSL/TLS version */
__owur const SSL_METHOD *TLS_method(void);
__owur const SSL_METHOD *TLS_server_method(void);
1845
__owur const SSL_METHOD *TLS_client_method(void);
1846

K
Kurt Roeckx 已提交
1847
# ifndef OPENSSL_NO_TLS1_METHOD
1848
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */
F
FdaSilvaYY 已提交
1849 1850
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void))
K
Kurt Roeckx 已提交
1851
# endif
1852

K
Kurt Roeckx 已提交
1853
# ifndef OPENSSL_NO_TLS1_1_METHOD
1854
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */
F
FdaSilvaYY 已提交
1855 1856
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void))
K
Kurt Roeckx 已提交
1857
# endif
1858

K
Kurt Roeckx 已提交
1859
# ifndef OPENSSL_NO_TLS1_2_METHOD
1860
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
F
FdaSilvaYY 已提交
1861 1862
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void))
K
Kurt Roeckx 已提交
1863
# endif
1864

K
Kurt Roeckx 已提交
1865
# ifndef OPENSSL_NO_DTLS1_METHOD
1866
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */
F
FdaSilvaYY 已提交
1867 1868
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void))
K
Kurt Roeckx 已提交
1869
# endif
B
Ben Laurie 已提交
1870

K
Kurt Roeckx 已提交
1871
# ifndef OPENSSL_NO_DTLS1_2_METHOD
F
FdaSilvaYY 已提交
1872 1873 1874 1875 1876
/* DTLSv1.2 */
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void))
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void))
# endif
1877

M
Matt Caswell 已提交
1878 1879 1880
__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */
__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */
__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */
D
Dr. Stephen Henson 已提交
1881

D
David Woodhouse 已提交
1882 1883
__owur size_t DTLS_get_data_mtu(const SSL *s);

M
Matt Caswell 已提交
1884
__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
K
Kazuki Yamaguchi 已提交
1885
__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
1886
__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s);
M
Matt Caswell 已提交
1887
__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s);
1888

M
Matt Caswell 已提交
1889
__owur int SSL_do_handshake(SSL *s);
1890 1891
int SSL_key_update(SSL *s, int updatetype);
int SSL_get_key_update_type(SSL *s);
1892
int SSL_renegotiate(SSL *s);
1893
int SSL_renegotiate_abbreviated(SSL *s);
M
Matt Caswell 已提交
1894
__owur int SSL_renegotiate_pending(SSL *s);
1895
int SSL_shutdown(SSL *s);
1896 1897
__owur int SSL_verify_client_post_handshake(SSL *s);
void SSL_force_post_handshake_auth(SSL *s);
1898

M
Matt Caswell 已提交
1899 1900 1901 1902 1903 1904 1905
__owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
__owur const SSL_METHOD *SSL_get_ssl_method(SSL *s);
__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
__owur const char *SSL_alert_type_string_long(int value);
__owur const char *SSL_alert_type_string(int value);
__owur const char *SSL_alert_desc_string_long(int value);
__owur const char *SSL_alert_desc_string(int value);
1906

1907 1908 1909 1910 1911 1912 1913 1914
void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s);
__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx);
__owur int SSL_add1_CA_list(SSL *ssl, const X509 *x);
__owur int SSL_CTX_add1_CA_list(SSL_CTX *ctx, const X509 *x);
__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s);

1915 1916
void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
M
Matt Caswell 已提交
1917 1918 1919 1920
__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);
__owur int SSL_add_client_CA(SSL *ssl, X509 *x);
__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);
1921 1922 1923 1924

void SSL_set_connect_state(SSL *s);
void SSL_set_accept_state(SSL *s);

M
Matt Caswell 已提交
1925
__owur long SSL_get_default_timeout(const SSL *s);
1926

F
FdaSilvaYY 已提交
1927 1928 1929
# if OPENSSL_API_COMPAT < 0x10100000L
#  define SSL_library_init() OPENSSL_init_ssl(0, NULL)
# endif
1930

M
Matt Caswell 已提交
1931
__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size);
D
Dr. Stephen Henson 已提交
1932
__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk);
1933

M
Matt Caswell 已提交
1934
__owur SSL *SSL_dup(SSL *ssl);
1935

M
Matt Caswell 已提交
1936
__owur X509 *SSL_get_certificate(const SSL *ssl);
1937 1938
/*
 * EVP_PKEY
F
FdaSilvaYY 已提交
1939 1940
 */
struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);
1941

M
Matt Caswell 已提交
1942 1943
__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
1944

1945
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
M
Matt Caswell 已提交
1946
__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
1947
void SSL_set_quiet_shutdown(SSL *ssl, int mode);
M
Matt Caswell 已提交
1948
__owur int SSL_get_quiet_shutdown(const SSL *ssl);
1949
void SSL_set_shutdown(SSL *ssl, int mode);
M
Matt Caswell 已提交
1950 1951
__owur int SSL_get_shutdown(const SSL *ssl);
__owur int SSL_version(const SSL *ssl);
1952
__owur int SSL_client_version(const SSL *s);
M
Matt Caswell 已提交
1953
__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
1954 1955
__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
M
Matt Caswell 已提交
1956
__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
F
FdaSilvaYY 已提交
1957
                                         const char *CApath);
1958
# define SSL_get0_session SSL_get_session/* just peek at pointer */
M
Matt Caswell 已提交
1959 1960 1961
__owur SSL_SESSION *SSL_get_session(const SSL *ssl);
__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
1962
SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx);
B
Ben Laurie 已提交
1963
void SSL_set_info_callback(SSL *ssl,
1964 1965 1966
                           void (*cb) (const SSL *ssl, int type, int val));
void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type,
                                               int val);
M
Matt Caswell 已提交
1967
__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);
1968

1969
void SSL_set_verify_result(SSL *ssl, long v);
M
Matt Caswell 已提交
1970
__owur long SSL_get_verify_result(const SSL *ssl);
1971
__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s);
1972

1973 1974 1975 1976
__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out,
                                    size_t outlen);
__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out,
                                    size_t outlen);
1977
__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess,
1978
                                         unsigned char *out, size_t outlen);
1979 1980
__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess,
                                       const unsigned char *in, size_t len);
1981
uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess);
1982

1983
#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \
T
Todd Short 已提交
1984
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef)
M
Matt Caswell 已提交
1985
__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data);
1986
void *SSL_get_ex_data(const SSL *ssl, int idx);
1987
#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \
T
Todd Short 已提交
1988
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef)
M
Matt Caswell 已提交
1989
__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data);
1990
void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx);
1991
#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \
T
Todd Short 已提交
1992
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef)
M
Matt Caswell 已提交
1993
__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
1994 1995
void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);

M
Matt Caswell 已提交
1996
__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void);
1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025

# define SSL_CTX_sess_set_cache_size(ctx,t) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)
# define SSL_CTX_sess_get_cache_size(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)
# define SSL_CTX_set_session_cache_mode(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)
# define SSL_CTX_get_session_cache_mode(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)

# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)
# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)
# define SSL_CTX_get_read_ahead(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)
# define SSL_CTX_set_read_ahead(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)
# define SSL_CTX_get_max_cert_list(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
# define SSL_CTX_set_max_cert_list(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)
# define SSL_get_max_cert_list(ssl) \
        SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)
# define SSL_set_max_cert_list(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)

# define SSL_CTX_set_max_send_fragment(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
# define SSL_set_max_send_fragment(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)
2026 2027 2028 2029 2030 2031 2032 2033
# define SSL_CTX_set_split_send_fragment(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
# define SSL_set_split_send_fragment(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL)
# define SSL_CTX_set_max_pipelines(ctx,m) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
# define SSL_set_max_pipelines(ssl,m) \
        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL)
2034

2035 2036 2037
void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len);
void SSL_set_default_read_buffer_len(SSL *s, size_t len);

2038
# ifndef OPENSSL_NO_DH
F
FdaSilvaYY 已提交
2039
/* NB: the |keylength| is only applicable when is_export is true */
2040
void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
2041 2042
                                 DH *(*dh) (SSL *ssl, int is_export,
                                            int keylength));
2043
void SSL_set_tmp_dh_callback(SSL *ssl,
2044 2045 2046
                             DH *(*dh) (SSL *ssl, int is_export,
                                        int keylength));
# endif
2047

M
Matt Caswell 已提交
2048 2049 2050
__owur const COMP_METHOD *SSL_get_current_compression(SSL *s);
__owur const COMP_METHOD *SSL_get_current_expansion(SSL *s);
__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp);
M
Matt Caswell 已提交
2051 2052
__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp);
__owur int SSL_COMP_get_id(const SSL_COMP *comp);
M
Matt Caswell 已提交
2053
STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
M
Matt Caswell 已提交
2054
__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)
F
FdaSilvaYY 已提交
2055 2056 2057 2058
                                                             *meths);
# if OPENSSL_API_COMPAT < 0x10100000L
#  define SSL_COMP_free_compression_methods() while(0) continue
# endif
M
Matt Caswell 已提交
2059
__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
2060

2061
const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
2062 2063
int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
2064 2065 2066
int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
                             int isv2format, STACK_OF(SSL_CIPHER) **sk,
                             STACK_OF(SSL_CIPHER) **scsvs);
2067

D
Dr. Stephen Henson 已提交
2068
/* TLS extensions functions */
M
Matt Caswell 已提交
2069
__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);
D
Dr. Stephen Henson 已提交
2070

F
FdaSilvaYY 已提交
2071 2072 2073
__owur int SSL_set_session_ticket_ext_cb(SSL *s,
                                         tls_session_ticket_ext_cb_fn cb,
                                         void *arg);
D
Dr. Stephen Henson 已提交
2074 2075

/* Pre-shared secret session resumption functions */
M
Matt Caswell 已提交
2076
__owur int SSL_set_session_secret_cb(SSL *s,
F
FdaSilvaYY 已提交
2077 2078
                                     tls_session_secret_cb_fn session_secret_cb,
                                     void *arg);
D
Dr. Stephen Henson 已提交
2079

2080
void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
2081 2082 2083
                                                int (*cb) (SSL *ssl,
                                                           int
                                                           is_forward_secure));
2084 2085

void SSL_set_not_resumable_session_callback(SSL *ssl,
2086
                                            int (*cb) (SSL *ssl,
F
FdaSilvaYY 已提交
2087
                                                       int is_forward_secure));
T
Todd Short 已提交
2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102

void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
                                         size_t (*cb) (SSL *ssl, int type,
                                                       size_t len, void *arg));
void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg);
void *SSL_CTX_get_record_padding_callback_arg(SSL_CTX *ctx);
int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size);

void SSL_set_record_padding_callback(SSL *ssl,
                                    size_t (*cb) (SSL *ssl, int type,
                                                  size_t len, void *arg));
void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg);
void *SSL_get_record_padding_callback_arg(SSL *ssl);
int SSL_set_block_padding(SSL *ssl, size_t block_size);

2103 2104 2105 2106 2107
int SSL_set_num_tickets(SSL *s, size_t num_tickets);
size_t SSL_get_num_tickets(SSL *s);
int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets);
size_t SSL_CTX_get_num_tickets(SSL_CTX *ctx);

2108 2109 2110
# if OPENSSL_API_COMPAT < 0x10100000L
#  define SSL_cache_hit(s) SSL_session_reused(s)
# endif
2111

2112
__owur int SSL_session_reused(SSL *s);
2113
__owur int SSL_is_server(const SSL *s);
D
Dr. Stephen Henson 已提交
2114

M
Matt Caswell 已提交
2115
__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void);
D
Dr. Stephen Henson 已提交
2116
int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
2117 2118
void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
F
FdaSilvaYY 已提交
2119 2120
__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx,
                                             unsigned int flags);
M
Matt Caswell 已提交
2121
__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);
2122 2123 2124 2125

void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);

M
Matt Caswell 已提交
2126 2127 2128
__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
2129

2130 2131 2132 2133
void SSL_add_ssl_module(void);
int SSL_config(SSL *s, const char *name);
int SSL_CTX_config(SSL_CTX *ctx, const char *name);

2134
# ifndef OPENSSL_NO_SSL_TRACE
2135
void SSL_trace(int write_p, int version, int content_type,
2136 2137
               const void *buf, size_t len, SSL *ssl, void *arg);
# endif
2138

M
Matt Caswell 已提交
2139
# ifndef OPENSSL_NO_SOCK
2140
int DTLSv1_listen(SSL *s, BIO_ADDR *client);
M
Matt Caswell 已提交
2141
# endif
2142

2143 2144
# ifndef OPENSSL_NO_CT

2145 2146 2147 2148 2149 2150
/*
 * A callback for verifying that the received SCTs are sufficient.
 * Expected to return 1 if they are sufficient, otherwise 0.
 * May return a negative integer if an error occurs.
 * A connection should be aborted if the SCTs are deemed insufficient.
 */
F
FdaSilvaYY 已提交
2151 2152
typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
                                    const STACK_OF(SCT) *scts, void *arg);
2153

2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165
/*
 * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate
 * the received SCTs.
 * If the callback returns a non-positive result, the connection is terminated.
 * Call this function before beginning a handshake.
 * If a NULL |callback| is provided, SCT validation is disabled.
 * |arg| is arbitrary userdata that will be passed to the callback whenever it
 * is invoked. Ownership of |arg| remains with the caller.
 *
 * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response
 *       will be requested.
 */
2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
                                   void *arg);
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
                                       ssl_ct_validation_cb callback,
                                       void *arg);
#define SSL_disable_ct(s) \
        ((void) SSL_set_validation_callback((s), NULL, NULL))
#define SSL_CTX_disable_ct(ctx) \
        ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL))

/*
 * The validation type enumerates the available behaviours of the built-in SSL
 * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct().
 * The underlying callback is a static function in libssl.
 */
enum {
    SSL_CT_VALIDATION_PERMISSIVE = 0,
    SSL_CT_VALIDATION_STRICT
};

/*
 * Enable CT by setting up a callback that implements one of the built-in
 * validation variants.  The SSL_CT_VALIDATION_PERMISSIVE variant always
 * continues the handshake, the application can make appropriate decisions at
 * handshake completion.  The SSL_CT_VALIDATION_STRICT variant requires at
 * least one valid SCT, or else handshake termination will be requested.  The
 * handshake may continue anyway if SSL_VERIFY_NONE is in effect.
 */
int SSL_enable_ct(SSL *s, int validation_mode);
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);

2197
/*
2198
 * Report whether a non-NULL callback is enabled.
2199
 */
2200 2201
int SSL_ct_is_enabled(const SSL *s);
int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx);
2202 2203 2204 2205

/* Gets the SCTs received from a connection */
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);

R
Rob Percival 已提交
2206 2207 2208 2209 2210 2211 2212
/*
 * Loads the CT log list from the default location.
 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
 * the log information loaded from this file will be appended to the
 * CTLOG_STORE.
 * Returns 1 on success, 0 otherwise.
 */
2213
int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx);
R
Rob Percival 已提交
2214 2215 2216 2217 2218 2219 2220 2221

/*
 * Loads the CT log list from the specified file path.
 * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
 * the log information loaded from this file will be appended to the
 * CTLOG_STORE.
 * Returns 1 on success, 0 otherwise.
 */
2222 2223
int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path);

R
Rob Percival 已提交
2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238
/*
 * Sets the CT log list used by all SSL connections created from this SSL_CTX.
 * Ownership of the CTLOG_STORE is transferred to the SSL_CTX.
 */
void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs);

/*
 * Gets the CT log list used by all SSL connections created from this SSL_CTX.
 * This will be NULL unless one of the following functions has been called:
 * - SSL_CTX_set_default_ctlog_list_file
 * - SSL_CTX_set_ctlog_list_file
 * - SSL_CTX_set_ctlog_store
 */
const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx);

2239 2240
# endif /* OPENSSL_NO_CT */

D
Dr. Stephen Henson 已提交
2241 2242
/* What the "other" parameter contains in security callback */
/* Mask for type */
2243 2244 2245 2246 2247 2248 2249 2250
# define SSL_SECOP_OTHER_TYPE    0xffff0000
# define SSL_SECOP_OTHER_NONE    0
# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
# define SSL_SECOP_OTHER_CURVE   (2 << 16)
# define SSL_SECOP_OTHER_DH      (3 << 16)
# define SSL_SECOP_OTHER_PKEY    (4 << 16)
# define SSL_SECOP_OTHER_SIGALG  (5 << 16)
# define SSL_SECOP_OTHER_CERT    (6 << 16)
D
Dr. Stephen Henson 已提交
2251 2252

/* Indicated operation refers to peer key or certificate */
2253
# define SSL_SECOP_PEER          0x1000
D
Dr. Stephen Henson 已提交
2254 2255 2256 2257 2258

/* Values for "op" parameter in security callback */

/* Called to filter ciphers */
/* Ciphers client supports */
2259
# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
D
Dr. Stephen Henson 已提交
2260
/* Cipher shared by client/server */
2261
# define SSL_SECOP_CIPHER_SHARED         (2 | SSL_SECOP_OTHER_CIPHER)
D
Dr. Stephen Henson 已提交
2262
/* Sanity check of cipher server selects */
2263
# define SSL_SECOP_CIPHER_CHECK          (3 | SSL_SECOP_OTHER_CIPHER)
D
Dr. Stephen Henson 已提交
2264
/* Curves supported by client */
2265
# define SSL_SECOP_CURVE_SUPPORTED       (4 | SSL_SECOP_OTHER_CURVE)
D
Dr. Stephen Henson 已提交
2266
/* Curves shared by client/server */
2267
# define SSL_SECOP_CURVE_SHARED          (5 | SSL_SECOP_OTHER_CURVE)
D
Dr. Stephen Henson 已提交
2268
/* Sanity check of curve server selects */
2269
# define SSL_SECOP_CURVE_CHECK           (6 | SSL_SECOP_OTHER_CURVE)
D
Dr. Stephen Henson 已提交
2270
/* Temporary DH key */
2271
# define SSL_SECOP_TMP_DH                (7 | SSL_SECOP_OTHER_PKEY)
D
Dr. Stephen Henson 已提交
2272
/* SSL/TLS version */
2273
# define SSL_SECOP_VERSION               (9 | SSL_SECOP_OTHER_NONE)
D
Dr. Stephen Henson 已提交
2274
/* Session tickets */
2275
# define SSL_SECOP_TICKET                (10 | SSL_SECOP_OTHER_NONE)
D
Dr. Stephen Henson 已提交
2276
/* Supported signature algorithms sent to peer */
2277
# define SSL_SECOP_SIGALG_SUPPORTED      (11 | SSL_SECOP_OTHER_SIGALG)
D
Dr. Stephen Henson 已提交
2278
/* Shared signature algorithm */
2279
# define SSL_SECOP_SIGALG_SHARED         (12 | SSL_SECOP_OTHER_SIGALG)
D
Dr. Stephen Henson 已提交
2280
/* Sanity check signature algorithm allowed */
2281
# define SSL_SECOP_SIGALG_CHECK          (13 | SSL_SECOP_OTHER_SIGALG)
D
Dr. Stephen Henson 已提交
2282
/* Used to get mask of supported public key signature algorithms */
2283
# define SSL_SECOP_SIGALG_MASK           (14 | SSL_SECOP_OTHER_SIGALG)
D
Dr. Stephen Henson 已提交
2284
/* Use to see if compression is allowed */
2285
# define SSL_SECOP_COMPRESSION           (15 | SSL_SECOP_OTHER_NONE)
D
Dr. Stephen Henson 已提交
2286
/* EE key in certificate */
2287
# define SSL_SECOP_EE_KEY                (16 | SSL_SECOP_OTHER_CERT)
D
Dr. Stephen Henson 已提交
2288
/* CA key in certificate */
2289
# define SSL_SECOP_CA_KEY                (17 | SSL_SECOP_OTHER_CERT)
D
Dr. Stephen Henson 已提交
2290
/* CA digest algorithm in certificate */
2291
# define SSL_SECOP_CA_MD                 (18 | SSL_SECOP_OTHER_CERT)
D
Dr. Stephen Henson 已提交
2292
/* Peer EE key in certificate */
2293
# define SSL_SECOP_PEER_EE_KEY           (SSL_SECOP_EE_KEY | SSL_SECOP_PEER)
D
Dr. Stephen Henson 已提交
2294
/* Peer CA key in certificate */
2295
# define SSL_SECOP_PEER_CA_KEY           (SSL_SECOP_CA_KEY | SSL_SECOP_PEER)
D
Dr. Stephen Henson 已提交
2296
/* Peer CA digest algorithm in certificate */
2297
# define SSL_SECOP_PEER_CA_MD            (SSL_SECOP_CA_MD | SSL_SECOP_PEER)
D
Dr. Stephen Henson 已提交
2298 2299

void SSL_set_security_level(SSL *s, int level);
M
Matt Caswell 已提交
2300
__owur int SSL_get_security_level(const SSL *s);
2301
void SSL_set_security_callback(SSL *s,
F
FdaSilvaYY 已提交
2302 2303 2304 2305 2306 2307 2308
                               int (*cb) (const SSL *s, const SSL_CTX *ctx,
                                          int op, int bits, int nid,
                                          void *other, void *ex));
int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
                                                const SSL_CTX *ctx, int op,
                                                int bits, int nid, void *other,
                                                void *ex);
D
Dr. Stephen Henson 已提交
2309
void SSL_set0_security_ex_data(SSL *s, void *ex);
M
Matt Caswell 已提交
2310
__owur void *SSL_get0_security_ex_data(const SSL *s);
D
Dr. Stephen Henson 已提交
2311 2312

void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
M
Matt Caswell 已提交
2313
__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx);
2314
void SSL_CTX_set_security_callback(SSL_CTX *ctx,
F
FdaSilvaYY 已提交
2315 2316 2317
                                   int (*cb) (const SSL *s, const SSL_CTX *ctx,
                                              int op, int bits, int nid,
                                              void *other, void *ex));
K
Kurt Roeckx 已提交
2318 2319
int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
                                                          const SSL_CTX *ctx,
2320 2321 2322 2323
                                                          int op, int bits,
                                                          int nid,
                                                          void *other,
                                                          void *ex);
D
Dr. Stephen Henson 已提交
2324
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
M
Matt Caswell 已提交
2325
__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);
D
Dr. Stephen Henson 已提交
2326

2327
/* OPENSSL_INIT flag 0x010000 reserved for internal use */
F
FdaSilvaYY 已提交
2328 2329
# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS    0x00100000L
# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L
2330

F
FdaSilvaYY 已提交
2331
# define OPENSSL_INIT_SSL_DEFAULT \
2332 2333
        (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)

2334
int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
2335

2336
# ifndef OPENSSL_NO_UNIT_TEST
M
Matt Caswell 已提交
2337
__owur const struct openssl_ssl_test_functions *SSL_test_functions(void);
2338
# endif
2339

2340 2341 2342
__owur int SSL_free_buffers(SSL *ssl);
__owur int SSL_alloc_buffers(SSL *ssl);

2343 2344 2345
/* Status codes passed to the decrypt session ticket callback. Some of these
 * are for internal use only and are never passed to the callback. */
typedef int SSL_TICKET_STATUS;
T
Todd Short 已提交
2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362

/* Support for ticket appdata */
/* fatal error, malloc failure */
# define SSL_TICKET_FATAL_ERR_MALLOC 0
/* fatal error, either from parsing or decrypting the ticket */
# define SSL_TICKET_FATAL_ERR_OTHER  1
/* No ticket present */
# define SSL_TICKET_NONE             2
/* Empty ticket present */
# define SSL_TICKET_EMPTY            3
/* the ticket couldn't be decrypted */
# define SSL_TICKET_NO_DECRYPT       4
/* a ticket was successfully decrypted */
# define SSL_TICKET_SUCCESS          5
/* same as above but the ticket needs to be renewed */
# define SSL_TICKET_SUCCESS_RENEW    6

2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376
/* Return codes for the decrypt session ticket callback */
typedef int SSL_TICKET_RETURN;

/* An error occurred */
#define SSL_TICKET_RETURN_ABORT             0
/* Do not use the ticket, do not send a renewed ticket to the client */
#define SSL_TICKET_RETURN_IGNORE            1
/* Do not use the ticket, send a renewed ticket to the client */
#define SSL_TICKET_RETURN_IGNORE_RENEW      2
/* Use the ticket, do not send a renewed ticket to the client */
#define SSL_TICKET_RETURN_USE               3
/* Use the ticket, send a renewed ticket to the client */
#define SSL_TICKET_RETURN_USE_RENEW         4

T
Todd Short 已提交
2377 2378 2379 2380
typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg);
typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss,
                                                               const unsigned char *keyname,
                                                               size_t keyname_length,
2381
                                                               SSL_TICKET_STATUS status,
T
Todd Short 已提交
2382 2383 2384 2385 2386 2387 2388 2389
                                                               void *arg);
int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
                                  SSL_CTX_generate_session_ticket_fn gen_cb,
                                  SSL_CTX_decrypt_session_ticket_fn dec_cb,
                                  void *arg);
int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len);
int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len);

2390 2391
extern const char SSL_version_str[];

2392 2393 2394 2395 2396
typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us);

void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb);


2397 2398 2399 2400 2401 2402 2403 2404
typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg);
void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
                                     SSL_allow_early_data_cb_fn cb,
                                     void *arg);
void SSL_set_allow_early_data_cb(SSL *s,
                                 SSL_allow_early_data_cb_fn cb,
                                 void *arg);

R
Rich Salz 已提交
2405
# ifdef  __cplusplus
2406
}
R
Rich Salz 已提交
2407
# endif
2408
#endif