summaryrefslogtreecommitdiffstats
path: root/crypto/evp
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2012-02-10 16:54:56 +0000
committerDr. Stephen Henson <steve@openssl.org>2012-02-10 16:54:56 +0000
commit8705846710caf9da99b8e591792c3ea0b6225c7d (patch)
tree27e34d01c5235ae1ef979a1b6e601f21dbb5a7ce /crypto/evp
parentc944a9696e67f9583fe7595740a3c5cc0a6b022c (diff)
only cleanup ctx if we need to, save ctx flags when we do
Diffstat (limited to 'crypto/evp')
-rw-r--r--crypto/evp/evp_enc.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c
index 8828327d92..691072655b 100644
--- a/crypto/evp/evp_enc.c
+++ b/crypto/evp/evp_enc.c
@@ -125,10 +125,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)
{