libmp: with mpmod() m = 2^a - c ensure that digits(c) < digits(m)
This commit is contained in:
parent
fbd825890e
commit
ffdfc17cee
|
@ -13,7 +13,7 @@ mpmod(mpint *x, mpint *n, mpint *r)
|
||||||
sign = x->sign;
|
sign = x->sign;
|
||||||
|
|
||||||
assert(n->flags & MPnorm);
|
assert(n->flags & MPnorm);
|
||||||
if(n->top < 2 || n->top > nelem(q) || (x->top-n->top) > nelem(q))
|
if(n->top <= 2 || n->top > nelem(q) || (x->top-n->top) > nelem(q))
|
||||||
goto hard;
|
goto hard;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -42,11 +42,15 @@ mpmod(mpint *x, mpint *n, mpint *r)
|
||||||
c = mpnew(0);
|
c = mpnew(0);
|
||||||
p = mpnew(0);
|
p = mpnew(0);
|
||||||
}
|
}
|
||||||
mpassign(n, p);
|
mpleft(p, s, m);
|
||||||
|
|
||||||
mpleft(n, s, m);
|
|
||||||
mpleft(mpone, k*Dbits, c);
|
mpleft(mpone, k*Dbits, c);
|
||||||
mpsub(c, m, c);
|
mpsub(c, m, c);
|
||||||
|
if(c->top >= k){
|
||||||
|
mpassign(mpzero, p);
|
||||||
|
busy = 0;
|
||||||
|
goto hard;
|
||||||
|
}
|
||||||
|
mpassign(n, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
mpleft(x, s, r);
|
mpleft(x, s, r);
|
||||||
|
|
Loading…
Reference in a new issue