X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/50c46275b6a5100b020493adbd27bc361704ffda..cf76bcbb2097c36912fae1c8a6cc77f0ce4bfafd:/gf-gcd.c diff --git a/gf-gcd.c b/gf-gcd.c index 622679a..048d29d 100644 --- a/gf-gcd.c +++ b/gf-gcd.c @@ -106,15 +106,7 @@ void gf_gcd(mp **gcd, mp **xx, mp **yy, mp *a, mp *b) return; } - /* --- Take a reference to the arguments --- */ - - 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; + /* --- Main extended Euclidean algorithm --- */ u = MP_COPY(a); v = MP_COPY(b); @@ -124,10 +116,10 @@ void gf_gcd(mp **gcd, mp **xx, mp **yy, mp *a, mp *b) gf_div(&q, &u, u, v); if (f & f_ext) { t = gf_mul(MP_NEW, X, q); - t = gf_add(t, x, t); + t = gf_add(t, t, x); MP_DROP(x); x = X; X = t; t = gf_mul(MP_NEW, Y, q); - t = gf_add(t, y, t); + t = gf_add(t, t, y); MP_DROP(y); y = Y; Y = t; } t = u; u = v; v = t; @@ -172,7 +164,6 @@ void gf_gcd(mp **gcd, mp **xx, mp **yy, mp *a, mp *b) MP_DROP(v); MP_DROP(X); MP_DROP(Y); - MP_DROP(a); MP_DROP(b); } /* -- @gf_modinv@ --- *