File size: 2,124 Bytes
abc1805
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { describe, expect, test } from "bun:test";
import {
    generateKeyPair,
    exportKey,
    importKey,
    encryptMessage,
    decryptMessage,
    generateSymKey,
    encryptSymMessage,
    decryptSymMessage,
    exportSymKey,
    importSymKey
} from "./crypto";

describe("Crypto Logic", () => {
    test("should generate key pair", async () => {
        const keyPair = await generateKeyPair();
        expect(keyPair.publicKey).toBeDefined();
        expect(keyPair.privateKey).toBeDefined();
    });

    test("should export and import keys", async () => {
        const keyPair = await generateKeyPair();
        const exportedPublic = await exportKey(keyPair.publicKey);
        const importedPublic = await importKey(exportedPublic, ["encrypt"]);
        expect(importedPublic).toBeDefined();
    });

    test("should encrypt and decrypt message", async () => {
        const keyPair = await generateKeyPair();
        const message = "Hello, World!";
        const encrypted = await encryptMessage(keyPair.publicKey, message);
        const decrypted = await decryptMessage(keyPair.privateKey, encrypted);
        expect(decrypted).toBe(message);
    });

    test("should encrypt and decrypt symmetric message", async () => {
        const key = await generateSymKey();
        const message = "Secret Message";
        const encrypted = await encryptSymMessage(key, message);
        const decrypted = await decryptSymMessage(key, encrypted);
        expect(decrypted).toBe(message);
    });

    test("should export and import symmetric keys", async () => {
        const key = await generateSymKey();
        const exported = await exportSymKey(key);
        const imported = await importSymKey(exported);
        expect(imported).toBeDefined();

        // Verify imported key works
        const message = "Test Key Import";
        const encrypted = await encryptSymMessage(imported, message);
        const decrypted = await decryptSymMessage(key, encrypted); // Decrypt with original key
        expect(decrypted).toBe(message);
    });
});