zero-knowledge file sharing
at main 23 lines 734 B view raw
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};