59 lines
1.9 KiB
TypeScript
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);
|
|
});
|
|
});
|