diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2012-02-10 16:55:17 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2012-02-10 16:55:17 +0000 |
commit | f94cfe6a12964ec5801d5dfb61efdb6d6eebcfa1 (patch) | |
tree | 54832368710dbaab350ea7164bdcd55335cbde08 /crypto | |
parent | 7951c2699f1b78d5480b9f41a71233fcaf98d18f (diff) |
only cleanup ctx if we need to, save ctx flags when we do
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/evp/evp_enc.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index 8d57d204d6..5b3bf3bb2c 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -115,10 +115,14 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp /* Ensure a context left lying around from last time is cleared * (the previous check attempted to avoid this if the same * ENGINE and EVP_CIPHER could be used). */ - EVP_CIPHER_CTX_cleanup(ctx); - - /* Restore encrypt field: it is zeroed by cleanup */ - ctx->encrypt = enc; + if (ctx->cipher) + { + unsigned long flags = ctx->flags; + EVP_CIPHER_CTX_cleanup(ctx); + /* Restore encrypt and flags */ + ctx->encrypt = enc; + ctx->flags = flags; + } #ifndef OPENSSL_NO_ENGINE if(impl) { |