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);