diff --git a/workers/math.js b/workers/math.js index f1cc164..f610a93 100644 --- a/workers/math.js +++ b/workers/math.js @@ -184,17 +184,24 @@ function modsqrt(n, modulus) { n += modulus; } + let r = null; if (n % modulus === 0n) { - return 0n; + r = 0n; } else if (modulus === 2n) { - return n % 2n; + r = n % 2n; } else if (legendreSymbol(n, modulus) !== 1n) { throw new Error("radicand is not a quadratic residue of the modulus"); } else if (modulus % 4n === 3n) { - return modpow(n, (modulus+1n)/4n, modulus); + r = modpow(n, (modulus+1n)/4n, modulus); + } else { + r = tonelliShanks(n, modulus); } - return tonelliShanks(n, modulus); + if (modulus - r <= r) { + r = modulus - r; + } + + return r; } function ord(n, modulus) {