aboutsummaryrefslogtreecommitdiff
path: root/crypto/evp/asymcipher.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/evp/asymcipher.c')
-rw-r--r--crypto/evp/asymcipher.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/crypto/evp/asymcipher.c b/crypto/evp/asymcipher.c
index 975170c0aa09..c97ce338fdf8 100644
--- a/crypto/evp/asymcipher.c
+++ b/crypto/evp/asymcipher.c
@@ -261,10 +261,12 @@ int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
cipher = ctx->op.ciph.cipher;
desc = cipher->description != NULL ? cipher->description : "";
+ ERR_set_mark();
ret = cipher->encrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
"%s encrypt:%s", cipher->type_name, desc);
+ ERR_clear_last_mark();
return ret;
legacy:
@@ -309,10 +311,12 @@ int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
cipher = ctx->op.ciph.cipher;
desc = cipher->description != NULL ? cipher->description : "";
+ ERR_set_mark();
ret = cipher->decrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
"%s decrypt:%s", cipher->type_name, desc);
+ ERR_clear_last_mark();
return ret;