/* -*-c-*-
*
- * $Id: mp-modsqrt.c,v 1.1 2000/06/22 19:01:31 mdw Exp $
+ * $Id: mp-modsqrt.c,v 1.3 2001/02/03 12:00:29 mdw Exp $
*
* Compute square roots modulo a prime
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mp-modsqrt.c,v $
+ * Revision 1.3 2001/02/03 12:00:29 mdw
+ * Now @mp_drop@ checks its argument is non-NULL before attempting to free
+ * it. Note that the macro version @MP_DROP@ doesn't do this.
+ *
+ * Revision 1.2 2000/10/08 12:02:21 mdw
+ * Use @MP_EQ@ instead of @MP_CMP@.
+ *
* Revision 1.1 2000/06/22 19:01:31 mdw
* Compute square roots in a prime field.
*
/* --- Cope if %$a \not\in Q_p$% --- */
if (mp_jacobi(a, p) != 1) {
- if (d)
- mp_drop(d);
+ mp_drop(d);
return (0);
}
/* --- Fiddle at the end --- */
- if (MP_CMP(dd, ==, mone))
+ if (MP_EQ(dd, mone))
r = mpmont_mul(&mm, r, r, c);
c = mp_sqr(c, c);
c = mpmont_reduce(&mm, c, c);
d = mpmont_reduce(&mm, d, r);
mp_drop(ainv);
mp_drop(r); mp_drop(c);
- if (dd)
- mp_drop(dd);
+ mp_drop(dd);
mp_drop(mone);
mpmont_destroy(&mm);
if (!r)
ok = 0;
- else if (MP_CMP(r, ==, rr))
+ else if (MP_EQ(r, rr))
ok = 1;
else {
r = mp_sub(r, p, r);
- if (MP_CMP(r, ==, rr))
+ if (MP_EQ(r, rr))
ok = 1;
}
mp_drop(a);
mp_drop(p);
- if (r)
- mp_drop(r);
+ mp_drop(r);
mp_drop(rr);
assert(mparena_count(MPARENA_GLOBAL) == 0);
return (ok);