import { describe, expect, it } from "@suaveplan/testing/runner"; import { constantTimeEqual } from "./constant-time-equal.js"; describe("constantTimeEqual", () => { it("returns true for identical buffers", { timeout: 5000 }, () => { const a = new Uint8Array([1, 2, 3]); const b = new Uint8Array([1, 2, 3]); expect(constantTimeEqual(a, b)).toBe(true); }); it("returns true for empty buffers", { timeout: 5000 }, () => { expect(constantTimeEqual(new Uint8Array(), new Uint8Array())).toBe( true ); }); it("returns false when contents differ at end", { timeout: 5000 }, () => { expect( constantTimeEqual( new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 4]) ) ).toBe(false); }); it("returns false when contents differ at start", { timeout: 5000 }, () => { expect( constantTimeEqual( new Uint8Array([0, 2, 3]), new Uint8Array([1, 2, 3]) ) ).toBe(false); }); it("returns false when lengths differ", { timeout: 5000 }, () => { expect( constantTimeEqual(new Uint8Array([1, 2]), new Uint8Array([1, 2, 3])) ).toBe(false); }); it("runs the full loop regardless of mismatch", { timeout: 5000 }, () => { // Property check: result only depends on whether any byte differs. const a = new Uint8Array(32); const b = new Uint8Array(32); a[0] = 1; b[0] = 2; a[31] = 3; b[31] = 4; expect(constantTimeEqual(a, b)).toBe(false); a[0] = 0; b[0] = 0; a[31] = 0; b[31] = 0; expect(constantTimeEqual(a, b)).toBe(true); }); });