From ebeeaa29a6648b8293ed3da0377660be64c2619a Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Tue, 26 Aug 2025 19:15:33 +0300 Subject: [PATCH] Fix crypto module --- frontend/src/chat/dm.ts | 4 +++- frontend/src/crypto/symmetric.ts | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/frontend/src/chat/dm.ts b/frontend/src/chat/dm.ts index 0d9de54..7714eb3 100644 --- a/frontend/src/chat/dm.ts +++ b/frontend/src/chat/dm.ts @@ -226,7 +226,9 @@ async function loadUsers() { if (env.senderId === activeDm.userId && env.id > maxIncomingId) { maxIncomingId = env.id; } - } catch {} + } catch (e) { + console.error("Error while loading message:", e); + } } container.scrollTop = container.scrollHeight; if (maxIncomingId > 0) { diff --git a/frontend/src/crypto/symmetric.ts b/frontend/src/crypto/symmetric.ts index f0b1780..4de472b 100644 --- a/frontend/src/crypto/symmetric.ts +++ b/frontend/src/crypto/symmetric.ts @@ -11,9 +11,10 @@ export async function aesGcmEncrypt(key: CryptoKey, plaintext: Uint8Array | Arra } export async function aesGcmDecrypt(key: CryptoKey, iv: Uint8Array | ArrayBuffer, ciphertext: Uint8Array | ArrayBuffer): Promise { - const ivBuffer = iv instanceof Uint8Array ? iv.buffer as ArrayBuffer : iv; - const ciphertextBuffer = ciphertext instanceof Uint8Array ? ciphertext.buffer as ArrayBuffer : ciphertext; - const pt = await crypto.subtle.decrypt({ name: "AES-GCM", iv: ivBuffer }, key, ciphertextBuffer); + // WebCrypto AES-GCM requires Uint8Array for iv and data; passing ArrayBuffer slices can break auth tag boundaries + const ivBytes = iv instanceof Uint8Array ? iv : new Uint8Array(iv); + const ctBytes = ciphertext instanceof Uint8Array ? ciphertext : new Uint8Array(ciphertext); + const pt = await crypto.subtle.decrypt({ name: "AES-GCM", iv: ivBytes }, key, ctBytes); return new Uint8Array(pt); }