UNPKG

xypriss-security

Version:

Advanced High-Performance Security Framework. Military-grade encryption, post-quantum resilience, and fortified data structures.

94 lines 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decompressFileData = exports.compressFileData = exports.decryptFileData = exports.encryptFileData = exports.ensureDirectoryExists = void 0; const util_1 = require("util"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const zlib_1 = __importDefault(require("zlib")); const bridge_1 = require("../../core/bridge"); /** * Ensure directory exists for file cache operations */ const ensureDirectoryExists = async (filePath) => { const dir = path_1.default.dirname(filePath); if (!(0, fs_1.existsSync)(dir)) { (0, fs_1.mkdirSync)(dir, { recursive: true }); } }; exports.ensureDirectoryExists = ensureDirectoryExists; /** * Encrypt data for file storage */ const encryptFileData = (data, key) => { const encryptionKey = key || Buffer.from(bridge_1.Bridge.getRandomBytes(32)); const encHex = bridge_1.Bridge.encryptRaw(new TextEncoder().encode(data), encryptionKey, "aes"); if (encHex.startsWith("error:")) throw new Error(encHex); const [ivHex, tagHex, dataHex] = encHex.split(":"); return { encrypted: dataHex, iv: ivHex, authTag: tagHex, key: encryptionKey.toString("base64"), }; }; exports.encryptFileData = encryptFileData; /** * Decrypt data from file storage */ const decryptFileData = (encrypted, iv, authTag, key) => { const keyBuffer = Buffer.from(key, "base64"); // Format parts to reconstruct "nonce:tag:ciphertext" in hex format const partsStr = `${iv}:${authTag}:${encrypted}`; const decryptedHex = bridge_1.Bridge.decryptRaw(partsStr, keyBuffer, "aes"); if (decryptedHex.startsWith("error:")) throw new Error(decryptedHex); // Convert hex bytes back to string const decMatches = decryptedHex.match(/.{1,2}/g) || []; const bytes = new Uint8Array(decMatches.map((byte) => parseInt(byte, 16))); return new TextDecoder().decode(bytes); }; exports.decryptFileData = decryptFileData; /** * Compress data if beneficial */ const compressFileData = async (data) => { if (data.length < 1024) { // Don't compress small data return { data, compressed: false }; } try { const deflate = (0, util_1.promisify)(zlib_1.default.deflate); const compressed = await deflate(Buffer.from(data, "utf8")); const compressedString = compressed.toString("base64"); if (compressedString.length < data.length * 0.9) { return { data: compressedString, compressed: true }; } } catch (error) { console.warn("File compression failed:", error); } return { data, compressed: false }; }; exports.compressFileData = compressFileData; /** * Decompress data */ const decompressFileData = async (data, compressed) => { if (!compressed) return data; try { const inflate = (0, util_1.promisify)(zlib_1.default.inflate); const decompressed = await inflate(Buffer.from(data, "base64")); return decompressed.toString("utf8"); } catch (error) { console.error("File decompression failed:", error); throw new Error("Data decompression failed"); } }; exports.decompressFileData = decompressFileData; //# sourceMappingURL=cacheSys.utils.js.map