mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
17 lines
892 B
TypeScript
17 lines
892 B
TypeScript
/** Encrypt data with AES-GCM and a secret key. */
|
|
export async function aesEncrypt(sk: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {
|
|
const secretKey = await crypto.subtle.importKey('raw', sk, { name: 'AES-GCM' }, false, ['encrypt']);
|
|
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
const buffer = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, secretKey, plaintext);
|
|
|
|
return new Uint8Array([...iv, ...new Uint8Array(buffer)]);
|
|
}
|
|
|
|
/** Decrypt data with AES-GCM and a secret key. */
|
|
export async function aesDecrypt(sk: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array> {
|
|
const secretKey = await crypto.subtle.importKey('raw', sk, { name: 'AES-GCM' }, false, ['decrypt']);
|
|
const iv = ciphertext.slice(0, 12);
|
|
const buffer = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, secretKey, ciphertext.slice(12));
|
|
|
|
return new Uint8Array(buffer);
|
|
}
|