UNPKG

@polgubau/utils

Version:

A collection of utility functions for TypeScript

1 lines 2.83 kB
{"version":3,"sources":["../../../../src/functions/encryption/encryption.ts"],"sourcesContent":["const encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nasync function getKey(key: string): Promise<CryptoKey> {\n const keyBytes = encoder.encode(key);\n if (keyBytes.length < 32) {\n throw new Error(\"Key must be at least 32 characters long\");\n }\n\n return await crypto.subtle.importKey(\n \"raw\",\n keyBytes.slice(0, 32), // Forzamos a 256 bits (32 bytes)\n { name: \"AES-GCM\" },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\n/**\n * Encrypts a text using AES-GCM.\n * @param text - Text to encrypt\n * @param key - Key to encrypt the text\n * @returns Encrypted text in base64\n */\nexport async function encrypt(text: string, key: string): Promise<string> {\n const keyMaterial = await getKey(key);\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encrypted = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n keyMaterial,\n encoder.encode(text),\n );\n\n // Convertir a Base64 seguro\n const buffer = new Uint8Array([...iv, ...new Uint8Array(encrypted)]);\n return btoa(String.fromCharCode(...buffer));\n}\n\n/**\n * Decrypts an encrypted text using AES-GCM.\n * @param encryptedText - Encrypted text in base64\n * @param key - Key to decrypt the text\n * @returns Decrypted text\n */\nexport async function decrypt(encryptedText: string, key: string): Promise<string> {\n const keyMaterial = await getKey(key);\n const data = Uint8Array.from(atob(encryptedText), (c) => c.charCodeAt(0));\n\n const iv = data.slice(0, 12);\n const encryptedData = data.slice(12);\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n keyMaterial,\n encryptedData,\n );\n\n return decoder.decode(decrypted);\n}\n"],"mappings":";AAAA,IAAM,UAAU,IAAI,YAAY;AAChC,IAAM,UAAU,IAAI,YAAY;AAEhC,eAAe,OAAO,KAAiC;AACrD,QAAM,WAAW,QAAQ,OAAO,GAAG;AACnC,MAAI,SAAS,SAAS,IAAI;AACxB,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,SAAO,MAAM,OAAO,OAAO;AAAA,IACzB;AAAA,IACA,SAAS,MAAM,GAAG,EAAE;AAAA;AAAA,IACpB,EAAE,MAAM,UAAU;AAAA,IAClB;AAAA,IACA,CAAC,WAAW,SAAS;AAAA,EACvB;AACF;AAQA,eAAsB,QAAQ,MAAc,KAA8B;AACxE,QAAM,cAAc,MAAM,OAAO,GAAG;AACpC,QAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AACpD,QAAM,YAAY,MAAM,OAAO,OAAO;AAAA,IACpC,EAAE,MAAM,WAAW,GAAG;AAAA,IACtB;AAAA,IACA,QAAQ,OAAO,IAAI;AAAA,EACrB;AAGA,QAAM,SAAS,IAAI,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC;AACnE,SAAO,KAAK,OAAO,aAAa,GAAG,MAAM,CAAC;AAC5C;AAQA,eAAsB,QAAQ,eAAuB,KAA8B;AACjF,QAAM,cAAc,MAAM,OAAO,GAAG;AACpC,QAAM,OAAO,WAAW,KAAK,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAExE,QAAM,KAAK,KAAK,MAAM,GAAG,EAAE;AAC3B,QAAM,gBAAgB,KAAK,MAAM,EAAE;AACnC,QAAM,YAAY,MAAM,OAAO,OAAO;AAAA,IACpC,EAAE,MAAM,WAAW,GAAG;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ,OAAO,SAAS;AACjC;","names":[]}