From b02774e72537ad80233e22802615abd03ff1ab93 Mon Sep 17 00:00:00 2001 From: filifa Date: Thu, 11 Dec 2025 23:49:35 -0500 Subject: [PATCH] always return smallest sqrt --- workers/math.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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) {