in src/ff.js [1159:1221]
FF.prime = function(p, rng) {
var n = p.length,
s = 0,
loop,
d = new FF(n),
x = new FF(n),
unity = new FF(n),
nm1 = new FF(n),
sf = 4849845, /* 3*5*.. *19 */
i, j;
p.norm();
if (p.cfactor(sf)) {
return false;
}
unity.one();
nm1.copy(p);
nm1.sub(unity);
nm1.norm();
d.copy(nm1);
while (d.parity() === 0) {
d.shr();
s++;
}
if (s === 0) {
return false;
}
for (i = 0; i < 10; i++) {
x.randomnum(p, rng);
x.pow(d, p);
if (FF.comp(x, unity) === 0 || FF.comp(x, nm1) === 0) {
continue;
}
loop = false;
for (j = 1; j < s; j++) {
x.power(2, p);
if (FF.comp(x, unity) === 0) {
return false;
}
if (FF.comp(x, nm1) === 0) {
loop = true;
break;
}
}
if (loop) {
continue;
}
return false;
}
return true;
};