import { beforeAll, describe, expect, it } from "@suaveplan/testing/runner"; import { sodiumReady } from "../../init/init.js"; import { sodiumAgreeEngine } from "./sodium-agree-engine.js"; describe("sodiumAgreeEngine", () => { beforeAll(async () => { await sodiumReady(); }, 30_000); it("generateKeypair returns 32-byte public and secret keys", { timeout: 30_000, }, () => { const kp = sodiumAgreeEngine.generateKeypair(); expect(kp.publicKey.length).toBe(32); expect(kp.secretKey.length).toBe(32); }); it("agree produces the same shared secret for both parties", { timeout: 30_000, }, () => { const alice = sodiumAgreeEngine.generateKeypair(); const bob = sodiumAgreeEngine.generateKeypair(); const aliceShared = sodiumAgreeEngine.agree( alice.secretKey, bob.publicKey ); const bobShared = sodiumAgreeEngine.agree( bob.secretKey, alice.publicKey ); expect(aliceShared).toEqual(bobShared); }); it("shared secret is 32 bytes", { timeout: 30_000 }, () => { const alice = sodiumAgreeEngine.generateKeypair(); const bob = sodiumAgreeEngine.generateKeypair(); const shared = sodiumAgreeEngine.agree(alice.secretKey, bob.publicKey); expect(shared.length).toBe(32); }); it("different keypairs produce different shared secrets", { timeout: 30_000, }, () => { const alice = sodiumAgreeEngine.generateKeypair(); const bob = sodiumAgreeEngine.generateKeypair(); const charlie = sodiumAgreeEngine.generateKeypair(); const shared1 = sodiumAgreeEngine.agree(alice.secretKey, bob.publicKey); const shared2 = sodiumAgreeEngine.agree( alice.secretKey, charlie.publicKey ); expect(shared1).not.toEqual(shared2); }); });