Reset |out_no_inverse| before returning errors in BN_mod_inverse_odd.

This more accurately reflects the documented contract for
|BN_mod_inverse_odd|.

Change-Id: Iae98dabe3943231859eaa5e798d06ebe0231b9f1
Reviewed-on: https://boringssl-review.googlesource.com/9160
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
This commit is contained in:
Brian Smith 2016-08-05 14:26:09 -10:00 committed by CQ bot account: commit-bot@chromium.org
parent 96e1a25943
commit e4a432687e

View File

@ -231,6 +231,8 @@ static int bn_mod_inverse_general(BIGNUM *out, int *out_no_inverse,
int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a, int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a,
const BIGNUM *n, BN_CTX *ctx) { const BIGNUM *n, BN_CTX *ctx) {
*out_no_inverse = 0;
if (!BN_is_odd(n)) { if (!BN_is_odd(n)) {
OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS); OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS);
return 0; return 0;
@ -245,8 +247,6 @@ int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a,
int ret = 0; int ret = 0;
int sign; int sign;
*out_no_inverse = 0;
BN_CTX_start(ctx); BN_CTX_start(ctx);
A = BN_CTX_get(ctx); A = BN_CTX_get(ctx);
B = BN_CTX_get(ctx); B = BN_CTX_get(ctx);