diff options
author | Matt Caswell <matt@openssl.org> | 2020-08-18 12:28:45 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2020-08-20 17:02:34 +0100 |
commit | a361cb841d75eae2c1c385f869fbdb598d2c60a7 (patch) | |
tree | 08a0f389350feb3ec9542ff48e1fe7391fbb6906 /providers/implementations/ciphers | |
parent | 2a33470b4f23bcf1cd66bbf645c855142efa0ed9 (diff) |
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 <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/12670)
Diffstat (limited to 'providers/implementations/ciphers')
-rw-r--r-- | providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c | 22 |
1 files changed, 22 insertions, 0 deletions
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 <openssl/ssl.h> #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; } |