Commit 0d5096fb authored by Andy Polyakov's avatar Andy Polyakov
Browse files

evp/e_aes_cbc_hmac_sha*.c: additional CTRL to query buffer requirements.

parent 3847d15d
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -775,6 +775,8 @@ static int aesni_cbc_hmac_sha1_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void
			}
		}
#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
	case EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE:
		return (int)(5+16+((arg+20+16)&-16));
	case EVP_CTRL_TLS1_1_MULTIBLOCK_AAD:
		{
		EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
@@ -791,10 +793,17 @@ static int aesni_cbc_hmac_sha1_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void
			if ((param->inp[9]<<8|param->inp[10]) < TLS1_1_VERSION)
				return -1;

			if (inp_len)
				{
				if (inp_len<4096) return 0;	/* too short */

				if (inp_len>=8192 && OPENSSL_ia32cap_P[2]&(1<<5))
					n4x=2;	/* AVX2 */
				}
			else if ((n4x=param->interleave/4) && n4x<=2)
				inp_len = param->len;
			else
				return -1;

			key->md = key->head;
			SHA1_Update(&key->md,param->inp,13);
+12 −3
Original line number Diff line number Diff line
@@ -728,6 +728,8 @@ static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, vo
			}
		}
#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
	case EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE:
		return (int)(5+16+((arg+32+16)&-16));
	case EVP_CTRL_TLS1_1_MULTIBLOCK_AAD:
		{
		EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
@@ -744,10 +746,17 @@ static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, vo
			if ((param->inp[9]<<8|param->inp[10]) < TLS1_1_VERSION)
				return -1;

			if (inp_len)
				{
				if (inp_len<4096) return 0;	/* too short */

				if (inp_len>=8192 && OPENSSL_ia32cap_P[2]&(1<<5))
					n4x=2;	/* AVX2 */
				}
			else if ((n4x=param->interleave/4) && n4x<=2)
				inp_len = param->len;
			else
				return -1;

			key->md = key->head;
			SHA256_Update(&key->md,param->inp,13);
+1 −0
Original line number Diff line number Diff line
@@ -413,6 +413,7 @@ struct evp_cipher_st
#define		EVP_CTRL_TLS1_1_MULTIBLOCK_AAD	0x19
#define		EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT	0x1a
#define		EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT	0x1b
#define		EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE	0x1c

typedef struct {
	unsigned char *out;