diff options
Diffstat (limited to 'app/openssl/ssl/ssl.h')
| -rw-r--r-- | app/openssl/ssl/ssl.h | 449 | 
1 files changed, 391 insertions, 58 deletions
diff --git a/app/openssl/ssl/ssl.h b/app/openssl/ssl/ssl.h index 9cb2bf93..54b0eb6c 100644 --- a/app/openssl/ssl/ssl.h +++ b/app/openssl/ssl/ssl.h @@ -252,6 +252,7 @@ extern "C" {  #define SSL_TXT_kEECDH		"kEECDH"  #define SSL_TXT_kPSK            "kPSK"  #define SSL_TXT_kGOST		"kGOST" +#define SSL_TXT_kSRP		"kSRP"  #define	SSL_TXT_aRSA		"aRSA"  #define	SSL_TXT_aDSS		"aDSS" @@ -275,6 +276,7 @@ extern "C" {  #define SSL_TXT_ECDSA		"ECDSA"  #define SSL_TXT_KRB5      	"KRB5"  #define SSL_TXT_PSK             "PSK" +#define SSL_TXT_SRP		"SRP"  #define SSL_TXT_DES		"DES"  #define SSL_TXT_3DES		"3DES" @@ -285,6 +287,7 @@ extern "C" {  #define SSL_TXT_AES128		"AES128"  #define SSL_TXT_AES256		"AES256"  #define SSL_TXT_AES		"AES" +#define SSL_TXT_AES_GCM		"AESGCM"  #define SSL_TXT_CAMELLIA128	"CAMELLIA128"  #define SSL_TXT_CAMELLIA256	"CAMELLIA256"  #define SSL_TXT_CAMELLIA	"CAMELLIA" @@ -294,10 +297,14 @@ extern "C" {  #define SSL_TXT_SHA		"SHA" /* same as "SHA1" */  #define SSL_TXT_GOST94		"GOST94"   #define SSL_TXT_GOST89MAC		"GOST89MAC"  +#define SSL_TXT_SHA256		"SHA256" +#define SSL_TXT_SHA384		"SHA384"  #define SSL_TXT_SSLV2		"SSLv2"  #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_EXP		"EXP"  #define SSL_TXT_EXPORT		"EXPORT" @@ -356,9 +363,29 @@ extern "C" {   * in SSL_CTX. */  typedef struct ssl_st *ssl_crock_st;  typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; + +DECLARE_STACK_OF(SSL_CIPHER) + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st +       { +       const char *name; +       unsigned long id; +       } SRTP_PROTECTION_PROFILE; + +DECLARE_STACK_OF(SRTP_PROTECTION_PROFILE) + +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, SSL_CIPHER **cipher, void *arg); + + +#ifndef OPENSSL_NO_SSL_INTERN  /* used to hold info on the particular ciphers used */ -typedef struct ssl_cipher_st +struct ssl_cipher_st  	{  	int valid;  	const char *name;		/* text name */ @@ -375,15 +402,11 @@ typedef struct ssl_cipher_st  	unsigned long algorithm2;	/* Extra flags */  	int strength_bits;		/* Number of bits really used */  	int alg_bits;			/* Number of bits for algorithm */ -	} SSL_CIPHER; - -DECLARE_STACK_OF(SSL_CIPHER) +	}; -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, SSL_CIPHER **cipher, void *arg);  /* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ -typedef struct ssl_method_st +struct ssl_method_st  	{  	int version;  	int (*ssl_new)(SSL *s); @@ -416,7 +439,7 @@ typedef struct ssl_method_st  	int (*ssl_version)(void);  	long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));  	long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void)); -	} SSL_METHOD; +	};  /* Lets make this into an ASN.1 type structure as follows   * SSL_SESSION_ID ::= SEQUENCE { @@ -433,14 +456,17 @@ typedef struct ssl_method_st   *	Session_ID_context [ 4 ] EXPLICIT OCTET STRING,   -- the Session ID context   *	Verify_result [ 5 ] EXPLICIT INTEGER,   -- X509_V_... code for `Peer'   *	HostName [ 6 ] EXPLICIT OCTET STRING,   -- optional HostName from servername TLS extension  - *	ECPointFormatList [ 7 ] OCTET STRING,     -- optional EC point format list from TLS extension - *	PSK_identity_hint [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity hint - *	PSK_identity [ 9 ] EXPLICIT OCTET STRING -- optional PSK identity + *	PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint + *	PSK_identity [ 8 ] EXPLICIT OCTET STRING,  -- optional PSK identity + *	Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket + *	Ticket [10]             EXPLICIT OCTET STRING, -- session ticket (clients only) + *	Compression_meth [11]   EXPLICIT OCTET STRING, -- optional compression method + *	SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username   *	}   * Look in ssl/ssl_asn1.c for more details   * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).   */ -typedef struct ssl_session_st +struct ssl_session_st  	{  	int ssl_version;	/* what ssl version session info is  				 * being kept in here? */ @@ -467,6 +493,9 @@ typedef struct ssl_session_st  	char *psk_identity_hint;  	char *psk_identity;  #endif +	/* Used to indicate that session resumption is not allowed. +	 * Applications can also set this bit for a new session via +	 * not_resumable_session_cb to disable session caching and tickets. */  	int not_resumable;  	/* The cert is the certificate used to establish this connection */ @@ -509,11 +538,15 @@ typedef struct ssl_session_st  #endif /* OPENSSL_NO_EC */  	/* RFC4507 info */  	unsigned char *tlsext_tick;	/* Session ticket */ -	size_t	tlsext_ticklen;		/* Session ticket length */	 +	size_t tlsext_ticklen;		/* Session ticket length */  	long tlsext_tick_lifetime_hint;	/* Session lifetime hint in seconds */  #endif -	} SSL_SESSION; +#ifndef OPENSSL_NO_SRP +	char *srp_username; +#endif +	}; +#endif  #define SSL_OP_MICROSOFT_SESS_ID_BUG			0x00000001L  #define SSL_OP_NETSCAPE_CHALLENGE_BUG			0x00000002L @@ -522,21 +555,28 @@ typedef struct ssl_session_st  #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG		0x00000008L  #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG		0x00000010L  #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER		0x00000020L -#define SSL_OP_MSIE_SSLV2_RSA_PADDING			0x00000040L /* no effect since 0.9.7h and 0.9.8b */ +#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG			0x00000040L  #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG			0x00000080L  #define SSL_OP_TLS_D5_BUG				0x00000100L  #define SSL_OP_TLS_BLOCK_PADDING_BUG			0x00000200L -/* 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 SSL_OP_ALL. */ +/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ +#define SSL_OP_MSIE_SSLV2_RSA_PADDING			0x0 + +/* SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS is vestigial. Previously it disabled the + * insertion of empty records in CBC mode, but the empty records were commonly + * misinterpreted as EOF by other TLS stacks and so this was disabled by + * SSL_OP_ALL. + * + * This has been replaced by 1/n-1 record splitting, which is enabled by + * SSL_MODE_CBC_RECORD_SPLITTING in SSL_set_mode. This involves sending a + * one-byte record rather than an empty record and has much better + * compatibility. */  #define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800L /* added in 0.9.6e */  /* SSL_OP_ALL: various bug workarounds that should be rather harmless.   *             This used to be 0x000FFFFFL before 0.9.7. */ -#define SSL_OP_ALL					0x80000FFFL +#define SSL_OP_ALL					0x80000BFFL  /* DTLS options */  #define SSL_OP_NO_QUERY_MTU                 0x00001000L @@ -572,11 +612,17 @@ typedef struct ssl_session_st  #define SSL_OP_NO_SSLv2					0x01000000L  #define SSL_OP_NO_SSLv3					0x02000000L  #define SSL_OP_NO_TLSv1					0x04000000L +#define SSL_OP_NO_TLSv1_2				0x08000000L +#define SSL_OP_NO_TLSv1_1				0x10000000L +/* These next two were never actually used for anything since SSLeay + * zap so we have some more flags. + */  /* The next flag deliberately changes the ciphertest, this is a check   * for the PKCS#1 attack */ -#define SSL_OP_PKCS1_CHECK_1				0x08000000L -#define SSL_OP_PKCS1_CHECK_2				0x10000000L +#define SSL_OP_PKCS1_CHECK_1				0x0 +#define SSL_OP_PKCS1_CHECK_2				0x0 +  #define SSL_OP_NETSCAPE_CA_DN_BUG			0x20000000L  #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG		0x40000000L  /* Make server add server-hello extension from early version of @@ -602,13 +648,21 @@ typedef struct ssl_session_st   * TLS only.)  "Released" buffers are put onto a free-list in the context   * or just freed (depending on the context's setting for freelist_max_len). */  #define SSL_MODE_RELEASE_BUFFERS 0x00000010L -/* Use small read and write buffers: (a) lazy allocate read buffers for - * large incoming records, and (b) limit the size of outgoing records. */ -#define SSL_MODE_SMALL_BUFFERS 0x00000020L +/* Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +#define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L +#define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L  /* When set, clients may send application data before receipt of CCS   * and Finished.  This mode enables full-handshakes to 'complete' in   * one RTT. */ -#define SSL_MODE_HANDSHAKE_CUTTHROUGH 0x00000040L +#define SSL_MODE_HANDSHAKE_CUTTHROUGH 0x00000080L +/* When set, TLS 1.0 and SSLv3, multi-byte, CBC records will be split in two: + * the first record will contain a single byte and the second will contain the + * rest of the bytes. This effectively randomises the IV and prevents BEAST + * attacks. */ +#define SSL_MODE_CBC_RECORD_SPLITTING 0x00000100L  /* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,   * they cannot be used to clear bits. */ @@ -644,12 +698,53 @@ typedef struct ssl_session_st  #define SSL_get_secure_renegotiation_support(ssl) \  	SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) +#ifndef OPENSSL_NO_HEARTBEATS +#define SSL_heartbeat(ssl) \ +        SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) +#endif +  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)) +#ifndef OPENSSL_NO_SRP + +#ifndef OPENSSL_NO_SSL_INTERN + +typedef struct srp_ctx_st +	{ +	/* param for all the callbacks */ +	void *SRP_cb_arg; +	/* set client Hello login callback */ +	int (*TLS_ext_srp_username_callback)(SSL *, int *, void *); +	/* set SRP N/g param callback for verification */ +	int (*SRP_verify_param_callback)(SSL *, void *); +	/* set SRP client passwd callback */ +	char *(*SRP_give_srp_client_pwd_callback)(SSL *, void *); + +	char *login; +	BIGNUM *N,*g,*s,*B,*A; +	BIGNUM *a,*b,*v; +	char *info; +	int strength; + +	unsigned long srp_Mask; +	} SRP_CTX; + +#endif + +/* see tls_srp.c */ +int SSL_SRP_CTX_init(SSL *s); +int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +int SSL_SRP_CTX_free(SSL *ctx); +int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +int SSL_srp_server_param_with_username(SSL *s, int *ad); +int SRP_generate_server_master_secret(SSL *s,unsigned char *master_key); +int SRP_Calc_A_param(SSL *s); +int SRP_generate_client_master_secret(SSL *s,unsigned char *master_key); +#endif  #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)  #define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */ @@ -675,7 +770,11 @@ void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int con  typedef int (*GEN_SESSION_CB)(const SSL *ssl, unsigned char *id,  				unsigned int *id_len); -typedef struct ssl_comp_st +typedef struct ssl_comp_st SSL_COMP; + +#ifndef OPENSSL_NO_SSL_INTERN + +struct ssl_comp_st  	{  	int id;  	const char *name; @@ -684,7 +783,7 @@ typedef struct ssl_comp_st  #else  	char *method;  #endif -	} SSL_COMP; +	};  DECLARE_STACK_OF(SSL_COMP)  DECLARE_LHASH_OF(SSL_SESSION); @@ -829,7 +928,7 @@ struct ssl_ctx_st  	 */  	unsigned int max_send_fragment; -#ifndef OPENSSL_ENGINE +#ifndef OPENSSL_NO_ENGINE  	/* Engine to pass requests for client certs to  	 */  	ENGINE *client_cert_engine; @@ -857,6 +956,28 @@ struct ssl_ctx_st  	/* draft-rescorla-tls-opaque-prf-input-00.txt information */  	int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg);  	void *tlsext_opaque_prf_input_callback_arg; +#endif + +#ifndef OPENSSL_NO_PSK +	char *psk_identity_hint; +	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity, +		unsigned int max_identity_len, unsigned char *psk, +		unsigned int max_psk_len); +	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, +		unsigned char *psk, unsigned int max_psk_len); +#endif + +#ifndef OPENSSL_NO_BUF_FREELISTS +#define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 +	unsigned int freelist_max_len; +	struct ssl3_buf_freelist_st *wbuf_freelist; +	struct ssl3_buf_freelist_st *rbuf_freelist; +#endif +#ifndef OPENSSL_NO_SRP +	SRP_CTX srp_ctx; /* ctx for SRP authentication */ +#endif + +#ifndef OPENSSL_NO_TLSEXT  # ifndef OPENSSL_NO_NEXTPROTONEG  	/* Next protocol negotiation information */ @@ -876,24 +997,43 @@ struct ssl_ctx_st  				    void *arg);  	void *next_proto_select_cb_arg;  # endif -#endif -#ifndef OPENSSL_NO_PSK -	char *psk_identity_hint; -	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity, -		unsigned int max_identity_len, unsigned char *psk, -		unsigned int max_psk_len); -	unsigned int (*psk_server_callback)(SSL *ssl, const char *identity, -		unsigned char *psk, unsigned int max_psk_len); +	/* ALPN information +	 * (we are in the process of transitioning from NPN to ALPN.) */ + +	/* For a server, this contains a callback function that allows the +	 * server to select the protocol for the connection. +	 *   out: on successful return, this must point to the raw protocol +	 *        name (without the length prefix). +	 *   outlen: on successful return, this contains the length of |*out|. +	 *   in: points to the client's list of supported protocols in +	 *       wire-format. +	 *   inlen: the length of |in|. */ +	int (*alpn_select_cb)(SSL *s, +			      const unsigned char **out, +			      unsigned char *outlen, +			      const unsigned char* in, +			      unsigned int inlen, +			      void *arg); +	void *alpn_select_cb_arg; + +	/* For a client, this contains the list of supported protocols in wire +	 * format. */ +	unsigned char* alpn_client_proto_list; +	unsigned alpn_client_proto_list_len; + +        /* SRTP profiles we are willing to do from RFC 5764 */ +        STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;   + +	/* If true, a client will advertise the Channel ID extension and a +	 * server will echo it. */ +	char tlsext_channel_id_enabled; +	/* The client's Channel ID private key. */ +	EVP_PKEY *tlsext_channel_id_private;  #endif +	}; -#ifndef OPENSSL_NO_BUF_FREELISTS -#define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 -	unsigned int freelist_max_len; -	struct ssl3_buf_freelist_st *wbuf_freelist; -	struct ssl3_buf_freelist_st *rbuf_freelist;  #endif -	};  #define SSL_SESS_CACHE_OFF			0x0000  #define SSL_SESS_CACHE_CLIENT			0x0001 @@ -931,6 +1071,10 @@ LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *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) +/* SSL_CTX_enable_tls_channel_id configures a TLS server to accept TLS client + * IDs from clients. Returns 1 on success. */ +#define SSL_CTX_enable_tls_channel_id(ctx) \ +	SSL_CTX_ctrl(ctx,SSL_CTRL_CHANNEL_ID,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); @@ -952,26 +1096,43 @@ void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,  					   int (*cb) (SSL *ssl,  						      const unsigned char **out,  						      unsigned int *outlen, -						      void *arg), void *arg); +						      void *arg), +					   void *arg);  void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, -				      int (*cb) (SSL *ssl, unsigned char **out, +				      int (*cb) (SSL *ssl, +						 unsigned char **out,  						 unsigned char *outlen,  						 const unsigned char *in, -						 unsigned int inlen, void *arg), +						 unsigned int inlen, +						 void *arg),  				      void *arg);  int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,  			  const unsigned char *in, unsigned int inlen,  			  const unsigned char *client, unsigned int client_len); -void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, -				    unsigned *len); +void SSL_get0_next_proto_negotiated(const SSL *s, +				    const unsigned char **data, unsigned *len);  #define OPENSSL_NPN_UNSUPPORTED	0  #define OPENSSL_NPN_NEGOTIATED	1  #define OPENSSL_NPN_NO_OVERLAP	2 -  #endif +int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char* protos, +			    unsigned protos_len); +int SSL_set_alpn_protos(SSL *ssl, const unsigned char* protos, +			unsigned protos_len); +void SSL_CTX_set_alpn_select_cb(SSL_CTX* ctx, +				int (*cb) (SSL *ssl, +					   const unsigned char **out, +					   unsigned char *outlen, +					   const unsigned char *in, +					   unsigned int inlen, +					   void *arg), +				void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, +			    unsigned *len); +  #ifndef OPENSSL_NO_PSK  /* the maximum length of the buffer given to callbacks containing the   * resulting identity/psk */ @@ -1011,6 +1172,8 @@ const char *SSL_get_psk_identity(const SSL *s);  #define SSL_MAC_FLAG_READ_MAC_STREAM 1  #define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +#ifndef OPENSSL_NO_SSL_INTERN +  struct ssl_st  	{  	/* protocol version @@ -1055,9 +1218,7 @@ struct ssl_st  	int server;	/* are we the server side? - mostly used by SSL_clear*/ -	int new_session;/* 1 if we are to use a new session. -	                 * 2 if we are a server and are inside a handshake -	                 *   (i.e. not just sending a HelloRequest) +	int new_session;/* Generate a new session or reuse an old one.  	                 * NB: For servers, the 'new' session may actually be a previously  	                 * cached session or even the previous session unless  	                 * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */ @@ -1154,6 +1315,10 @@ struct ssl_st  #endif	/* OPENSSL_NO_KRB5 */  #ifndef OPENSSL_NO_PSK +	/* PSK identity hint is stored here only to enable setting a hint on an SSL object before an +	 * SSL_SESSION is associated with it. Once an SSL_SESSION is associated with this SSL object, +	 * the psk_identity_hint from the session takes precedence over this one. */ +	char *psk_identity_hint;  	unsigned int (*psk_client_callback)(SSL *ssl, const char *hint, char *identity,  		unsigned int max_identity_len, unsigned char *psk,  		unsigned int max_psk_len); @@ -1244,11 +1409,44 @@ struct ssl_st  #endif  #define session_ctx initial_ctx + +	STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;  /* What we'll do */ +	SRTP_PROTECTION_PROFILE *srtp_profile;            /* What's been chosen */ + +	unsigned int tlsext_heartbeat;  /* Is use of the Heartbeat extension negotiated? +	                                   0: disabled +	                                   1: enabled +	                                   2: enabled, but not allowed to send Requests +	                                 */ +	unsigned int tlsext_hb_pending; /* Indicates if a HeartbeatRequest is in flight */ +	unsigned int tlsext_hb_seq;     /* HeartbeatRequest sequence number */ + +	/* Copied from the SSL_CTX. For a server, means that we'll accept +	 * Channel IDs from clients. For a client, means that we'll advertise +	 * support. */ +	char tlsext_channel_id_enabled; +	/* The client's Channel ID private key. */ +	EVP_PKEY *tlsext_channel_id_private; + +	/* For a client, this contains the list of supported protocols in wire +	 * format. */ +	unsigned char* alpn_client_proto_list; +	unsigned alpn_client_proto_list_len;  #else  #define session_ctx ctx  #endif /* OPENSSL_NO_TLSEXT */ + +	int renegotiate;/* 1 if we are renegotiating. +	                 * 2 if we are a server and are inside a handshake +	                 * (i.e. not just sending a HelloRequest) */ + +#ifndef OPENSSL_NO_SRP +	SRP_CTX srp_ctx; /* ctx for SRP authentication */ +#endif  	}; +#endif +  #ifdef __cplusplus  }  #endif @@ -1258,6 +1456,7 @@ struct ssl_st  #include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */  #include <openssl/dtls1.h> /* Datagram TLS */  #include <openssl/ssl23.h> +#include <openssl/srtp.h>  /* Support for the use_srtp extension */  #ifdef  __cplusplus  extern "C" { @@ -1304,7 +1503,7 @@ extern "C" {  #define SSL_get_state(a)		SSL_state(a)  #define SSL_is_init_finished(a)		(SSL_state(a) == SSL_ST_OK)  #define SSL_in_init(a)			((SSL_state(a)&SSL_ST_INIT) && \ -                                  !SSL_cutthrough_complete(a)) +					!SSL_cutthrough_complete(a))  #define SSL_in_before(a)		(SSL_state(a)&SSL_ST_BEFORE)  #define SSL_in_connect_init(a)		(SSL_state(a)&SSL_ST_CONNECT)  #define SSL_in_accept_init(a)		(SSL_state(a)&SSL_ST_ACCEPT) @@ -1476,6 +1675,23 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)  #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 +#ifndef OPENSSL_NO_HEARTBEATS +#define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT				85 +#define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING		86 +#define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS	87 +#endif +#define SSL_CTRL_CHANNEL_ID			88 +#define SSL_CTRL_GET_CHANNEL_ID			89 +#define SSL_CTRL_SET_CHANNEL_ID			90  #endif  #define DTLS_CTRL_GET_TIMEOUT		73 @@ -1486,6 +1702,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)  #define SSL_CTRL_CLEAR_OPTIONS			77  #define SSL_CTRL_CLEAR_MODE			78 +#define SSL_CTRL_GET_EXTRA_CHAIN_CERTS		82 +#define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS	83 +  #define DTLSv1_get_timeout(ssl, arg) \  	SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)  #define DTLSv1_handle_timeout(ssl) \ @@ -1520,8 +1739,31 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)  #define SSL_set_tmp_ecdh(ssl,ecdh) \  	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) +/* SSL_enable_tls_channel_id configures a TLS server to accept TLS client + * IDs from clients. Returns 1 on success. */ +#define SSL_enable_tls_channel_id(ctx) \ +	SSL_ctrl(ctx,SSL_CTRL_CHANNEL_ID,0,NULL) +/* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to + * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on + * success. */ +#define SSL_set1_tls_channel_id(s, private_key) \ +	SSL_ctrl(s,SSL_CTRL_SET_CHANNEL_ID,0,(void*)private_key) +#define SSL_CTX_set1_tls_channel_id(ctx, private_key) \ +	SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHANNEL_ID,0,(void*)private_key) +/* SSL_get_tls_channel_id gets the client's TLS Channel ID from a server SSL* + * and copies up to the first |channel_id_len| bytes into |channel_id|. The + * Channel ID consists of the client's P-256 public key as an (x,y) pair where + * each is a 32-byte, big-endian field element. Returns 0 if the client didn't + * offer a Channel ID and the length of the complete Channel ID otherwise. */ +#define SSL_get_tls_channel_id(ctx, channel_id, channel_id_len) \ +	SSL_ctrl(ctx,SSL_CTRL_GET_CHANNEL_ID,channel_id_len,(void*)channel_id) +  #define SSL_CTX_add_extra_chain_cert(ctx,x509) \  	SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) +#define SSL_CTX_get_extra_chain_certs(ctx,px509) \ +	SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +#define SSL_CTX_clear_extra_chain_certs(ctx) \ +	SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)  #ifndef OPENSSL_NO_BIO  BIO_METHOD *BIO_f_ssl(void); @@ -1549,7 +1791,8 @@ const SSL_CIPHER *SSL_get_current_cipher(const SSL *s);  int	SSL_CIPHER_get_bits(const SSL_CIPHER *c,int *alg_bits);  char *	SSL_CIPHER_get_version(const SSL_CIPHER *c);  const char *	SSL_CIPHER_get_name(const SSL_CIPHER *c); -const char *	SSL_CIPHER_authentication_method(const SSL_CIPHER *c); +unsigned long 	SSL_CIPHER_get_id(const SSL_CIPHER *c); +const char* SSL_CIPHER_authentication_method(const SSL_CIPHER* cipher);  int	SSL_get_fd(const SSL *s);  int	SSL_get_rfd(const SSL *s); @@ -1619,11 +1862,15 @@ long	SSL_SESSION_set_time(SSL_SESSION *s, long t);  long	SSL_SESSION_get_timeout(const SSL_SESSION *s);  long	SSL_SESSION_set_timeout(SSL_SESSION *s, long t);  void	SSL_copy_session_id(SSL *to,const SSL *from); +X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +int SSL_SESSION_set1_id_context(SSL_SESSION *s,const unsigned char *sid_ctx, +			       unsigned int sid_ctx_len);  SSL_SESSION *SSL_SESSION_new(void);  const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,  					unsigned int *len);  const char *	SSL_SESSION_get_version(const SSL_SESSION *s); +unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);  #ifndef OPENSSL_NO_FP_API  int	SSL_SESSION_print_fp(FILE *fp,const SSL_SESSION *ses);  #endif @@ -1687,6 +1934,30 @@ int SSL_set_trust(SSL *s, int trust);  int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);  int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); +#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); +int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, +					char *(*cb)(SSL *,void *)); +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, +					  int (*cb)(SSL *,void *)); +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, +				      int (*cb)(SSL *,int *,void *)); +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, +			     BIGNUM *sa, BIGNUM *v, char *info); +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, +				const char *grp); + +BIGNUM *SSL_get_srp_g(SSL *s); +BIGNUM *SSL_get_srp_N(SSL *s); + +char *SSL_get_srp_username(SSL *s); +char *SSL_get_srp_userinfo(SSL *s); +#endif +  void	SSL_free(SSL *ssl);  int 	SSL_accept(SSL *ssl);  int 	SSL_connect(SSL *ssl); @@ -1722,6 +1993,15 @@ const SSL_METHOD *TLSv1_method(void);		/* TLSv1.0 */  const SSL_METHOD *TLSv1_server_method(void);	/* TLSv1.0 */  const SSL_METHOD *TLSv1_client_method(void);	/* TLSv1.0 */ +const SSL_METHOD *TLSv1_1_method(void);		/* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_server_method(void);	/* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_client_method(void);	/* TLSv1.1 */ + +const SSL_METHOD *TLSv1_2_method(void);		/* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_server_method(void);	/* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_client_method(void);	/* TLSv1.2 */ + +  const SSL_METHOD *DTLSv1_method(void);		/* DTLSv1.0 */  const SSL_METHOD *DTLSv1_server_method(void);	/* DTLSv1.0 */  const SSL_METHOD *DTLSv1_client_method(void);	/* DTLSv1.0 */ @@ -1730,6 +2010,7 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);  int SSL_do_handshake(SSL *s);  int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s);  int SSL_renegotiate_pending(SSL *s);  int SSL_shutdown(SSL *s); @@ -1781,6 +2062,7 @@ void SSL_set_info_callback(SSL *ssl,  			   void (*cb)(const SSL *ssl,int type,int val));  void (*SSL_get_info_callback(const SSL *ssl))(const SSL *ssl,int type,int val);  int SSL_state(const SSL *ssl); +void SSL_set_state(SSL *ssl, int state);  void SSL_set_verify_result(SSL *ssl,long v);  long SSL_get_verify_result(const SSL *ssl); @@ -1881,6 +2163,9 @@ int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb,  /* Pre-shared secret session resumption functions */  int SSL_set_session_secret_cb(SSL *s, tls_session_secret_cb_fn tls_session_secret_cb, void *arg); +void SSL_set_debug(SSL *s, int debug); +int SSL_cache_hit(SSL *s); +  /* BEGIN ERROR CODES */  /* The following lines are auto generated by the script mkerr.pl. Any changes   * made after this point may be overwritten when the script is next run. @@ -1900,6 +2185,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_DTLS1_ACCEPT				 246  #define SSL_F_DTLS1_ADD_CERT_TO_BUF			 295  #define SSL_F_DTLS1_BUFFER_RECORD			 247 +#define SSL_F_DTLS1_CHECK_TIMEOUT_NUM			 316  #define SSL_F_DTLS1_CLIENT_HELLO			 248  #define SSL_F_DTLS1_CONNECT				 249  #define SSL_F_DTLS1_ENC					 250 @@ -1908,6 +2194,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT		 253  #define SSL_F_DTLS1_GET_RECORD				 254  #define SSL_F_DTLS1_HANDLE_TIMEOUT			 297 +#define SSL_F_DTLS1_HEARTBEAT				 305  #define SSL_F_DTLS1_OUTPUT_CERT_CHAIN			 255  #define SSL_F_DTLS1_PREPROCESS_FRAGMENT			 288  #define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE		 256 @@ -1957,6 +2244,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL3_CALLBACK_CTRL			 233  #define SSL_F_SSL3_CHANGE_CIPHER_STATE			 129  #define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM		 130 +#define SSL_F_SSL3_CHECK_CLIENT_HELLO			 304  #define SSL_F_SSL3_CLIENT_HELLO				 131  #define SSL_F_SSL3_CONNECT				 132  #define SSL_F_SSL3_CTRL					 213 @@ -1968,6 +2256,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL3_GET_CERTIFICATE_REQUEST		 135  #define SSL_F_SSL3_GET_CERT_STATUS			 289  #define SSL_F_SSL3_GET_CERT_VERIFY			 136 +#define SSL_F_SSL3_GET_CHANNEL_ID			 317  #define SSL_F_SSL3_GET_CLIENT_CERTIFICATE		 137  #define SSL_F_SSL3_GET_CLIENT_HELLO			 138  #define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE		 139 @@ -1975,7 +2264,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL3_GET_KEY_EXCHANGE			 141  #define SSL_F_SSL3_GET_MESSAGE				 142  #define SSL_F_SSL3_GET_NEW_SESSION_TICKET		 283 -#define SSL_F_SSL3_GET_NEXT_PROTO			 304 +#define SSL_F_SSL3_GET_NEXT_PROTO			 306  #define SSL_F_SSL3_GET_RECORD				 143  #define SSL_F_SSL3_GET_SERVER_CERTIFICATE		 144  #define SSL_F_SSL3_GET_SERVER_DONE			 145 @@ -1987,6 +2276,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL3_READ_BYTES				 148  #define SSL_F_SSL3_READ_N				 149  #define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST		 150 +#define SSL_F_SSL3_SEND_CHANNEL_ID			 318  #define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE		 151  #define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE		 152  #define SSL_F_SSL3_SEND_CLIENT_VERIFY			 153 @@ -2000,10 +2290,12 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL3_WRITE_PENDING			 159  #define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT	 298  #define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT		 277 +#define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT		 307  #define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK	 215  #define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK	 216  #define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT	 299  #define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT		 278 +#define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT		 308  #define SSL_F_SSL_BAD_METHOD				 160  #define SSL_F_SSL_BYTES_TO_CIPHER_LIST			 161  #define SSL_F_SSL_CERT_DUP				 221 @@ -2020,6 +2312,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL_CREATE_CIPHER_LIST			 166  #define SSL_F_SSL_CTRL					 232  #define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY			 168 +#define SSL_F_SSL_CTX_MAKE_PROFILES			 309  #define SSL_F_SSL_CTX_NEW				 169  #define SSL_F_SSL_CTX_SET_CIPHER_LIST			 269  #define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE		 290 @@ -2042,14 +2335,17 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL_GET_NEW_SESSION			 181  #define SSL_F_SSL_GET_PREV_SESSION			 217  #define SSL_F_SSL_GET_SERVER_SEND_CERT			 182 +#define SSL_F_SSL_GET_SERVER_SEND_PKEY			 317  #define SSL_F_SSL_GET_SIGN_PKEY				 183  #define SSL_F_SSL_INIT_WBIO_BUFFER			 184  #define SSL_F_SSL_LOAD_CLIENT_CA_FILE			 185  #define SSL_F_SSL_NEW					 186  #define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT	 300  #define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT		 302 +#define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT	 310  #define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT	 301  #define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT		 303 +#define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT	 311  #define SSL_F_SSL_PEEK					 270  #define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT		 281  #define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT		 282 @@ -2058,6 +2354,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL_RSA_PUBLIC_ENCRYPT			 188  #define SSL_F_SSL_SESSION_NEW				 189  #define SSL_F_SSL_SESSION_PRINT_FP			 190 +#define SSL_F_SSL_SESSION_SET1_ID_CONTEXT		 312  #define SSL_F_SSL_SESS_CERT_NEW				 225  #define SSL_F_SSL_SET_CERT				 191  #define SSL_F_SSL_SET_CIPHER_LIST			 271 @@ -2071,6 +2368,7 @@ void ERR_load_SSL_strings(void);  #define SSL_F_SSL_SET_TRUST				 228  #define SSL_F_SSL_SET_WFD				 196  #define SSL_F_SSL_SHUTDOWN				 224 +#define SSL_F_SSL_SRP_CTX_INIT				 313  #define SSL_F_SSL_UNDEFINED_CONST_FUNCTION		 243  #define SSL_F_SSL_UNDEFINED_FUNCTION			 197  #define SSL_F_SSL_UNDEFINED_VOID_FUNCTION		 244 @@ -2091,6 +2389,8 @@ void ERR_load_SSL_strings(void);  #define SSL_F_TLS1_CHANGE_CIPHER_STATE			 209  #define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT		 274  #define SSL_F_TLS1_ENC					 210 +#define SSL_F_TLS1_EXPORT_KEYING_MATERIAL		 314 +#define SSL_F_TLS1_HEARTBEAT				 315  #define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT		 275  #define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT		 276  #define SSL_F_TLS1_PRF					 284 @@ -2130,6 +2430,13 @@ void ERR_load_SSL_strings(void);  #define SSL_R_BAD_RSA_MODULUS_LENGTH			 121  #define SSL_R_BAD_RSA_SIGNATURE				 122  #define SSL_R_BAD_SIGNATURE				 123 +#define SSL_R_BAD_SRP_A_LENGTH				 347 +#define SSL_R_BAD_SRP_B_LENGTH				 348 +#define SSL_R_BAD_SRP_G_LENGTH				 349 +#define SSL_R_BAD_SRP_N_LENGTH				 350 +#define SSL_R_BAD_SRP_S_LENGTH				 351 +#define SSL_R_BAD_SRTP_MKI_VALUE			 352 +#define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST		 353  #define SSL_R_BAD_SSL_FILETYPE				 124  #define SSL_R_BAD_SSL_SESSION_ID_LENGTH			 125  #define SSL_R_BAD_STATE					 126 @@ -2137,12 +2444,15 @@ void ERR_load_SSL_strings(void);  #define SSL_R_BIO_NOT_SET				 128  #define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG			 129  #define SSL_R_BN_LIB					 130 +#define SSL_R_CANNOT_SERIALIZE_PUBLIC_KEY		 376  #define SSL_R_CA_DN_LENGTH_MISMATCH			 131  #define SSL_R_CA_DN_TOO_LONG				 132  #define SSL_R_CCS_RECEIVED_EARLY			 133  #define SSL_R_CERTIFICATE_VERIFY_FAILED			 134  #define SSL_R_CERT_LENGTH_MISMATCH			 135  #define SSL_R_CHALLENGE_IS_DIFFERENT			 136 +#define SSL_R_CHANNEL_ID_NOT_P256			 375 +#define SSL_R_CHANNEL_ID_SIGNATURE_INVALID		 371  #define SSL_R_CIPHER_CODE_WRONG_LENGTH			 137  #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE		 138  #define SSL_R_CIPHER_TABLE_SRC_ERROR			 139 @@ -2155,6 +2465,7 @@ void ERR_load_SSL_strings(void);  #define SSL_R_CONNECTION_ID_IS_DIFFERENT		 143  #define SSL_R_CONNECTION_TYPE_NOT_SET			 144  #define SSL_R_COOKIE_MISMATCH				 308 +#define SSL_R_D2I_ECDSA_SIG				 379  #define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED		 145  #define SSL_R_DATA_LENGTH_TOO_LONG			 146  #define SSL_R_DECRYPTION_FAILED				 147 @@ -2168,14 +2479,18 @@ void ERR_load_SSL_strings(void);  #define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE	 322  #define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE	 323  #define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER		 310 +#define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST	 354  #define SSL_R_ENCRYPTED_LENGTH_TOO_LONG			 150  #define SSL_R_ERROR_GENERATING_TMP_RSA_KEY		 282  #define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST		 151 +#define SSL_R_EVP_DIGESTSIGNFINAL_FAILED		 377 +#define SSL_R_EVP_DIGESTSIGNINIT_FAILED			 378  #define SSL_R_EXCESSIVE_MESSAGE_SIZE			 152  #define SSL_R_EXTRA_DATA_IN_MESSAGE			 153  #define SSL_R_GOT_A_FIN_BEFORE_A_CCS			 154 -#define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS		 346 -#define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION		 347 +#define SSL_R_GOT_CHANNEL_ID_BEFORE_A_CCS		 372 +#define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS		 355 +#define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION		 356  #define SSL_R_HTTPS_PROXY_REQUEST			 155  #define SSL_R_HTTP_REQUEST				 156  #define SSL_R_ILLEGAL_PADDING				 283 @@ -2183,7 +2498,9 @@ void ERR_load_SSL_strings(void);  #define SSL_R_INVALID_CHALLENGE_LENGTH			 158  #define SSL_R_INVALID_COMMAND				 280  #define SSL_R_INVALID_COMPRESSION_ALGORITHM		 341 +#define SSL_R_INVALID_MESSAGE				 374  #define SSL_R_INVALID_PURPOSE				 278 +#define SSL_R_INVALID_SRP_USERNAME			 357  #define SSL_R_INVALID_STATUS_RESPONSE			 328  #define SSL_R_INVALID_TICKET_KEYS_LENGTH		 325  #define SSL_R_INVALID_TRUST				 279 @@ -2213,11 +2530,13 @@ void ERR_load_SSL_strings(void);  #define SSL_R_MISSING_RSA_CERTIFICATE			 168  #define SSL_R_MISSING_RSA_ENCRYPTING_CERT		 169  #define SSL_R_MISSING_RSA_SIGNING_CERT			 170 +#define SSL_R_MISSING_SRP_PARAM				 358  #define SSL_R_MISSING_TMP_DH_KEY			 171  #define SSL_R_MISSING_TMP_ECDH_KEY			 311  #define SSL_R_MISSING_TMP_RSA_KEY			 172  #define SSL_R_MISSING_TMP_RSA_PKEY			 173  #define SSL_R_MISSING_VERIFY_MESSAGE			 174 +#define SSL_R_MULTIPLE_SGC_RESTARTS			 346  #define SSL_R_NON_SSLV2_INITIAL_PACKET			 175  #define SSL_R_NO_CERTIFICATES_RETURNED			 176  #define SSL_R_NO_CERTIFICATE_ASSIGNED			 177 @@ -2234,6 +2553,7 @@ void ERR_load_SSL_strings(void);  #define SSL_R_NO_COMPRESSION_SPECIFIED			 187  #define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER		 330  #define SSL_R_NO_METHOD_SPECIFIED			 188 +#define SSL_R_NO_P256_SUPPORT				 373  #define SSL_R_NO_PRIVATEKEY				 189  #define SSL_R_NO_PRIVATE_KEY_ASSIGNED			 190  #define SSL_R_NO_PROTOCOLS_AVAILABLE			 191 @@ -2241,6 +2561,7 @@ void ERR_load_SSL_strings(void);  #define SSL_R_NO_RENEGOTIATION				 339  #define SSL_R_NO_REQUIRED_DIGEST			 324  #define SSL_R_NO_SHARED_CIPHER				 193 +#define SSL_R_NO_SRTP_PROFILES				 359  #define SSL_R_NO_VERIFY_CALLBACK			 194  #define SSL_R_NULL_SSL_CTX				 195  #define SSL_R_NULL_SSL_METHOD_PASSED			 196 @@ -2285,7 +2606,12 @@ void ERR_load_SSL_strings(void);  #define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED		 277  #define SSL_R_SESSION_MAY_NOT_BE_CREATED		 2000  #define SSL_R_SHORT_READ				 219 +#define SSL_R_SIGNATURE_ALGORITHMS_ERROR		 360  #define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE	 220 +#define SSL_R_SRP_A_CALC				 361 +#define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES		 362 +#define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG	 363 +#define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE		 364  #define SSL_R_SSL23_DOING_SESSION_ID_REUSE		 221  #define SSL_R_SSL2_CONNECTION_ID_TOO_LONG		 299  #define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT		 321 @@ -2330,6 +2656,9 @@ void ERR_load_SSL_strings(void);  #define SSL_R_TLSV1_UNRECOGNIZED_NAME			 1112  #define SSL_R_TLSV1_UNSUPPORTED_EXTENSION		 1110  #define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER	 232 +#define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT		 365 +#define SSL_R_TLS_HEARTBEAT_PENDING			 366 +#define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL		 367  #define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST		 157  #define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233  #define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG	 234 @@ -2351,6 +2680,7 @@ void ERR_load_SSL_strings(void);  #define SSL_R_UNKNOWN_CERTIFICATE_TYPE			 247  #define SSL_R_UNKNOWN_CIPHER_RETURNED			 248  #define SSL_R_UNKNOWN_CIPHER_TYPE			 249 +#define SSL_R_UNKNOWN_DIGEST				 368  #define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE			 250  #define SSL_R_UNKNOWN_PKEY_TYPE				 251  #define SSL_R_UNKNOWN_PROTOCOL				 252 @@ -2365,16 +2695,19 @@ void ERR_load_SSL_strings(void);  #define SSL_R_UNSUPPORTED_PROTOCOL			 258  #define SSL_R_UNSUPPORTED_SSL_VERSION			 259  #define SSL_R_UNSUPPORTED_STATUS_TYPE			 329 +#define SSL_R_USE_SRTP_NOT_NEGOTIATED			 369  #define SSL_R_WRITE_BIO_NOT_SET				 260  #define SSL_R_WRONG_CIPHER_RETURNED			 261  #define SSL_R_WRONG_MESSAGE_TYPE			 262  #define SSL_R_WRONG_NUMBER_OF_KEY_BITS			 263  #define SSL_R_WRONG_SIGNATURE_LENGTH			 264  #define SSL_R_WRONG_SIGNATURE_SIZE			 265 +#define SSL_R_WRONG_SIGNATURE_TYPE			 370  #define SSL_R_WRONG_SSL_VERSION				 266  #define SSL_R_WRONG_VERSION_NUMBER			 267  #define SSL_R_X509_LIB					 268  #define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS		 269 +#define SSL_R_UNEXPECTED_CCS				 388  #ifdef  __cplusplus  }  | 
