Page MenuHomePhorge

D6995.1765103333.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D6995.1765103333.diff

diff --git a/web/database/utils/worker-crypto-utils.js b/web/database/utils/worker-crypto-utils.js
new file mode 100644
--- /dev/null
+++ b/web/database/utils/worker-crypto-utils.js
@@ -0,0 +1,59 @@
+// @flow
+
+const ENCRYPTION_ALGORITHM = 'AES-GCM';
+
+type EncryptionResult = {
+ +iv: BufferSource,
+ +cipher: ArrayBuffer,
+};
+
+function generateDatabaseCryptoKey(): Promise<CryptoKey> {
+ return crypto.subtle.generateKey(
+ {
+ name: ENCRYPTION_ALGORITHM,
+ length: 256,
+ },
+ false,
+ ['encrypt', 'decrypt'],
+ );
+}
+
+function generateIv(): BufferSource {
+ return crypto.getRandomValues(new Uint8Array(12));
+}
+
+async function encryptDatabaseFile(
+ data: ArrayBuffer,
+ key: CryptoKey,
+): Promise<EncryptionResult> {
+ const iv = generateIv();
+ const cipher = await crypto.subtle.encrypt(
+ {
+ name: ENCRYPTION_ALGORITHM,
+ iv: iv,
+ },
+ key,
+ data,
+ );
+ return {
+ cipher,
+ iv,
+ };
+}
+
+async function decryptDatabaseFile(
+ cipher: ArrayBuffer,
+ key: CryptoKey,
+ iv: BufferSource,
+): Promise<ArrayBuffer> {
+ return crypto.subtle.decrypt(
+ {
+ name: ENCRYPTION_ALGORITHM,
+ iv,
+ },
+ key,
+ cipher,
+ );
+}
+
+export { generateDatabaseCryptoKey, encryptDatabaseFile, decryptDatabaseFile };

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 10:28 AM (1 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5843534
Default Alt Text
D6995.1765103333.diff (1 KB)

Event Timeline