diff --git a/src/utils/encryptionUtils.js b/src/utils/encryptionUtils.js new file mode 100644 index 00000000..20ebd3a5 --- /dev/null +++ b/src/utils/encryptionUtils.js @@ -0,0 +1,19 @@ +// These functions accept and return Uint8Arrays + +export async function encryptAESGCM(plaintext, key) { + const iv = crypto.getRandomValues(new Uint8Array(12)); + const algorithm = { name: "AES-GCM", iv: iv }; + const keyMaterial = await crypto.subtle.importKey("raw", key, algorithm, false, ["encrypt"]); + const ciphertext = await crypto.subtle.encrypt(algorithm, keyMaterial, plaintext); + + return new Uint8Array([...iv, ...new Uint8Array(ciphertext)]); +} + +export async function decryptAESGCM(ciphertextArray, key) { + const iv = new Uint8Array(ciphertextArray.slice(0, 12)); + const algorithm = { name: "AES-GCM", iv: iv }; + const keyMaterial = await crypto.subtle.importKey("raw", key, algorithm, false, ["decrypt"]); + const decrypted = await crypto.subtle.decrypt(algorithm, keyMaterial, new Uint8Array(ciphertextArray.slice(12))); + + return decrypted; +}