From: Chris Duncan Date: Mon, 18 Aug 2025 14:20:45 +0000 (-0700) Subject: Refactor vn and document behavior. X-Git-Tag: v0.10.5~41^2~76 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=380951c8ad3eeeeba470b9066707f70c3818f343;p=libnemo.git Refactor vn and document behavior. --- diff --git a/src/lib/crypto/nano-nacl.ts b/src/lib/crypto/nano-nacl.ts index 63273a0..9d6d1b9 100644 --- a/src/lib/crypto/nano-nacl.ts +++ b/src/lib/crypto/nano-nacl.ts @@ -26,12 +26,17 @@ export class NanoNaCl { static I: Float64Array = new Float64Array([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]) static XY: Float64Array = new Float64Array([0xdd90, 0xa5b7, 0x8ab3, 0x6dde, 0x52f5, 0x7751, 0x9f80, 0x20f0, 0xe37d, 0x64ab, 0x4e8e, 0x66ea, 0x7665, 0xd78b, 0x5f0f, 0xe787]) - static #vn (x: Uint8Array, xi: number, y: Uint8Array, yi: number, n: number): number { + /** + * Checks first 32 bytes of two byte arrays to see if they are equivalent. + * + * @returns 0 if first 32 bytes are equal, else 1 if there is at least one bit difference + */ + static #vn (x: Uint8Array, y: Uint8Array): number { let d: number = 0 - for (let i = 0; i < n; i++) { - d |= x[xi + i] ^ y[yi + i] + for (let i = 0; i < 32; i++) { + d |= x[i] ^ y[i] } - return (1 & ((d - 1) >>> 8)) - 1 + return ((1 & ((d - 1) >>> 8)) - 1) & 1 } static pow2523 (out: Float64Array, i: Float64Array): void { @@ -82,7 +87,7 @@ export class NanoNaCl { const d: Uint8Array = new Uint8Array(32) this.pack25519(c, a) this.pack25519(d, b) - return this.#vn(c, 0, d, 0, 32) + return this.#vn(c, d) } static pack25519 (out: Uint8Array, n: Float64Array): void {