From: Matt Caswell Date: Tue, 18 Aug 2020 11:28:45 +0000 (+0100) Subject: Fix stitched ciphersuites in TLS1.0 X-Git-Tag: openssl-3.0.0-alpha7~544 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a361cb841d75eae2c1c385f869fbdb598d2c60a7;p=thirdparty%2Fopenssl.git Fix stitched ciphersuites in TLS1.0 TLS1.0 does not have an explicit IV in the record, and therefore we should not attempt to remove it. Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/12670) --- diff --git a/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c b/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c index ae853b7eb9..9c927352a2 100644 --- a/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c +++ b/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c @@ -16,6 +16,8 @@ /* Dispatch functions for AES_CBC_HMAC_SHA ciphers */ +/* Only for SSL3_VERSION and TLS1_VERSION */ +#include #include "cipher_aes_cbc_hmac_sha.h" #include "prov/implementations.h" @@ -172,6 +174,26 @@ static int aes_set_ctx_params(void *vctx, const OSSL_PARAM params[]) return 0; } } + + p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_TLS_VERSION); + if (p != NULL) { + if (!OSSL_PARAM_get_uint(p, &ctx->base.tlsversion)) { + ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER); + return 0; + } + if (ctx->base.tlsversion == SSL3_VERSION + || ctx->base.tlsversion == TLS1_VERSION) { + if (!ossl_assert(ctx->base.removetlspad >= AES_BLOCK_SIZE)) { + ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR); + return 0; + } + /* + * There is no explicit IV with these TLS versions, so don't attempt + * to remove it. + */ + ctx->base.removetlspad -= AES_BLOCK_SIZE; + } + } return ret; }