vormiaqueryjs
Version:
Vormia Query Js - A npm package for query management with VormiaPHP laravel Backend application
1 lines • 4.16 kB
Source Map (JSON)
{"version":3,"file":"encryption.mjs","sources":["../../../../src/client/utils/encryption.js"],"sourcesContent":["import CryptoJS from \"crypto-js\";\n\n// Node.js crypto for RSA\nlet crypto;\ntry {\n crypto = require(\"crypto\");\n} catch {\n crypto = null;\n}\n\n// Load keys from environment variables (for SSR/Node.js)\nconst PUBLIC_KEY = process.env.VORMIA_PUBLIC_KEY;\nconst PRIVATE_KEY = process.env.VORMIA_PRIVATE_KEY;\n\n/**\n * Encrypts data using AES encryption\n * @param {any} data - The data to encrypt\n * @param {string} key - The encryption key\n * @returns {string} Encrypted data as string\n */\nexport const encryptData = (data, key) => {\n try {\n const jsonString = JSON.stringify(data);\n return CryptoJS.AES.encrypt(jsonString, key).toString();\n } catch {\n return null;\n }\n};\n\n/**\n * Decrypts data that was encrypted with encryptData\n * @param {string} encryptedData - The encrypted data\n * @param {string} key - The decryption key\n * @returns {any} The decrypted data\n */\nexport const decryptData = (encryptedData, key) => {\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedData, key);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n return JSON.parse(decrypted);\n } catch {\n return null;\n }\n};\n\n/**\n * Creates a SHA-256 hash of the input data\n * @param {string} data - The data to hash\n * @returns {string} The hashed string\n */\nexport const hashData = (data) => {\n return CryptoJS.SHA256(data).toString();\n};\n\n/**\n * Generates a random key for encryption\n * @param {number} [length=32] - The length of the key in bytes\n * @returns {string} A random key string\n */\nexport const generateRandomKey = (length = 32) => {\n return CryptoJS.lib.WordArray.random(length).toString();\n};\n\n/**\n * Creates a secure token by combining a random string with a timestamp\n * @returns {string} A secure token\n */\nexport const createSecureToken = () => {\n const random = generateRandomKey(16);\n const timestamp = Date.now().toString();\n return hashData(random + timestamp);\n};\n\n/**\n * Safely compares two strings in constant time to prevent timing attacks\n * @param {string} a - First string\n * @param {string} b - Second string\n * @returns {boolean} True if strings are equal\n */\nexport const secureCompare = (a, b) => {\n const aBuffer = Buffer.from(a);\n const bBuffer = Buffer.from(b);\n\n if (aBuffer.length !== bBuffer.length) {\n return false;\n }\n\n return crypto.subtle.timingSafeEqual(aBuffer, bBuffer);\n};\n\n// --- RSA ENCRYPTION/DECRYPTION (Node.js only) ---\n\nexport function encryptWithPublicKey(data, publicKey = PUBLIC_KEY) {\n if (!crypto || !publicKey)\n throw new Error(\"RSA encryption requires Node.js and a public key\");\n const buffer = Buffer.from(\n typeof data === \"string\" ? data : JSON.stringify(data)\n );\n return crypto.publicEncrypt(publicKey, buffer).toString(\"base64\");\n}\n\nexport function decryptWithPrivateKey(encrypted, privateKey = PRIVATE_KEY) {\n if (!crypto || !privateKey)\n throw new Error(\"RSA decryption requires Node.js and a private key\");\n const buffer = Buffer.from(encrypted, \"base64\");\n const decrypted = crypto.privateDecrypt(privateKey, buffer).toString(\"utf8\");\n try {\n return JSON.parse(decrypted);\n } catch {\n return decrypted;\n }\n}\n\n/* global process, require, Buffer */\n"],"names":[],"mappings":";AAGA,IAAI;AACJ,IAAI;AACF,WAAS,QAAQ,QAAQ;AAC3B,QAAQ;AACN,WAAS;AACX;AAGA,MAAM,aAAa,QAAQ,IAAI;AAC/B,MAAM,cAAc,QAAQ,IAAI;AAQpB,MAAC,cAAc,CAAC,MAAM,QAAQ;AACxC,MAAI;AACF,UAAM,aAAa,KAAK,UAAU,IAAI;AACtC,WAAO,SAAS,IAAI,QAAQ,YAAY,GAAG,EAAE,SAAQ;AAAA,EACzD,QAAU;AACN,WAAO;AAAA,EACX;AACA;AAiEO,SAAS,qBAAqB,MAAM,YAAY,YAAY;AACjE,MAAI,CAAC,UAAU,CAAC;AACd,UAAM,IAAI,MAAM,kDAAkD;AACpE,QAAM,SAAS,OAAO;AAAA,IACpB,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AAAA,EACzD;AACE,SAAO,OAAO,cAAc,WAAW,MAAM,EAAE,SAAS,QAAQ;AAClE;AAEO,SAAS,sBAAsB,WAAW,aAAa,aAAa;AACzE,MAAI,CAAC,UAAU,CAAC;AACd,UAAM,IAAI,MAAM,mDAAmD;AACrE,QAAM,SAAS,OAAO,KAAK,WAAW,QAAQ;AAC9C,QAAM,YAAY,OAAO,eAAe,YAAY,MAAM,EAAE,SAAS,MAAM;AAC3E,MAAI;AACF,WAAO,KAAK,MAAM,SAAS;AAAA,EAC/B,QAAU;AACN,WAAO;AAAA,EACX;AACA;"}