X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/7c40480318648672af86e03bc72bc45c07194c37..298182ad446aaced14dea7ed0e7c968946787288:/mp-gcd.c diff --git a/mp-gcd.c b/mp-gcd.c index 5312400..c78181f 100644 --- a/mp-gcd.c +++ b/mp-gcd.c @@ -118,19 +118,19 @@ void mp_gcd(mp **gcd, mp **xx, mp **yy, mp *a, mp *b) return; } - /* --- Take a reference to the arguments --- */ + /* --- Force the signs on the arguments and take copies --- */ a = MP_COPY(a); b = MP_COPY(b); - /* --- Make sure @a@ and @b@ are not both even --- */ - MP_SPLIT(a); a->f &= ~MP_NEG; MP_SPLIT(b); b->f &= ~MP_NEG; u = MP_COPY(a); v = MP_COPY(b); + /* --- Main extended Euclidean algorithm --- */ + while (!MP_ZEROP(v)) { mp *t; mp_div(&q, &u, u, v);