diff --git a/src/poly.c b/src/poly.c index e7c7010..e3546cc 100644 --- a/src/poly.c +++ b/src/poly.c @@ -278,7 +278,7 @@ poly_inverse_poly_q(fmpz_poly_t a, fmpz_poly_t Fq, ntru_context *ctx) { - bool retval = true; + bool retval = false; int k = 0, j = 0; fmpz *b_last; @@ -325,10 +325,8 @@ poly_inverse_poly_q(fmpz_poly_t a, k++; - if (fmpz_poly_degree(f) == -1) { - retval = false; - goto cleanup; - } + if (fmpz_poly_degree(f) == -1) + goto _cleanup; } if (fmpz_poly_degree(f) == 0) @@ -349,10 +347,8 @@ poly_inverse_poly_q(fmpz_poly_t a, k = k % ctx->N; b_last = fmpz_poly_get_coeff_ptr(b, ctx->N); - if (b_last && fmpz_cmp_si(b_last, 0)) { - retval = false; - goto cleanup; - } + if (b_last && fmpz_cmp_si(b_last, 0)) + goto _cleanup; /* Fq(x) = x^(N-k) * b(x) */ for (int i = ctx->N - 1; i >= 0; i--) { @@ -372,19 +368,18 @@ poly_inverse_poly_q(fmpz_poly_t a, /* check if the f * Fq = 1 (mod p) condition holds true */ fmpz_poly_set(a_tmp, a); poly_starmultiply(a_tmp, Fq, a_tmp, ctx, ctx->q); - if (!fmpz_poly_is_one(a_tmp)) - retval = false; + if (fmpz_poly_is_one(a_tmp)) + retval = true; + else + fmpz_poly_zero(Fq); -cleanup: +_cleanup: fmpz_poly_clear(a_tmp); fmpz_poly_clear(b); fmpz_poly_clear(c); fmpz_poly_clear(f); fmpz_poly_clear(g); - if (!retval) - fmpz_poly_zero(Fq); - return retval; }