diff --git a/package-lock.json b/package-lock.json index 02511d6..3a6fb3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "@rgossiaux/svelte-headlessui": "^2.0.0", "@tldraw/vec": "^1.9.2", "@use-gesture/vanilla": "^10.2.27", + "argon2-browser": "^1.18.0", "buffer": "^6.0.3", "cbor-x": "^1.6.0", "firacode": "^6.2.0", @@ -1124,6 +1125,11 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "node_modules/argon2-browser": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/argon2-browser/-/argon2-browser-1.18.0.tgz", + "integrity": "sha512-ImVAGIItnFnvET1exhsQB7apRztcoC5TnlSqernMJDUjbc/DLq3UEYeXFrLPrlaIl8cVfwnXb6wX2KpFf2zxHw==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", diff --git a/package.json b/package.json index a6d2244..a37520a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@rgossiaux/svelte-headlessui": "^2.0.0", "@tldraw/vec": "^1.9.2", "@use-gesture/vanilla": "^10.2.27", + "argon2-browser": "^1.18.0", "buffer": "^6.0.3", "cbor-x": "^1.6.0", "firacode": "^6.2.0", diff --git a/src/lib/encrypt.ts b/src/lib/encrypt.ts index 41ad5fa..ed35576 100644 --- a/src/lib/encrypt.ts +++ b/src/lib/encrypt.ts @@ -12,20 +12,24 @@ export class Encrypt { private constructor(private aesKey: CryptoKey) {} static async new(key: string): Promise { - const { Argon2, Argon2Mode } = await import( - "https://esm.sh/@sphereon/isomorphic-argon2@1.0.1" as any + const argon2 = await import( + "argon2-browser/dist/argon2-bundled.min.js" as any ); - const result = await Argon2.hash(key, SALT, { - mode: Argon2Mode.Argon2id, - memory: 19 * 1024, - iterations: 2, + const result = await argon2.hash({ + pass: key, + salt: SALT, + type: argon2.ArgonType.Argon2id, + mem: 19 * 1024, // Memory cost in KiB + time: 2, // Number of iterations parallelism: 1, - hashLength: 16, + hashLen: 16, // Hash length in bytes }); const aesKey = await crypto.subtle.importKey( "raw", Uint8Array.from( - result.hex.match(/.{1,2}/g).map((byte: string) => parseInt(byte, 16)), + result.hashHex + .match(/.{1,2}/g) + .map((byte: string) => parseInt(byte, 16)), ), { name: "AES-CTR" }, false,