fix cryptoWorker singleton import

This commit is contained in:
Abhinav 2023-01-09 10:30:31 +05:30
parent ab4ab4f72c
commit 8613a3ef6a
16 changed files with 111 additions and 93 deletions

View file

@ -3,7 +3,7 @@ import SingleInputForm, {
SingleInputFormProps,
} from 'components/SingleInputForm';
import React from 'react';
import CryptoWorker from 'utils/crypto';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
import constants from 'utils/strings/constants';
export function PublicLinkSetPassword({
@ -28,7 +28,7 @@ export function PublicLinkSetPassword({
};
const enablePublicUrlPassword = async (password: string) => {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const kekSalt = await cryptoWorker.generateSaltToDeriveKey();
const kek = await cryptoWorker.deriveInteractiveKey(password, kekSalt);

View file

@ -1,7 +1,6 @@
import React from 'react';
import constants from 'utils/strings/constants';
import CryptoWorker from 'utils/crypto';
import SingleInputForm, {
SingleInputFormProps,
} from 'components/SingleInputForm';
@ -10,6 +9,7 @@ import { CustomError } from 'utils/error';
import { Input } from '@mui/material';
import { KeyAttributes, User } from 'types/user';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
export interface VerifyMasterPasswordFormProps {
user: User;
@ -29,7 +29,7 @@ export default function VerifyMasterPasswordForm({
setFieldError
) => {
try {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
let kek: string = null;
try {
kek = await cryptoWorker.deriveKey(

View file

@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import constants from 'utils/strings/constants';
import { getData, LS_KEYS, setData } from 'utils/storage/localStorage';
import { useRouter } from 'next/router';
import CryptoWorker, {
import {
saveKeyInSessionStore,
generateAndSaveIntermediateKeyAttributes,
} from 'utils/crypto';
@ -19,6 +19,7 @@ import VerticallyCentered from 'components/Container';
import FormPaper from 'components/Form/FormPaper';
import FormPaperFooter from 'components/Form/FormPaper/Footer';
import FormPaperTitle from 'components/Form/FormPaper/Title';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
export default function ChangePassword() {
const [token, setToken] = useState<string>();
@ -39,7 +40,7 @@ export default function ChangePassword() {
passphrase,
setFieldError
) => {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const key = await getActualKey();
const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
const kekSalt = await cryptoWorker.generateSaltToDeriveKey();

View file

@ -8,10 +8,7 @@ import {
} from 'utils/storage/localStorage';
import { useRouter } from 'next/router';
import { PAGES } from 'constants/pages';
import CryptoWorker, {
decryptAndStoreToken,
saveKeyInSessionStore,
} from 'utils/crypto';
import { decryptAndStoreToken, saveKeyInSessionStore } from 'utils/crypto';
import SingleInputForm, {
SingleInputFormProps,
} from 'components/SingleInputForm';
@ -24,6 +21,7 @@ import FormPaper from 'components/Form/FormPaper';
import FormPaperTitle from 'components/Form/FormPaper/Title';
import FormPaperFooter from 'components/Form/FormPaper/Footer';
import LinkButton from 'components/pages/gallery/LinkButton';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const bip39 = require('bip39');
// mobile client library only supports english.
bip39.setDefaultWordlist('english');
@ -72,7 +70,7 @@ export default function Recover() {
}
recoveryKey = bip39.mnemonicToEntropy(recoveryKey);
}
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const masterKey = await cryptoWorker.decryptB64(
keyAttributes.masterKeyEncryptedWithRecoveryKey,
keyAttributes.masterKeyDecryptionNonce,

View file

@ -23,7 +23,6 @@ import { CustomError, parseSharingErrorCodes } from 'utils/error';
import VerticallyCentered, { CenteredFlex } from 'components/Container';
import constants from 'utils/strings/constants';
import EnteSpinner from 'components/EnteSpinner';
import CryptoWorker from 'utils/crypto';
import { PAGES } from 'constants/pages';
import { useRouter } from 'next/router';
import SingleInputForm, {
@ -48,6 +47,7 @@ import { logoutUser } from 'services/userService';
import UploadButton from 'components/Upload/UploadButton';
import bs58 from 'bs58';
import AddPhotoAlternateOutlined from '@mui/icons-material/AddPhotoAlternateOutlined';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const Loader = () => (
<VerticallyCentered>
@ -149,7 +149,8 @@ export default function PublicCollectionGallery() {
}
const main = async () => {
try {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
url.current = window.location.href;
const currentURL = new URL(url.current);
const t = currentURL.searchParams.get('t');
@ -159,8 +160,8 @@ export default function PublicCollectionGallery() {
}
const dck =
ck.length < 50
? await worker.toB64(bs58.decode(ck))
: await worker.fromHex(ck);
? await cryptoWorker.toB64(bs58.decode(ck))
: await cryptoWorker.fromHex(ck);
token.current = t;
collectionKey.current = dck;
url.current = window.location.href;
@ -304,7 +305,7 @@ export default function PublicCollectionGallery() {
setFieldError
) => {
try {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
let hashedPassword: string = null;
try {
const publicUrl = publicCollection.publicURLs[0];

View file

@ -2,7 +2,6 @@ import React, { useContext, useEffect, useState } from 'react';
import constants from 'utils/strings/constants';
import { getData, LS_KEYS, setData } from 'utils/storage/localStorage';
import { useRouter } from 'next/router';
import CryptoWorker from 'utils/crypto';
import SingleInputForm, {
SingleInputFormProps,
} from 'components/SingleInputForm';
@ -16,6 +15,7 @@ import FormPaperTitle from 'components/Form/FormPaper/Title';
import FormPaperFooter from 'components/Form/FormPaper/Footer';
import LinkButton from 'components/pages/gallery/LinkButton';
import { B64EncryptionResult } from 'types/crypto';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const bip39 = require('bip39');
// mobile client library only supports english.
bip39.setDefaultWordlist('english');
@ -66,7 +66,7 @@ export default function Recover() {
}
recoveryKey = bip39.mnemonicToEntropy(recoveryKey);
}
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const twoFactorSecret = await cryptoWorker.decryptB64(
encryptedTwoFactorSecret.encryptedData,
encryptedTwoFactorSecret.nonce,

View file

@ -3,7 +3,6 @@ import { getData, LS_KEYS } from 'utils/storage/localStorage';
import localForage from 'utils/storage/localForage';
import { getActualKey, getToken } from 'utils/common/key';
import CryptoWorker from 'utils/crypto';
import { getPublicKey } from './userService';
import HTTPService from './HTTPService';
import { EnteFile } from 'types/file';
@ -52,6 +51,7 @@ import {
getNonHiddenCollections,
isQuickLinkCollection,
} from 'utils/collection';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const ENDPOINT = getEndpoint();
const COLLECTION_TABLE = 'collections';
@ -61,23 +61,23 @@ const getCollectionWithSecrets = async (
collection: EncryptedCollection,
masterKey: string
): Promise<Collection> => {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const userID = getData(LS_KEYS.USER).id;
let collectionKey: string;
if (collection.owner.id === userID) {
collectionKey = await worker.decryptB64(
collectionKey = await cryptoWorker.decryptB64(
collection.encryptedKey,
collection.keyDecryptionNonce,
masterKey
);
} else {
const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
const secretKey = await worker.decryptB64(
const secretKey = await cryptoWorker.decryptB64(
keyAttributes.encryptedSecretKey,
keyAttributes.secretKeyDecryptionNonce,
masterKey
);
collectionKey = await worker.boxSealOpen(
collectionKey = await cryptoWorker.boxSealOpen(
collection.encryptedKey,
keyAttributes.publicKey,
secretKey
@ -85,7 +85,7 @@ const getCollectionWithSecrets = async (
}
const collectionName =
collection.name ||
(await worker.decryptToUTF8(
(await cryptoWorker.decryptToUTF8(
collection.encryptedName,
collection.nameDecryptionNonce,
collectionKey
@ -95,7 +95,7 @@ const getCollectionWithSecrets = async (
if (collection.magicMetadata?.data) {
collectionMagicMetadata = {
...collection.magicMetadata,
data: await worker.decryptMetadata(
data: await cryptoWorker.decryptMetadata(
collection.magicMetadata.data,
collection.magicMetadata.header,
collectionKey
@ -286,14 +286,14 @@ export const createCollection = async (
return collection;
}
}
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const encryptionKey = await getActualKey();
const token = getToken();
const collectionKey = await worker.generateEncryptionKey();
const collectionKey = await cryptoWorker.generateEncryptionKey();
const { encryptedData: encryptedKey, nonce: keyDecryptionNonce } =
await worker.encryptToB64(collectionKey, encryptionKey);
await cryptoWorker.encryptToB64(collectionKey, encryptionKey);
const { encryptedData: encryptedName, nonce: nameDecryptionNonce } =
await worker.encryptUTF8(collectionName, collectionKey);
await cryptoWorker.encryptUTF8(collectionName, collectionKey);
const newCollection: EncryptedCollection = {
id: null,
owner: null,
@ -456,9 +456,9 @@ const encryptWithNewCollectionKey = async (
files: EnteFile[]
): Promise<EncryptedFileKey[]> => {
const fileKeysEncryptedWithNewCollection: EncryptedFileKey[] = [];
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
for (const file of files) {
const newEncryptedKey = await worker.encryptToB64(
const newEncryptedKey = await cryptoWorker.encryptToB64(
file.key,
newCollection.key
);
@ -518,9 +518,9 @@ export const updateCollectionMagicMetadata = async (collection: Collection) => {
return;
}
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const { file: encryptedMagicMetadata } = await worker.encryptMetadata(
const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata(
collection.magicMetadata.data,
collection.key
);
@ -562,9 +562,9 @@ export const renameCollection = async (
await updateCollectionSubType(collection, SUB_TYPE.DEFAULT);
}
const token = getToken();
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const { encryptedData: encryptedName, nonce: nameDecryptionNonce } =
await worker.encryptUTF8(newCollectionName, collection.key);
await cryptoWorker.encryptUTF8(newCollectionName, collection.key);
const collectionRenameRequest = {
collectionID: collection.id,
encryptedName,
@ -603,11 +603,13 @@ export const shareCollection = async (
withUserEmail: string
) => {
try {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const token = getToken();
const publicKey: string = await getPublicKey(withUserEmail);
const encryptedKey = await worker.boxSeal(collection.key, publicKey);
const encryptedKey = await cryptoWorker.boxSeal(
collection.key,
publicKey
);
const shareCollectionRequest = {
collectionID: collection.id,
email: withUserEmail,

View file

@ -1,6 +1,5 @@
import { getToken } from 'utils/common/key';
import { getFileURL, getThumbnailURL } from 'utils/common/apiUtil';
import CryptoWorker from 'utils/crypto';
import {
generateStreamFromArrayBuffer,
getRenderableFileURL,
@ -14,6 +13,7 @@ import { FILE_TYPE } from 'constants/file';
import { CustomError } from 'utils/error';
import { openThumbnailCache } from './cacheService';
import QueueProcessor, { PROCESSING_STRATEGY } from './queueProcessor';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const MAX_PARALLEL_DOWNLOADS = 10;
@ -80,10 +80,10 @@ class DownloadManager {
if (typeof resp.data === 'undefined') {
throw Error(CustomError.REQUEST_FAILED);
}
const worker = await new CryptoWorker();
const decrypted = await worker.decryptThumbnail(
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const decrypted = await cryptoWorker.decryptThumbnail(
new Uint8Array(resp.data),
await worker.fromB64(file.thumbnail.decryptionHeader),
await cryptoWorker.fromB64(file.thumbnail.decryptionHeader),
file.key
);
return decrypted;
@ -122,7 +122,8 @@ class DownloadManager {
}
async downloadFile(file: EnteFile) {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const token = getToken();
if (!token) {
return null;
@ -140,9 +141,9 @@ class DownloadManager {
if (typeof resp.data === 'undefined') {
throw Error(CustomError.REQUEST_FAILED);
}
const decrypted = await worker.decryptFile(
const decrypted = await cryptoWorker.decryptFile(
new Uint8Array(resp.data),
await worker.fromB64(file.file.decryptionHeader),
await cryptoWorker.fromB64(file.file.decryptionHeader),
file.key
);
return generateStreamFromArrayBuffer(decrypted);
@ -155,12 +156,15 @@ class DownloadManager {
const reader = resp.body.getReader();
const stream = new ReadableStream({
async start(controller) {
const decryptionHeader = await worker.fromB64(
const decryptionHeader = await cryptoWorker.fromB64(
file.file.decryptionHeader
);
const fileKey = await worker.fromB64(file.key);
const fileKey = await cryptoWorker.fromB64(file.key);
const { pullState, decryptionChunkSize } =
await worker.initDecryption(decryptionHeader, fileKey);
await cryptoWorker.initDecryption(
decryptionHeader,
fileKey
);
let data = new Uint8Array();
// The following function handles each data chunk
function push() {
@ -179,7 +183,7 @@ class DownloadManager {
decryptionChunkSize
);
const { decryptedData } =
await worker.decryptChunk(
await cryptoWorker.decryptChunk(
fileData,
pullState
);
@ -192,7 +196,10 @@ class DownloadManager {
} else {
if (data) {
const { decryptedData } =
await worker.decryptChunk(data, pullState);
await cryptoWorker.decryptChunk(
data,
pullState
);
controller.enqueue(decryptedData);
data = null;
}

View file

@ -11,7 +11,6 @@ import {
preservePhotoswipeProps,
sortFiles,
} from 'utils/file';
import CryptoWorker from 'utils/crypto';
import { EnteFile, EncryptedEnteFile, TrashRequest } from 'types/file';
import { SetFiles } from 'types/gallery';
import { MAX_TRASH_BATCH_SIZE } from 'constants/file';
@ -19,6 +18,7 @@ import { BulkUpdateMagicMetadataRequest } from 'types/magicMetadata';
import { addLogLine } from 'utils/logging';
import { isCollectionHidden } from 'utils/collection';
import { CustomError } from 'utils/error';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const ENDPOINT = getEndpoint();
const FILES_TABLE = 'files';
@ -250,9 +250,10 @@ export const updateFileMagicMetadata = async (files: EnteFile[]) => {
return;
}
const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] };
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
for (const file of files) {
const { file: encryptedMagicMetadata } = await worker.encryptMetadata(
const { file: encryptedMagicMetadata } =
await cryptoWorker.encryptMetadata(
file.magicMetadata.data,
file.key
);
@ -286,10 +287,13 @@ export const updateFilePublicMagicMetadata = async (files: EnteFile[]) => {
return;
}
const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] };
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
for (const file of files) {
const { file: encryptedPubMagicMetadata } =
await worker.encryptMetadata(file.pubMagicMetadata.data, file.key);
await cryptoWorker.encryptMetadata(
file.pubMagicMetadata.data,
file.key
);
reqBody.metadataList.push({
id: file.id,
magicMetadata: {

View file

@ -5,7 +5,6 @@ import { getToken } from 'utils/common/key';
import { logError } from 'utils/sentry';
import { getEndpoint } from 'utils/common/apiUtil';
import HTTPService from 'services/HTTPService';
import CryptoWorker from 'utils/crypto';
import uploadHttpClient from 'services/upload/uploadHttpClient';
import { SetProgressTracker } from 'components/FixLargeThumbnail';
import { getFileType } from 'services/typeDetectionService';
@ -15,6 +14,7 @@ import { FileAttributes } from 'types/file';
import { USE_CF_PROXY } from 'constants/upload';
import { Remote } from 'comlink';
import { DedicatedCryptoWorker } from 'worker/crypto.worker';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const ENDPOINT = getEndpoint();
const REPLACE_THUMBNAIL_THRESHOLD = 500 * 1024; // 500KB
@ -46,7 +46,7 @@ export async function replaceThumbnail(
let completedWithError = false;
try {
const token = getToken();
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const files = await getLocalFiles();
const trash = await getLocalTrash();
const trashFiles = getTrashedFiles(trash);
@ -85,7 +85,7 @@ export async function replaceThumbnail(
fileTypeInfo
);
const newUploadedThumbnail = await uploadThumbnail(
worker,
cryptoWorker,
file.key,
newThumbnail,
uploadURLs.pop()

View file

@ -2,7 +2,6 @@ import {
getPublicCollectionFileURL,
getPublicCollectionThumbnailURL,
} from 'utils/common/apiUtil';
import CryptoWorker from 'utils/crypto';
import {
generateStreamFromArrayBuffer,
getRenderableFileURL,
@ -15,6 +14,7 @@ import { logError } from 'utils/sentry';
import { FILE_TYPE } from 'constants/file';
import { CustomError } from 'utils/error';
import QueueProcessor from './queueProcessor';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
class PublicCollectionDownloadManager {
private fileObjectURLPromise = new Map<
@ -97,10 +97,10 @@ class PublicCollectionDownloadManager {
if (typeof resp.data === 'undefined') {
throw Error(CustomError.REQUEST_FAILED);
}
const worker = await new CryptoWorker();
const decrypted = await worker.decryptThumbnail(
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const decrypted = await cryptoWorker.decryptThumbnail(
new Uint8Array(resp.data),
await worker.fromB64(file.thumbnail.decryptionHeader),
await cryptoWorker.fromB64(file.thumbnail.decryptionHeader),
file.key
);
return decrypted;
@ -148,7 +148,7 @@ class PublicCollectionDownloadManager {
}
async downloadFile(token: string, passwordToken: string, file: EnteFile) {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
if (!token) {
return null;
}
@ -170,9 +170,9 @@ class PublicCollectionDownloadManager {
if (typeof resp.data === 'undefined') {
throw Error(CustomError.REQUEST_FAILED);
}
const decrypted = await worker.decryptFile(
const decrypted = await cryptoWorker.decryptFile(
new Uint8Array(resp.data),
await worker.fromB64(file.file.decryptionHeader),
await cryptoWorker.fromB64(file.file.decryptionHeader),
file.key
);
return generateStreamFromArrayBuffer(decrypted);
@ -188,12 +188,15 @@ class PublicCollectionDownloadManager {
const reader = resp.body.getReader();
const stream = new ReadableStream({
async start(controller) {
const decryptionHeader = await worker.fromB64(
const decryptionHeader = await cryptoWorker.fromB64(
file.file.decryptionHeader
);
const fileKey = await worker.fromB64(file.key);
const fileKey = await cryptoWorker.fromB64(file.key);
const { pullState, decryptionChunkSize } =
await worker.initDecryption(decryptionHeader, fileKey);
await cryptoWorker.initDecryption(
decryptionHeader,
fileKey
);
let data = new Uint8Array();
// The following function handles each data chunk
function push() {
@ -212,7 +215,7 @@ class PublicCollectionDownloadManager {
decryptionChunkSize
);
const { decryptedData } =
await worker.decryptChunk(
await cryptoWorker.decryptChunk(
fileData,
pullState
);
@ -225,7 +228,10 @@ class PublicCollectionDownloadManager {
} else {
if (data) {
const { decryptedData } =
await worker.decryptChunk(data, pullState);
await cryptoWorker.decryptChunk(
data,
pullState
);
controller.enqueue(decryptedData);
data = null;
}

View file

@ -10,9 +10,9 @@ import {
AbuseReportRequest,
LocalSavedPublicCollectionFiles,
} from 'types/publicCollection';
import CryptoWorker from 'utils/crypto';
import { REPORT_REASON } from 'constants/publicCollection';
import { CustomError, parseSharingErrorCodes } from 'utils/error';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const ENDPOINT = getEndpoint();
const PUBLIC_COLLECTION_FILES_TABLE = 'public-collection-files';
@ -343,11 +343,11 @@ const decryptCollectionName = async (
collection: EncryptedCollection,
collectionKey: string
) => {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
return (collection.name =
collection.name ||
(await worker.decryptToUTF8(
(await cryptoWorker.decryptToUTF8(
collection.encryptedName,
collection.nameDecryptionNonce,
collectionKey

View file

@ -1,5 +1,5 @@
import { B64EncryptionResult } from 'types/crypto';
import CryptoWorker from 'utils/crypto';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
import { getData, LS_KEYS } from 'utils/storage/localStorage';
import { getKey, SESSION_KEYS } from 'utils/storage/sessionStorage';
import { CustomError } from '../error';
@ -10,7 +10,7 @@ export const getActualKey = async () => {
SESSION_KEYS.ENCRYPTION_KEY
);
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const key = await cryptoWorker.decryptB64(
encryptionKeyAttributes.encryptedData,
encryptionKeyAttributes.nonce,

View file

@ -6,12 +6,12 @@ import { setRecoveryKey } from 'services/userService';
import { logError } from 'utils/sentry';
import isElectron from 'is-electron';
import safeStorageService from 'services/electron/safeStorage';
import { CryptoWorker } from 'utils/comlink';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
export async function generateKeyAttributes(
passphrase: string
): Promise<{ keyAttributes: KeyAttributes; masterKey: string }> {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const masterKey = await cryptoWorker.generateEncryptionKey();
const recoveryKey = await cryptoWorker.generateEncryptionKey();
const kekSalt = await cryptoWorker.generateSaltToDeriveKey();
@ -61,7 +61,7 @@ export async function generateAndSaveIntermediateKeyAttributes(
existingKeyAttributes: KeyAttributes,
key: string
): Promise<KeyAttributes> {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const intermediateKekSalt = await cryptoWorker.generateSaltToDeriveKey();
const intermediateKek = await cryptoWorker.deriveInteractiveKey(
passphrase,
@ -88,7 +88,7 @@ export const saveKeyInSessionStore = async (
key: string,
fromDesktop?: boolean
) => {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const sessionKeyAttributes = await cryptoWorker.encryptToB64(key);
setKey(keyType, sessionKeyAttributes);
if (isElectron() && !fromDesktop) {
@ -99,7 +99,7 @@ export const saveKeyInSessionStore = async (
export const getRecoveryKey = async () => {
let recoveryKey: string = null;
try {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
const {
@ -128,7 +128,7 @@ async function createNewRecoveryKey() {
const masterKey = await getActualKey();
const existingAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const recoveryKey = await cryptoWorker.generateEncryptionKey();
const encryptedMasterKey = await cryptoWorker.encryptToB64(
@ -156,7 +156,7 @@ async function createNewRecoveryKey() {
return recoveryKey;
}
export async function decryptAndStoreToken(masterKey: string) {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const user = getData(LS_KEYS.USER);
const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
let decryptedToken = null;
@ -185,7 +185,7 @@ export async function decryptAndStoreToken(masterKey: string) {
}
export async function encryptWithRecoveryKey(key: string) {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const hexRecoveryKey = await getRecoveryKey();
const recoveryKey = await cryptoWorker.fromHex(hexRecoveryKey);
const encryptedKey = await cryptoWorker.encryptToB64(key, recoveryKey);
@ -195,7 +195,7 @@ export async function encryptWithRecoveryKey(key: string) {
export async function decryptDeleteAccountChallenge(
encryptedChallenge: string
) {
const cryptoWorker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const masterKey = await getActualKey();
const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES);
const secretKey = await cryptoWorker.decryptB64(
@ -211,4 +211,3 @@ export async function decryptDeleteAccountChallenge(
const utf8DecryptedChallenge = atob(b64DecryptedChallenge);
return utf8DecryptedChallenge;
}
export default CryptoWorker;

View file

@ -5,7 +5,6 @@ import { getFileType } from 'services/typeDetectionService';
import DownloadManager from 'services/downloadManager';
import { logError } from 'utils/sentry';
import { User } from 'types/user';
import CryptoWorker from 'utils/crypto';
import { getData, LS_KEYS } from 'utils/storage/localStorage';
import { updateFileCreationDateInEXIF } from 'services/upload/exifService';
import {
@ -31,6 +30,7 @@ import { IsArchived, updateMagicMetadataProps } from 'utils/magicMetadata';
import { addLogLine } from 'utils/logging';
import { CustomError } from 'utils/error';
import { convertBytesToHumanReadable } from './size';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000;
@ -198,7 +198,7 @@ export async function decryptFile(
collectionKey: string
): Promise<EnteFile> {
try {
const worker = await new CryptoWorker();
const worker = await ComlinkCryptoWorker.getInstance();
const {
encryptedKey,
keyDecryptionNonce,

View file

@ -5,7 +5,7 @@ import {
MagicMetadataCore,
VISIBILITY_STATE,
} from 'types/magicMetadata';
import CryptoWorker from 'utils/crypto';
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
export function IsArchived(item: Collection | EnteFile) {
if (
@ -25,13 +25,13 @@ export async function updateMagicMetadataProps(
decryptionKey: string,
magicMetadataUpdates: Record<string, any>
) {
const worker = await new CryptoWorker();
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
if (!originalMagicMetadata) {
throw Error('invalid originalMagicMetadata ');
}
if (typeof originalMagicMetadata.data === 'string') {
originalMagicMetadata.data = (await worker.decryptMetadata(
originalMagicMetadata.data = (await cryptoWorker.decryptMetadata(
originalMagicMetadata.data,
originalMagicMetadata.header,
decryptionKey