refactor common logic
This commit is contained in:
@@ -53,14 +53,19 @@ function modpow(base, exponent, modulus) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function witness(a, n) {
|
function factorTwos(n) {
|
||||||
let d = n - 1n;
|
|
||||||
let s = 0;
|
let s = 0;
|
||||||
while (d % 2n === 0n) {
|
while (n % 2n === 0n) {
|
||||||
d /= 2n;
|
n /= 2n;
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return [n, s];
|
||||||
|
}
|
||||||
|
|
||||||
|
function witness(a, n) {
|
||||||
|
const [d, s] = factorTwos(n - 1n);
|
||||||
|
|
||||||
let x = modpow(a, d, n);
|
let x = modpow(a, d, n);
|
||||||
let y = null;
|
let y = null;
|
||||||
for (let i = 0; i < s; i++) {
|
for (let i = 0; i < s; i++) {
|
||||||
@@ -106,13 +111,7 @@ function quadraticNonResidue(p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function tonelliShanks(n, p) {
|
function tonelliShanks(n, p) {
|
||||||
let q = p - 1n;
|
const [q, s] = factorTwos(p - 1n);
|
||||||
let s = 0;
|
|
||||||
while (q % 2n === 0n) {
|
|
||||||
q /= 2n;
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
|
|
||||||
const z = quadraticNonResidue(p);
|
const z = quadraticNonResidue(p);
|
||||||
|
|
||||||
let m = s;
|
let m = s;
|
||||||
|
|||||||
Reference in New Issue
Block a user