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:
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;
return 0;
}
+ ERR_set_mark();
ret = signature->digest_sign_update(pctx->op.sig.algctx, data, dsize);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_sign_update:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
return ret;
legacy:
return 0;
}
+ ERR_set_mark();
ret = signature->digest_verify_update(pctx->op.sig.algctx, data, dsize);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_verify_update:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
return ret;
legacy:
pctx = dctx;
}
+ ERR_set_mark();
r = signature->digest_sign_final(pctx->op.sig.algctx, sigret, siglen,
sigret == NULL ? 0 : *siglen);
- if (!r)
+ if (!r && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_sign_final:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
if (dctx == NULL && sigret != NULL)
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
else
if (sigret != NULL)
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
+ ERR_set_mark();
ret = signature->digest_sign(pctx->op.sig.algctx, sigret, siglen,
sigret == NULL ? 0 : *siglen, tbs, tbslen);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_sign:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
return ret;
}
} else {
pctx = dctx;
}
+ ERR_set_mark();
r = signature->digest_verify_final(pctx->op.sig.algctx, sig, siglen);
- if (!r)
+ if (!r && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_verify_final:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
if (dctx == NULL)
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
else
int ret;
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
+ ERR_set_mark();
ret = signature->digest_verify(pctx->op.sig.algctx, sigret, siglen, tbs, tbslen);
- if (ret <= 0)
+ if (ret <= 0 && ERR_count_to_mark() == 0)
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
"%s digest_verify:%s", signature->type_name, desc);
+ ERR_clear_last_mark();
return ret;
}
} else {