fortify2-js
Version:
MOST POWERFUL JavaScript Security Library! Military-grade cryptography + 19 enhanced object methods + quantum-resistant algorithms + perfect TypeScript support. More powerful than Lodash with built-in security.
101 lines (98 loc) • 3.62 kB
JavaScript
;
// Safe library instances
exports.sodium = null;
exports.nobleHashes = null;
exports.nobleCiphers = null;
// Library status tracking
const libraryStatus = {
sodium: false,
nobleHashes: false,
nobleCiphers: false,
};
// Safe library initialization with proper error handling
async function initializeSecurityLibraries() {
// Initialize libsodium with proper async handling
try {
const sodiumLib = await import('libsodium-wrappers');
if (sodiumLib.default) {
// Wait for sodium to be ready if it has a ready promise
if (sodiumLib.default.ready &&
typeof sodiumLib.default.ready.then === "function") {
await sodiumLib.default.ready;
}
// Verify required methods exist
if (typeof sodiumLib.default.randombytes_buf === "function") {
exports.sodium = sodiumLib.default;
libraryStatus.sodium = true;
// console.log(
// "✔ libsodium-wrappers loaded successfully for SecureBuffer"
// );
}
}
}
catch (e) {
console.warn("⚠️ libsodium-wrappers not available for SecureBuffer:", e.message);
}
// Initialize @noble/hashes using require for compatibility
try {
const nobleHashesLib = require("@noble/hashes/sha256");
const nobleHashesLib512 = require("@noble/hashes/sha512");
if (nobleHashesLib &&
nobleHashesLib.sha256 &&
nobleHashesLib512 &&
nobleHashesLib512.sha512) {
exports.nobleHashes = {
sha256: nobleHashesLib.sha256,
sha512: nobleHashesLib512.sha512,
};
libraryStatus.nobleHashes = true;
// console.log(
// "✔ @noble/hashes loaded successfully for SecureBuffer"
// );
}
}
catch (e) {
console.warn("⚠️ @noble/hashes not available for SecureBuffer:", e.message);
}
// Initialize @noble/ciphers using require for compatibility
try {
// Try importing specific submodules instead of root module
const chachaLib = require("@noble/ciphers/chacha");
const aesLib = require("@noble/ciphers/aes");
if (chachaLib && aesLib) {
exports.nobleCiphers = {
chacha20poly1305: chachaLib.chacha20poly1305,
aes: aesLib,
};
libraryStatus.nobleCiphers = true;
// console.log(
// "✔ @noble/ciphers loaded successfully for SecureBuffer"
// );
}
}
catch (e) {
// Silently fail - this is optional
// console.warn(
// "⚠️ @noble/ciphers not available for SecureBuffer:",
// (e as Error).message
// );
}
}
// Initialize libraries asynchronously and non-blocking
let initializationPromise = null;
function ensureLibrariesInitialized() {
if (!initializationPromise) {
initializationPromise = initializeSecurityLibraries().catch((_error) => {
// Silently handle initialization errors - libraries are optional
// console.error(
// "Failed to initialize security libraries for SecureBuffer:",
// error
// );
});
}
return initializationPromise;
}
exports.ensureLibrariesInitialized = ensureLibrariesInitialized;
exports.initializeSecurityLibraries = initializeSecurityLibraries;
exports.libraryStatus = libraryStatus;
//# sourceMappingURL=secure-mem.type.js.map