Files
suaveplan/packages/security-stack/crypto/crypto-sodium/src/engines/sodium-agree-engine/sodium-agree-engine.test.ts
2026-05-27 23:47:53 +01:00

59 lines
1.9 KiB
TypeScript

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);
});
});