Browse Source

Merge crypto workers into one

Vishnu Mohandas 4 years ago
parent
commit
3559e68490

+ 8 - 9
src/services/fileService.ts

@@ -2,11 +2,8 @@ import { getEndpoint } from "utils/common/apiUtil";
 import HTTPService from "./HTTPService";
 import HTTPService from "./HTTPService";
 import * as Comlink from "comlink";
 import * as Comlink from "comlink";
 
 
-const decryptMetadata: any = typeof window !== 'undefined'
-    && Comlink.wrap(new Worker("worker/decryptMetadata.worker.js", { type: 'module' }));
-const decryptThumbnail: any = typeof window !== 'undefined'
-    && Comlink.wrap(new Worker("worker/decryptThumbnail.worker.js", { type: 'module' }));
-
+const Crypto = typeof window !== 'undefined'
+    && Comlink.wrap(new Worker("worker/crypto.worker.js", { type: 'module' }));
 const ENDPOINT = getEndpoint();
 const ENDPOINT = getEndpoint();
 
 
 export interface decryptionParams {
 export interface decryptionParams {
@@ -37,12 +34,14 @@ export interface fileData {
     data?: string;
     data?: string;
 };
 };
 
 
-const getFileMetaDataUsingWorker = (data: any, key: string) => {
-    return decryptMetadata({ data, key });
+const getFileMetaDataUsingWorker = async (data: any, key: string) => {
+    const worker = await new Crypto();
+    return worker.decryptMetadata({ data, key });
 }
 }
 
 
-const getFileUsingWorker = (data: any, key: string) => {
-    return decryptThumbnail({ data, key });
+const getFileUsingWorker = async (data: any, key: string) => {
+    const worker = await new Crypto();
+    return worker.decryptThumbnail({ data, key });
 }
 }
 
 
 export const getFiles = async (sinceTime: string, token: string, limit: string, key: string) => {
 export const getFiles = async (sinceTime: string, token: string, limit: string, key: string) => {

+ 41 - 0
src/worker/crypto.worker.js

@@ -0,0 +1,41 @@
+import * as Comlink from 'comlink';
+import { base64ToUint8 } from "utils/crypto/common";
+import sodium from 'libsodium-wrappers';
+
+class Crypto {
+    async decryptMetadata(event) {
+        const { data } = event;
+        await sodium.ready;
+        const key = sodium.crypto_secretbox_open_easy(
+            base64ToUint8(data.metadata.decryptionParams.encryptedKey),
+            base64ToUint8(data.metadata.decryptionParams.keyDecryptionNonce),
+            base64ToUint8(event.key));
+        const metadata = sodium.crypto_secretbox_open_easy(
+            base64ToUint8(data.metadata.encryptedData),
+            base64ToUint8(data.metadata.decryptionParams.nonce),
+            key);
+        return {
+            ...data,
+            metadata: JSON.parse(new TextDecoder().decode(metadata))
+        };
+    }
+
+    async decryptThumbnail(event) {
+        const { data } = event;
+        await sodium.ready;
+        const key = sodium.crypto_secretbox_open_easy(
+            base64ToUint8(data.thumbnail.decryptionParams.encryptedKey),
+            base64ToUint8(data.thumbnail.decryptionParams.keyDecryptionNonce),
+            base64ToUint8(event.key));
+        const thumbnail = sodium.crypto_secretbox_open_easy(
+            new Uint8Array(data.file),
+            base64ToUint8(data.thumbnail.decryptionParams.nonce),
+            key);
+        return {
+            id: data.id,
+            data: thumbnail,
+        };
+    }
+}
+
+Comlink.expose(Crypto);

+ 0 - 23
src/worker/decryptMetadata.worker.js

@@ -1,23 +0,0 @@
-import * as Comlink from 'comlink';
-import { base64ToUint8 } from "utils/crypto/common";
-import sodium from 'libsodium-wrappers';
-
-async function decryptMetadata(event) {
-    console.log(event);
-    const { data } = event;
-    await sodium.ready;
-    const key = sodium.crypto_secretbox_open_easy(
-        base64ToUint8(data.metadata.decryptionParams.encryptedKey),
-        base64ToUint8(data.metadata.decryptionParams.keyDecryptionNonce),
-        base64ToUint8(event.key));
-    const metadata = sodium.crypto_secretbox_open_easy(
-        base64ToUint8(data.metadata.encryptedData),
-        base64ToUint8(data.metadata.decryptionParams.nonce),
-        key);
-    return {
-        ...data,
-        metadata: JSON.parse(new TextDecoder().decode(metadata))
-    };
-}
-
-Comlink.expose(decryptMetadata, self);

+ 0 - 22
src/worker/decryptThumbnail.worker.js

@@ -1,22 +0,0 @@
-import * as Comlink from 'comlink';
-import { base64ToUint8 } from "utils/crypto/common";
-import sodium from 'libsodium-wrappers';
-
-async function decryptThumbnail(event) {
-    const { data } = event;
-    await sodium.ready;
-    const key = sodium.crypto_secretbox_open_easy(
-        base64ToUint8(data.thumbnail.decryptionParams.encryptedKey),
-        base64ToUint8(data.thumbnail.decryptionParams.keyDecryptionNonce),
-        base64ToUint8(event.key));
-    const thumbnail = sodium.crypto_secretbox_open_easy(
-        new Uint8Array(data.file),
-        base64ToUint8(data.thumbnail.decryptionParams.nonce),
-        key);
-    return {
-        id: data.id,
-        data: thumbnail,
-    };
-}
-
-Comlink.expose(decryptThumbnail, self);