From 8ad25ffba31a33d3607e5a6bd0d6c09a60772fe2 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Thu, 27 Aug 2026 18:44:27 -0700 Subject: [PATCH] Fix byte comparison. --- src/assembly/crypto_verify.ts | 4 ++-- src/assembly/utils.ts | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/assembly/crypto_verify.ts b/src/assembly/crypto_verify.ts index d19caf8..7bbfe9f 100644 --- a/src/assembly/crypto_verify.ts +++ b/src/assembly/crypto_verify.ts @@ -64,7 +64,7 @@ export function crypto_verify_relaxed (s: StaticArray, M: StaticArray, p ge_double_scalarmult_vartime_to_p3(sb_ah, h, A, S) ge_p3_tobytes(check_r, sb_ah) - return equalbytes(s, check_r) - 1 + return equalbytes(s, check_r, KEY_BYTELENGTH) - 1 } /** @@ -105,5 +105,5 @@ export function crypto_verify_strict (s: StaticArray, M: StaticArray, ml return ge_has_small_order(check) - 1 // if (ge_has_small_order(check) == 0) return -1 - // return equalbytes(s, check) - 1 + // return equalbytes(s, check, KEY_BYTELENGTH) - 1 } diff --git a/src/assembly/utils.ts b/src/assembly/utils.ts index f17565b..3453677 100644 --- a/src/assembly/utils.ts +++ b/src/assembly/utils.ts @@ -28,13 +28,14 @@ export function equal (b: i8, c: i8): u8 { * Constant-time byte comparison. * @param {StaticArray} f * @param {StaticArray} g - * @returns 1 if all bytes are equal, else 0 + * @param {i32} n + * @returns 1 if `n` bytes are equal, else 0 */ //@ts-expect-error @inline -export function equalbytes (f: StaticArray, g: StaticArray): u8 { +export function equalbytes (f: StaticArray, g: StaticArray, n: i32): u8 { let s: u8 = 0 - for (let i = 0; i < 12; i++) { + for (let i = 0; i < n; i++) { s |= f[i] ^ g[i] } return ((s - 1) >> 8) & 1 -- 2.52.0