in src/ff.js [604:673]
invmodp: function(p) {
var n = p.length,
u = new FF(n),
v = new FF(n),
x1 = new FF(n),
x2 = new FF(n),
t = new FF(n),
one = new FF(n);
one.one();
u.copy(this);
v.copy(p);
x1.copy(one);
x2.zero();
// reduce n in here as well!
while (FF.comp(u, one) !== 0 && FF.comp(v, one) !== 0) {
while (u.parity() === 0) {
u.shr();
if (x1.parity() !== 0) {
x1.add(p);
x1.norm();
}
x1.shr();
}
while (v.parity() === 0) {
v.shr();
if (x2.parity() !== 0) {
x2.add(p);
x2.norm();
}
x2.shr();
}
if (FF.comp(u, v) >= 0) {
u.sub(v);
u.norm();
if (FF.comp(x1, x2) >= 0) {
x1.sub(x2);
} else {
t.copy(p);
t.sub(x2);
x1.add(t);
}
x1.norm();
} else {
v.sub(u);
v.norm();
if (FF.comp(x2, x1) >= 0) {
x2.sub(x1);
} else {
t.copy(p);
t.sub(x1);
x2.add(t);
}
x2.norm();
}
}
if (FF.comp(u, one) === 0) {
this.copy(x1);
} else {
this.copy(x2);
}
},