zero-knowledge file sharing
1import { importKey, encrypt, decrypt } from "./crypto";
2
3self.onmessage = async (e: MessageEvent) => {
4 const { type, keyEncoded } = e.data;
5 try {
6 const key = await importKey(keyEncoded);
7
8 if (type === "encrypt") {
9 const { fileName, fileBuffer } = e.data;
10 const ciphertext = await encrypt(fileName, fileBuffer, key);
11 self.postMessage({ ciphertext }, [ciphertext.buffer]);
12 } else if (type === "decrypt") {
13 const { ciphertext } = e.data;
14 const { fileName, fileData } = await decrypt(
15 new Uint8Array(ciphertext),
16 key,
17 );
18 self.postMessage({ fileName, fileData }, [fileData.buffer]);
19 }
20 } catch (err: any) {
21 self.postMessage({ error: err.message });
22 }
23};