@polgubau/utils
Version:
A collection of utility functions for TypeScript
45 lines • 1.3 kB
JavaScript
// src/functions/encryption/encryption.ts
var encoder = new TextEncoder();
var decoder = new TextDecoder();
async function getKey(key) {
const keyBytes = encoder.encode(key);
if (keyBytes.length < 32) {
throw new Error("Key must be at least 32 characters long");
}
return await crypto.subtle.importKey(
"raw",
keyBytes.slice(0, 32),
// Forzamos a 256 bits (32 bytes)
{ name: "AES-GCM" },
false,
["encrypt", "decrypt"]
);
}
async function encrypt(text, key) {
const keyMaterial = await getKey(key);
const iv = crypto.getRandomValues(new Uint8Array(12));
const encrypted = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv },
keyMaterial,
encoder.encode(text)
);
const buffer = new Uint8Array([...iv, ...new Uint8Array(encrypted)]);
return btoa(String.fromCharCode(...buffer));
}
async function decrypt(encryptedText, key) {
const keyMaterial = await getKey(key);
const data = Uint8Array.from(atob(encryptedText), (c) => c.charCodeAt(0));
const iv = data.slice(0, 12);
const encryptedData = data.slice(12);
const decrypted = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv },
keyMaterial,
encryptedData
);
return decoder.decode(decrypted);
}
export {
decrypt,
encrypt
};
//# sourceMappingURL=encryption.mjs.map