const key = 'key'
const secret = 'secret'
const algo = {
name: 'AES-GCM',
iv: crypto.getRandomValues(new Uint8Array(16)),
}
const encode = input => new TextEncoder().encode(input)
const decode = input => new TextDecoder().decode(input)
const cryptoKey = await crypto.subtle.importKey(
'raw', // format
// "AES key data must be 128 or 256 bits"
await crypto.subtle.digest('SHA-256', encode(key)),
algo.name,
false, // extractable
['encrypt', 'decrypt'] // keyUsages
)
const encrypted = await crypto.subtle.encrypt(
algo,
cryptoKey,
encode(secret)
) // ArrayBuffer
const decrypted = await crypto.subtle.decrypt(
algo,
cryptoKey,
encrypted
).then(decode)