xypriss-security
Version:
Advanced High-Performance Security Framework. Military-grade encryption, post-quantum resilience, and fortified data structures.
94 lines • 3.46 kB
JavaScript
;
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