diff options
author | Tomas Mraz <tomas@openssl.org> | 2021-04-15 09:55:04 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2021-04-19 10:01:08 +0200 |
commit | d6c6f6c51d0d9bb02d5b40a8a69471f6a2929617 (patch) | |
tree | 0c5cbe9559a34e1d3590be1c5c825b875a288fb9 | |
parent | Change the default MANSUFFIX (diff) | |
download | openssl-d6c6f6c51d0d9bb02d5b40a8a69471f6a2929617.tar.xz openssl-d6c6f6c51d0d9bb02d5b40a8a69471f6a2929617.zip |
Do IV reset also for DES and 3DES implementations
Fixes #14704
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/14882)
-rw-r--r-- | providers/implementations/ciphers/cipher_des.c | 3 | ||||
-rw-r--r-- | providers/implementations/ciphers/cipher_tdes_common.c | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/providers/implementations/ciphers/cipher_des.c b/providers/implementations/ciphers/cipher_des.c index 9010ce9099..4563ea2edb 100644 --- a/providers/implementations/ciphers/cipher_des.c +++ b/providers/implementations/ciphers/cipher_des.c @@ -86,6 +86,9 @@ static int des_init(void *vctx, const unsigned char *key, size_t keylen, if (iv != NULL) { if (!ossl_cipher_generic_initiv(ctx, iv, ivlen)) return 0; + } else if (ctx->iv_set) { + /* reset IV to keep compatibility with 1.1.1 */ + memcpy(ctx->iv, ctx->oiv, ctx->ivlen); } if (key != NULL) { diff --git a/providers/implementations/ciphers/cipher_tdes_common.c b/providers/implementations/ciphers/cipher_tdes_common.c index 048b08661d..88acc16049 100644 --- a/providers/implementations/ciphers/cipher_tdes_common.c +++ b/providers/implementations/ciphers/cipher_tdes_common.c @@ -77,6 +77,12 @@ static int tdes_init(void *vctx, const unsigned char *key, size_t keylen, if (iv != NULL) { if (!ossl_cipher_generic_initiv(ctx, iv, ivlen)) return 0; + } else if (ctx->iv_set + && (ctx->mode == EVP_CIPH_CBC_MODE + || ctx->mode == EVP_CIPH_CFB_MODE + || ctx->mode == EVP_CIPH_OFB_MODE)) { + /* reset IV to keep compatibility with 1.1.1 */ + memcpy(ctx->iv, ctx->oiv, ctx->ivlen); } if (key != NULL) { |