fix cryptoWorker singleton import
This commit is contained in:
parent
ab4ab4f72c
commit
8613a3ef6a
|
@ -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);
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,12 +250,13 @@ 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(
|
||||
file.magicMetadata.data,
|
||||
file.key
|
||||
);
|
||||
const { file: encryptedMagicMetadata } =
|
||||
await cryptoWorker.encryptMetadata(
|
||||
file.magicMetadata.data,
|
||||
file.key
|
||||
);
|
||||
reqBody.metadataList.push({
|
||||
id: file.id,
|
||||
magicMetadata: {
|
||||
|
@ -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: {
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue