92 lines
2.6 KiB
TypeScript
92 lines
2.6 KiB
TypeScript
import {describe, expect, test} from 'bun:test'
|
|
import {kdf, PrivateWrap} from '../index'
|
|
import {ecdh} from "../src/kdf";
|
|
|
|
describe('Passwords', () => {
|
|
test('Base case', async () => {
|
|
const p = "yeet"
|
|
const s = new Uint8Array(2)
|
|
|
|
const k1 = await kdf.pbkdf(s, p)
|
|
const k2 = await kdf.pbkdf(s, p)
|
|
|
|
expect(k1).toEqual(k2)
|
|
})
|
|
test('Different salt, different key', async () => {
|
|
const password = "yeet"
|
|
const s1 = new Uint8Array(1)
|
|
const s2 = new Uint8Array(2)
|
|
expect(s1).not.toEqual(s2)
|
|
|
|
const k1 = await kdf.pbkdf(s1, password)
|
|
const k2 = await kdf.pbkdf(s2, password)
|
|
|
|
expect(k2).not.toEqual(k1)
|
|
})
|
|
test('Different password, different key', async () => {
|
|
const p1 = "yeet"
|
|
const p2 = "yaat"
|
|
expect(p1).not.toBe(p2)
|
|
const s = new Uint8Array(2)
|
|
|
|
const k1 = await kdf.pbkdf(s, p1)
|
|
const k2 = await kdf.pbkdf(s, p2)
|
|
|
|
expect(k1).not.toBe(k2)
|
|
})
|
|
})
|
|
describe('HKDF', () => {
|
|
test ('Base case', async () => {
|
|
const k = new Uint8Array(12)
|
|
const usage = kdf.Usage.sign
|
|
|
|
const k1 = await kdf.hkdf(k, usage)
|
|
const k2 = await kdf.hkdf(k, usage)
|
|
|
|
expect(k2).toEqual(k1)
|
|
})
|
|
test('Different usage, different key', async () => {
|
|
const k = new Uint8Array(12)
|
|
const u1 = kdf.Usage.sign
|
|
const u2 = kdf.Usage.wrap
|
|
|
|
const k1 = await kdf.hkdf(k, u1)
|
|
const k2 = await kdf.hkdf(k, u2)
|
|
|
|
expect(k1).not.toEqual(k2)
|
|
})
|
|
test('Different input, different output', async () => {
|
|
const k1 = new Uint8Array(1)
|
|
const k2 = new Uint8Array(2)
|
|
const u = kdf.Usage.sign
|
|
|
|
const kd1 = await kdf.hkdf(k1, u)
|
|
const kd2 = await kdf.hkdf(k2, u)
|
|
|
|
expect(kd1).not.toEqual(kd2)
|
|
})
|
|
test.todo('Usages are set')
|
|
test.todo('Not extractable')
|
|
})
|
|
describe('ECDH', () => {
|
|
test('Base case', async () => {
|
|
const k1 = await PrivateWrap.gen_keypair()
|
|
const k2 = await PrivateWrap.gen_keypair()
|
|
|
|
const kd1 = await ecdh(k1.privateKey, k2.publicKey)
|
|
const kd2 = await ecdh(k2.privateKey, k1.publicKey)
|
|
|
|
expect(kd1).toEqual(kd2)
|
|
})
|
|
test('Different pubkey, different key', async () => {
|
|
const k1 = await PrivateWrap.gen_keypair()
|
|
const k2 = await PrivateWrap.gen_keypair()
|
|
const k3 = await PrivateWrap.gen_keypair()
|
|
|
|
const kd1 = await ecdh(k1.privateKey, k2.publicKey)
|
|
const kd2 = await ecdh(k3.privateKey, k1.publicKey)
|
|
|
|
expect(kd1).not.toBe(kd2)
|
|
})
|
|
})
|