import {beforeAll, expect, test} from 'bun:test' import {PrivateWrap, SecretBox} from '..' import {pubkey_toString} from '../src/misc' let k1!: CryptoKeyPair let k2!: CryptoKeyPair let message!: CryptoKey beforeAll(async () => { k1 = await PrivateWrap.gen(false) k2 = await PrivateWrap.gen(true) message = await SecretBox.gen(true) }) test('base case', async () => { const box = await PrivateWrap.wrap(message, k1.publicKey) expect(box).not.toBeNull() const unboxed = await box!.unwrap(k1.privateKey) expect(unboxed).toEqual(message) }) test("Different key can't decrypt", async () => { const box = await PrivateWrap.wrap(message, k1.publicKey) expect(box).not.toBeNull() const unboxed = await box!.unwrap(k2.privateKey) expect(unboxed).toBeNull() }) test('Key generation', async () => { const ser1 = await pubkey_toString(k1.publicKey) const ser2 = await pubkey_toString(k2.publicKey) expect(ser1).not.toEqual(ser2) expect(k1.privateKey.extractable).toBeFalse() expect(k1.publicKey.extractable).toBeTrue() expect(k2.privateKey.extractable).toBeTrue() expect(k2.publicKey.extractable).toBeTrue() }) test("Encryption works with context", async () => { const context = 'Super context !' const box = await PrivateWrap.wrap(message, k1.publicKey, context) expect(box).not.toBeNull() const unboxed = await box!.unwrap(k1.privateKey, context) expect(unboxed).not.toBeNull() }) test("Encryption doesn't work with different context", async () => { const context1 = 'Super context !' const context2 = 'Awesome context !' const box = await PrivateWrap.wrap(message, k1.publicKey, context1) expect(box).not.toBeNull() const unboxed = await box!.unwrap(k1.privateKey, context2) expect(unboxed).toBeNull() }) test('serialization', async () => { const box = await PrivateWrap.wrap(message, k1.publicKey) expect(box).not.toBeNull() const ser = await box!.toString() const de = await PrivateWrap.fromString(ser) expect(de).not.toBeNull() expect(de).toEqual(box) })