mirror of https://github.com/openssl/openssl.git
				
				
				
			e_aes_cbc_hmac_sha1.c: handle zero-length payload and engage empty frag
countermeasure. PR: 2778
This commit is contained in:
		
							parent
							
								
									26e6bac143
								
							
						
					
					
						commit
						fc90e42c86
					
				|  | @ -82,6 +82,8 @@ typedef struct | ||||||
|     } aux; |     } aux; | ||||||
|     } EVP_AES_HMAC_SHA1; |     } EVP_AES_HMAC_SHA1; | ||||||
| 
 | 
 | ||||||
|  | #define NO_PAYLOAD_LENGTH	((size_t)-1) | ||||||
|  | 
 | ||||||
| #if	defined(AES_ASM) &&	( \ | #if	defined(AES_ASM) &&	( \ | ||||||
| 	defined(__x86_64)	|| defined(__x86_64__)	|| \ | 	defined(__x86_64)	|| defined(__x86_64__)	|| \ | ||||||
| 	defined(_M_AMD64)	|| defined(_M_X64)	|| \ | 	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->tail = key->head; | ||||||
| 	key->md   = key->head; | 	key->md   = key->head; | ||||||
| 
 | 
 | ||||||
| 	key->payload_length = 0; | 	key->payload_length = NO_PAYLOAD_LENGTH; | ||||||
| 
 | 
 | ||||||
| 	return ret<0?0:1; | 	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 (len%AES_BLOCK_SIZE) return 0; | ||||||
| 
 | 
 | ||||||
| 	if (ctx->encrypt) { | 	if (ctx->encrypt) { | ||||||
| 		if (plen==0) | 		if (plen==NO_PAYLOAD_LENGTH) | ||||||
| 			plen = len; | 			plen = len; | ||||||
| 		else if (len!=((plen+SHA_DIGEST_LENGTH+AES_BLOCK_SIZE)&-AES_BLOCK_SIZE)) | 		else if (len!=((plen+SHA_DIGEST_LENGTH+AES_BLOCK_SIZE)&-AES_BLOCK_SIZE)) | ||||||
| 			return 0; | 			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; | 	return 1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -664,10 +664,14 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | ||||||
| 	if (	(sess == NULL) || | 	if (	(sess == NULL) || | ||||||
| 		(s->enc_write_ctx == NULL) || | 		(s->enc_write_ctx == NULL) || | ||||||
| 		(EVP_MD_CTX_md(s->write_hash) == 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; | 		clear=1; | ||||||
| 
 | #endif | ||||||
| 	if (clear) |  | ||||||
| 		mac_size=0; | 		mac_size=0; | ||||||
|  | 		} | ||||||
| 	else | 	else | ||||||
| 		{ | 		{ | ||||||
| 		mac_size=EVP_MD_CTX_size(s->write_hash); | 		mac_size=EVP_MD_CTX_size(s->write_hash); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue