| Index: openssl/ssl/ssl3.h | 
| =================================================================== | 
| --- openssl/ssl/ssl3.h	(revision 105093) | 
| +++ openssl/ssl/ssl3.h	(working copy) | 
| @@ -123,7 +123,6 @@ | 
| #include <openssl/buffer.h> | 
| #include <openssl/evp.h> | 
| #include <openssl/ssl.h> | 
| -#include <openssl/pq_compat.h> | 
|  | 
| #ifdef  __cplusplus | 
| extern "C" { | 
| @@ -163,12 +162,14 @@ | 
| #define SSL3_CK_ADH_DES_64_CBC_SHA		0x0300001A | 
| #define SSL3_CK_ADH_DES_192_CBC_SHA		0x0300001B | 
|  | 
| -#define SSL3_CK_FZA_DMS_NULL_SHA		0x0300001C | 
| -#define SSL3_CK_FZA_DMS_FZA_SHA			0x0300001D | 
| -#if 0 /* Because it clashes with KRB5, is never used any more, and is safe | 
| -	 to remove according to David Hopwood <david.hopwood@zetnet.co.uk> | 
| -	 of the ietf-tls list */ | 
| -#define SSL3_CK_FZA_DMS_RC4_SHA			0x0300001E | 
| +#if 0 | 
| +	#define SSL3_CK_FZA_DMS_NULL_SHA		0x0300001C | 
| +	#define SSL3_CK_FZA_DMS_FZA_SHA			0x0300001D | 
| +	#if 0 /* Because it clashes with KRB5, is never used any more, and is safe | 
| +		 to remove according to David Hopwood <david.hopwood@zetnet.co.uk> | 
| +		 of the ietf-tls list */ | 
| +	#define SSL3_CK_FZA_DMS_RC4_SHA			0x0300001E | 
| +	#endif | 
| #endif | 
|  | 
| /*    VRS Additional Kerberos5 entries | 
| @@ -220,9 +221,11 @@ | 
| #define SSL3_TXT_ADH_DES_64_CBC_SHA		"ADH-DES-CBC-SHA" | 
| #define SSL3_TXT_ADH_DES_192_CBC_SHA		"ADH-DES-CBC3-SHA" | 
|  | 
| -#define SSL3_TXT_FZA_DMS_NULL_SHA		"FZA-NULL-SHA" | 
| -#define SSL3_TXT_FZA_DMS_FZA_SHA		"FZA-FZA-CBC-SHA" | 
| -#define SSL3_TXT_FZA_DMS_RC4_SHA		"FZA-RC4-SHA" | 
| +#if 0 | 
| +	#define SSL3_TXT_FZA_DMS_NULL_SHA		"FZA-NULL-SHA" | 
| +	#define SSL3_TXT_FZA_DMS_FZA_SHA		"FZA-FZA-CBC-SHA" | 
| +	#define SSL3_TXT_FZA_DMS_RC4_SHA		"FZA-RC4-SHA" | 
| +#endif | 
|  | 
| #define SSL3_TXT_KRB5_DES_64_CBC_SHA		"KRB5-DES-CBC-SHA" | 
| #define SSL3_TXT_KRB5_DES_192_CBC3_SHA		"KRB5-DES-CBC3-SHA" | 
| @@ -248,24 +251,76 @@ | 
| #define SSL3_SESSION_ID_SIZE			32 | 
| #define SSL3_RT_HEADER_LENGTH			5 | 
|  | 
| -/* Due to MS stuffing up, this can change.... */ | 
| -#if defined(OPENSSL_SYS_WIN16) || \ | 
| -	(defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)) | 
| -#define SSL3_RT_MAX_EXTRA			(14000) | 
| +#ifndef SSL3_ALIGN_PAYLOAD | 
| + /* Some will argue that this increases memory footprint, but it's | 
| +  * not actually true. Point is that malloc has to return at least | 
| +  * 64-bit aligned pointers, meaning that allocating 5 bytes wastes | 
| +  * 3 bytes in either case. Suggested pre-gaping simply moves these | 
| +  * wasted bytes from the end of allocated region to its front, | 
| +  * but makes data payload aligned, which improves performance:-) */ | 
| +# define SSL3_ALIGN_PAYLOAD			8 | 
| #else | 
| -#define SSL3_RT_MAX_EXTRA			(16384) | 
| +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 | 
| +#  error "insane SSL3_ALIGN_PAYLOAD" | 
| +#  undef SSL3_ALIGN_PAYLOAD | 
| +# endif | 
| #endif | 
|  | 
| +/* This is the maximum MAC (digest) size used by the SSL library. | 
| + * Currently maximum of 20 is used by SHA1, but we reserve for | 
| + * future extension for 512-bit hashes. | 
| + */ | 
| + | 
| +#define SSL3_RT_MAX_MD_SIZE			64 | 
| + | 
| +/* Maximum block size used in all ciphersuites. Currently 16 for AES. | 
| + */ | 
| + | 
| +#define	SSL_RT_MAX_CIPHER_BLOCK_SIZE		16 | 
| + | 
| +#define SSL3_RT_MAX_EXTRA			(16384) | 
| + | 
| +/* Default buffer length used for writen records.  Thus a generated record | 
| + * will contain plaintext no larger than this value. */ | 
| +#define SSL3_RT_DEFAULT_PLAIN_LENGTH	2048 | 
| +/* Maximum plaintext length: defined by SSL/TLS standards */ | 
| #define SSL3_RT_MAX_PLAIN_LENGTH		16384 | 
| +/* Maximum compression overhead: defined by SSL/TLS standards */ | 
| +#define SSL3_RT_MAX_COMPRESSED_OVERHEAD		1024 | 
| + | 
| +/* The standards give a maximum encryption overhead of 1024 bytes. | 
| + * In practice the value is lower than this. The overhead is the maximum | 
| + * number of padding bytes (256) plus the mac size. | 
| + */ | 
| +#define SSL3_RT_MAX_ENCRYPTED_OVERHEAD	(256 + SSL3_RT_MAX_MD_SIZE) | 
| + | 
| +/* OpenSSL currently only uses a padding length of at most one block so | 
| + * the send overhead is smaller. | 
| + */ | 
| + | 
| +#define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ | 
| +			(SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) | 
| + | 
| +/* If compression isn't used don't include the compression overhead */ | 
| + | 
| #ifdef OPENSSL_NO_COMP | 
| -#define SSL3_RT_MAX_COMPRESSED_LENGTH	SSL3_RT_MAX_PLAIN_LENGTH | 
| +#define SSL3_RT_MAX_COMPRESSED_LENGTH		SSL3_RT_MAX_PLAIN_LENGTH | 
| #else | 
| -#define SSL3_RT_MAX_COMPRESSED_LENGTH	(1024+SSL3_RT_MAX_PLAIN_LENGTH) | 
| +#define SSL3_RT_MAX_COMPRESSED_LENGTH	\ | 
| +		(SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) | 
| #endif | 
| -#define SSL3_RT_MAX_ENCRYPTED_LENGTH	(1024+SSL3_RT_MAX_COMPRESSED_LENGTH) | 
| -#define SSL3_RT_MAX_PACKET_SIZE		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) | 
| -#define SSL3_RT_MAX_DATA_SIZE			(1024*1024) | 
| +#define SSL3_RT_MAX_ENCRYPTED_LENGTH	\ | 
| +		(SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) | 
| +#define SSL3_RT_MAX_PACKET_SIZE		\ | 
| +		(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) | 
|  | 
| +/* Extra space for empty fragment, headers, MAC, and padding. */ | 
| +#define SSL3_RT_DEFAULT_WRITE_OVERHEAD  256 | 
| +#define SSL3_RT_DEFAULT_PACKET_SIZE     4096 - SSL3_RT_DEFAULT_WRITE_OVERHEAD | 
| +#if SSL3_RT_DEFAULT_PLAIN_LENGTH + SSL3_RT_DEFAULT_WRITE_OVERHEAD > SSL3_RT_DEFAULT_PACKET_SIZE | 
| +#error "Insufficient space allocated for write buffers." | 
| +#endif | 
| + | 
| #define SSL3_MD_CLIENT_FINISHED_CONST	"\x43\x4C\x4E\x54" | 
| #define SSL3_MD_SERVER_FINISHED_CONST	"\x53\x52\x56\x52" | 
|  | 
| @@ -303,7 +358,7 @@ | 
| /*rw*/	unsigned char *input;   /* where the decode bytes are */ | 
| /*r */	unsigned char *comp;    /* only used with decompression - malloc()ed */ | 
| /*r */  unsigned long epoch;    /* epoch number, needed by DTLS1 */ | 
| -/*r */  PQ_64BIT seq_num;       /* sequence number, needed by DTLS1 */ | 
| +/*r */  unsigned char seq_num[8]; /* sequence number, needed by DTLS1 */ | 
| } SSL3_RECORD; | 
|  | 
| typedef struct ssl3_buffer_st | 
| @@ -326,13 +381,25 @@ | 
| * enough to contain all of the cert types defined either for | 
| * SSLv3 and TLSv1. | 
| */ | 
| -#define SSL3_CT_NUMBER			7 | 
| +#define SSL3_CT_NUMBER			9 | 
|  | 
|  | 
| #define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS	0x0001 | 
| #define SSL3_FLAGS_DELAY_CLIENT_FINISHED	0x0002 | 
| #define SSL3_FLAGS_POP_BUFFER			0x0004 | 
| #define TLS1_FLAGS_TLS_PADDING_BUG		0x0008 | 
| +#define TLS1_FLAGS_SKIP_CERT_VERIFY		0x0010 | 
| + | 
| +/* SSL3_FLAGS_SGC_RESTART_DONE is set when we | 
| + * restart a handshake because of MS SGC and so prevents us | 
| + * from restarting the handshake in a loop. It's reset on a | 
| + * renegotiation, so effectively limits the client to one restart | 
| + * per negotiation. This limits the possibility of a DDoS | 
| + * attack where the client handshakes in a loop using SGC to | 
| + * restart. Servers which permit renegotiation can still be | 
| + * effected, but we can't prevent that. | 
| + */ | 
| +#define SSL3_FLAGS_SGC_RESTART_DONE		0x0040 | 
|  | 
| typedef struct ssl3_state_st | 
| { | 
| @@ -340,8 +407,10 @@ | 
| int delay_buf_pop_ret; | 
|  | 
| unsigned char read_sequence[8]; | 
| +	int read_mac_secret_size; | 
| unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; | 
| unsigned char write_sequence[8]; | 
| +	int write_mac_secret_size; | 
| unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; | 
|  | 
| unsigned char server_random[SSL3_RANDOM_SIZE]; | 
| @@ -351,6 +420,9 @@ | 
| int need_empty_fragments; | 
| int empty_fragment_done; | 
|  | 
| +	/* The value of 'extra' when the buffers were initialized */ | 
| +	int init_extra; | 
| + | 
| SSL3_BUFFER rbuf;	/* read IO goes into here */ | 
| SSL3_BUFFER wbuf;	/* write IO goes into here */ | 
|  | 
| @@ -372,9 +444,11 @@ | 
| const unsigned char *wpend_buf; | 
|  | 
| /* used during startup, digest all incoming/outgoing packets */ | 
| -	EVP_MD_CTX finish_dgst1; | 
| -	EVP_MD_CTX finish_dgst2; | 
| - | 
| +	BIO *handshake_buffer; | 
| +	/* When set of handshake digests is determined, buffer is hashed | 
| +	 * and freed and MD_CTX-es for all required digests are stored in | 
| +	 * this array */ | 
| +	EVP_MD_CTX **handshake_dgst; | 
| /* this is set whenerver we see a change_cipher_spec message | 
| * come in when we are not looking for one */ | 
| int change_cipher_spec; | 
| @@ -394,8 +468,19 @@ | 
|  | 
| int in_read_app_data; | 
|  | 
| -	/* Set if we saw the Next Protocol Negotiation extension from our peer. */ | 
| +	/* Opaque PRF input as used for the current handshake. | 
| +	 * These fields are used only if TLSEXT_TYPE_opaque_prf_input is defined | 
| +	 * (otherwise, they are merely present to improve binary compatibility) */ | 
| +	void *client_opaque_prf_input; | 
| +	size_t client_opaque_prf_input_len; | 
| +	void *server_opaque_prf_input; | 
| +	size_t server_opaque_prf_input_len; | 
| + | 
| +#ifndef OPENSSL_NO_NEXTPROTONEG | 
| +	/* Set if we saw the Next Protocol Negotiation extension from | 
| +	   our peer. */ | 
| int next_proto_neg_seen; | 
| +#endif | 
|  | 
| struct	{ | 
| /* actually only needs to be 16+20 */ | 
| @@ -411,7 +496,7 @@ | 
| int message_type; | 
|  | 
| /* used to hold the new cipher we are going to use */ | 
| -		SSL_CIPHER *new_cipher; | 
| +		const SSL_CIPHER *new_cipher; | 
| #ifndef OPENSSL_NO_DH | 
| DH *dh; | 
| #endif | 
| @@ -438,6 +523,8 @@ | 
|  | 
| const EVP_CIPHER *new_sym_enc; | 
| const EVP_MD *new_hash; | 
| +		int new_mac_pkey_type; | 
| +		int new_mac_secret_size; | 
| #ifndef OPENSSL_NO_COMP | 
| const SSL_COMP *new_compression; | 
| #else | 
| @@ -452,48 +539,6 @@ | 
| unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; | 
| unsigned char previous_server_finished_len; | 
| int send_connection_binding; /* TODOEKR */ | 
| - | 
| -	/* Snap Start support (server-side only): | 
| -	 * | 
| -	 * Snap Start allows the client to 'suggest' the value of our random | 
| -	 * nonce. Assuming that we accept this suggestion, then the client can | 
| -	 * predict our exact reply and calculate a complete handshake based on | 
| -	 * that. These opportunistic handshake messages are embedded in the | 
| -	 * Snap Start extension, possibly including application data. | 
| -	 * | 
| -	 * (Note that if the handshake doesn't resume a session, the client | 
| -	 * couldn't hope to predict the exact server reply unless it uses the | 
| -	 * session ticket extension to suppress session ID generation.) | 
| -	 * | 
| -	 * All this allows for a TLS handshake that doesn't incur additional | 
| -	 * latency if the client side sends application data first. */ | 
| - | 
| -	/* Set if the client presented a Snap Start extension (empty or | 
| -	 * otherwise and the SSL_CTX has a cell configured. Server side only. */ | 
| -	int snap_start_ext_seen; | 
| -	/* Set if the client-suggested a server random value (which is stored | 
| -	 * in |server_random|) */ | 
| -	char snap_start_requested; | 
| -	/* Set if the appplication has indicated that the client's | 
| -	 * server_random suggestion is acceptable (see | 
| -	 * SSL_set_suggested_server_random_validity). If so, a Snap Start | 
| -	 * handshake will be attempted. */ | 
| -	char server_random_suggestion_valid; | 
| -	/* Client's predicted response_hash from client snap start extension. | 
| -	 * Valid if |snap_start_requested| is set. */ | 
| -	unsigned char predicted_response_hash[8]; | 
| -	/* Actual server handshake message hash.  A Snap Start handshake is | 
| -	 * possible only if predicated_response_hash matches this. */ | 
| -	unsigned char response_hash[8]; | 
| -	/* If we need to enter snap start recovery then we need to reset the | 
| -	 * Finished hash with a different value for the ClientHello. Thus, we | 
| -	 * need a copy of the whole ClientHello: */ | 
| -	SSL3_BUFFER snap_start_client_hello; | 
| -	/* A snap start ClientHello can contain records embedded in an | 
| -	 * extension. If we wish to read them then this points to the records | 
| -	 * within |snap_start_client_hello|. */ | 
| -	SSL3_BUFFER snap_start_records; | 
| - | 
| } SSL3_STATE; | 
|  | 
|  | 
| @@ -501,7 +546,7 @@ | 
| /*client */ | 
| /* extra state */ | 
| #define SSL3_ST_CW_FLUSH		(0x100|SSL_ST_CONNECT) | 
| -#define SSL3_ST_CUTTHROUGH_COMPLETE (0x101|SSL_ST_CONNECT) | 
| +#define SSL3_ST_CUTTHROUGH_COMPLETE	(0x101|SSL_ST_CONNECT) | 
| /* write to server */ | 
| #define SSL3_ST_CW_CLNT_HELLO_A		(0x110|SSL_ST_CONNECT) | 
| #define SSL3_ST_CW_CLNT_HELLO_B		(0x111|SSL_ST_CONNECT) | 
| @@ -529,8 +574,10 @@ | 
| #define SSL3_ST_CW_CERT_VRFY_B		(0x191|SSL_ST_CONNECT) | 
| #define SSL3_ST_CW_CHANGE_A		(0x1A0|SSL_ST_CONNECT) | 
| #define SSL3_ST_CW_CHANGE_B		(0x1A1|SSL_ST_CONNECT) | 
| +#ifndef OPENSSL_NO_NEXTPROTONEG | 
| #define SSL3_ST_CW_NEXT_PROTO_A		(0x200|SSL_ST_CONNECT) | 
| #define SSL3_ST_CW_NEXT_PROTO_B		(0x201|SSL_ST_CONNECT) | 
| +#endif | 
| #define SSL3_ST_CW_FINISHED_A		(0x1B0|SSL_ST_CONNECT) | 
| #define SSL3_ST_CW_FINISHED_B		(0x1B1|SSL_ST_CONNECT) | 
| /* read from server */ | 
| @@ -576,8 +623,10 @@ | 
| #define SSL3_ST_SR_CERT_VRFY_B		(0x1A1|SSL_ST_ACCEPT) | 
| #define SSL3_ST_SR_CHANGE_A		(0x1B0|SSL_ST_ACCEPT) | 
| #define SSL3_ST_SR_CHANGE_B		(0x1B1|SSL_ST_ACCEPT) | 
| +#ifndef OPENSSL_NO_NEXTPROTONEG | 
| #define SSL3_ST_SR_NEXT_PROTO_A		(0x210|SSL_ST_ACCEPT) | 
| #define SSL3_ST_SR_NEXT_PROTO_B		(0x211|SSL_ST_ACCEPT) | 
| +#endif | 
| #define SSL3_ST_SR_FINISHED_A		(0x1C0|SSL_ST_ACCEPT) | 
| #define SSL3_ST_SR_FINISHED_B		(0x1C1|SSL_ST_ACCEPT) | 
| /* write to client */ | 
| @@ -602,7 +651,9 @@ | 
| #define SSL3_MT_CLIENT_KEY_EXCHANGE		16 | 
| #define SSL3_MT_FINISHED			20 | 
| #define SSL3_MT_CERTIFICATE_STATUS		22 | 
| +#ifndef OPENSSL_NO_NEXTPROTONEG | 
| #define SSL3_MT_NEXT_PROTO			67 | 
| +#endif | 
| #define DTLS1_MT_HELLO_VERIFY_REQUEST    3 | 
|  | 
|  | 
| @@ -622,4 +673,3 @@ | 
| } | 
| #endif | 
| #endif | 
| - | 
|  |