diff --git a/parametrizations.c b/parametrizations.c index a13b64668a572bfd2952ccc53256071cd877a31e..25590694adec1d19ca438d4dc099f9661691d97a 100644 --- a/parametrizations.c +++ b/parametrizations.c @@ -164,6 +164,7 @@ get_curve_from_param0 (mpz_t f, mpres_t A, mpres_t x, mpz_t sigma, mpmod_t n) { mpres_t t, u, v, b, z; mpz_t tmp; + int ret = ECM_NO_FACTOR_FOUND; mpres_init (t, n); mpres_init (u, n); @@ -176,7 +177,10 @@ get_curve_from_param0 (mpz_t f, mpres_t A, mpres_t x, mpz_t sigma, mpmod_t n) /* TODO add -5 -3 -1 and +/- 5/3 */ if (mpz_cmp_ui (tmp, 5) == 0 || mpz_cmp_ui (tmp, 3) == 0 || mpz_cmp_ui (tmp, 1) == 0 || mpz_sgn (tmp) == 0) - return ECM_ERROR; + { + ret = ECM_ERROR; + goto clear_and_exit; + } mpres_set_z (u, sigma, n); mpres_mul_ui (v, u, 4, n); /* v = (4*sigma) mod n */ @@ -208,9 +212,10 @@ get_curve_from_param0 (mpz_t f, mpres_t A, mpres_t x, mpz_t sigma, mpmod_t n) mpres_clear (z, n); mpz_clear (tmp); if (mpz_cmp (f, n->orig_modulus) == 0) - return ECM_ERROR; + ret = ECM_ERROR; else - return ECM_FACTOR_FOUND_STEP1; + ret = ECM_FACTOR_FOUND_STEP1; + goto clear_and_exit; } mpres_mul (v, u, b, n); /* v = z^(-1) (mod n) */ @@ -227,7 +232,8 @@ get_curve_from_param0 (mpz_t f, mpres_t A, mpres_t x, mpz_t sigma, mpmod_t n) mpres_clear (z, n); mpz_clear (tmp); - return ECM_NO_FACTOR_FOUND; + clear_and_exit: + return ret; } /* Parametrization ECM_PARAM_BATCH_SQUARE */ @@ -253,7 +259,10 @@ get_curve_from_param1 (mpres_t A, mpres_t x0, mpz_t sigma, mpmod_t n) mpz_mod (tmp, tmp, n->orig_modulus); /* TODO add d!=-1/8*/ if (mpz_sgn (tmp) == 0 || mpz_cmp_ui (tmp, 1) == 0) - return ECM_ERROR; + { + mpz_clear (tmp); + return ECM_ERROR; + } mpz_mul_2exp (tmp, tmp, 2); /* 4d */ mpz_sub_ui (tmp, tmp, 2); /* 4d-2 */