From: Chris Duncan Date: Wed, 25 Feb 2026 23:16:19 +0000 (-0800) Subject: Add check for canonical scalar S from signature. X-Git-Tag: v1.0.0~19 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=e254cd0b368d72bd8a5beb71b5d5533a5020c452;p=nano25519.git Add check for canonical scalar S from signature. --- diff --git a/assembly/nano-nacl.ts b/assembly/nano-nacl.ts index 5bcc896..1119380 100644 --- a/assembly/nano-nacl.ts +++ b/assembly/nano-nacl.ts @@ -806,6 +806,20 @@ function unpackneg (r: Array>, p: StaticArray): i8 { return 0 } +// Validate signature scalar S is canonical (S < L) +function canonical (S: StaticArray): boolean { + // If S >= 2^253 then S >= L for sure. + if ((S[32] & 0xE0) != 0) return false + + // Check S-L for underflow (c=1) which means S < L + let c = 0 + for (let i = 0; i < 32; i++) { + const diff = S[i] - L[i] - c + c = (diff >> 31) & 1 + } + return c == 1 +} + const blake2b = new Blake2b() function crypto_hash (o: StaticArray, i: StaticArray): void { blake2b.init().update(i).digest(o) @@ -917,9 +931,7 @@ function crypto_verify (h: StaticArray, s: StaticArray, k: StaticArray, s: StaticArray, k: StaticArray