Commit fc90e42c authored by Andy Polyakov's avatar Andy Polyakov
Browse files

e_aes_cbc_hmac_sha1.c: handle zero-length payload and engage empty frag

countermeasure.

PR: 2778
parent 26e6bac1
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ typedef struct
    } aux;
    } EVP_AES_HMAC_SHA1;

#define NO_PAYLOAD_LENGTH	((size_t)-1)

#if	defined(AES_ASM) &&	( \
	defined(__x86_64)	|| defined(__x86_64__)	|| \
	defined(_M_AMD64)	|| defined(_M_X64)	|| \
@@ -123,7 +125,7 @@ static int aesni_cbc_hmac_sha1_init_key(EVP_CIPHER_CTX *ctx,
	key->tail = key->head;
	key->md   = key->head;

	key->payload_length = 0;
	key->payload_length = NO_PAYLOAD_LENGTH;

	return ret<0?0:1;
	}
@@ -184,7 +186,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
	if (len%AES_BLOCK_SIZE) return 0;

	if (ctx->encrypt) {
		if (plen==0)
		if (plen==NO_PAYLOAD_LENGTH)
			plen = len;
		else if (len!=((plen+SHA_DIGEST_LENGTH+AES_BLOCK_SIZE)&-AES_BLOCK_SIZE))
			return 0;
@@ -270,7 +272,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
		}
	}

	key->payload_length = 0;
	key->payload_length = NO_PAYLOAD_LENGTH;

	return 1;
	}
+6 −2
Original line number Diff line number Diff line
@@ -664,10 +664,14 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
	if (	(sess == NULL) ||
		(s->enc_write_ctx == NULL) ||
		(EVP_MD_CTX_md(s->write_hash) == NULL))
		{
#if 1
		clear=s->enc_write_ctx?0:1;	/* must be AEAD cipher */
#else
		clear=1;

	if (clear)
#endif
		mac_size=0;
		}
	else
		{
		mac_size=EVP_MD_CTX_size(s->write_hash);