GT AI OS Community v2.0.33 - Add NVIDIA NIM and Nemotron agents
- Updated python_coding_microproject.csv to use NVIDIA NIM Kimi K2 - Updated kali_linux_shell_simulator.csv to use NVIDIA NIM Kimi K2 - Made more general-purpose (flexible targets, expanded tools) - Added nemotron-mini-agent.csv for fast local inference via Ollama - Added nemotron-agent.csv for advanced reasoning via Ollama - Added wiki page: Projects for NVIDIA NIMs and Nemotron
This commit is contained in:
118
packages/utils/dist/crypto.js
vendored
Normal file
118
packages/utils/dist/crypto.js
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.generateEncryptionKey = generateEncryptionKey;
|
||||
exports.encrypt = encrypt;
|
||||
exports.decrypt = decrypt;
|
||||
exports.sha256Hash = sha256Hash;
|
||||
exports.generateHMAC = generateHMAC;
|
||||
exports.verifyHMAC = verifyHMAC;
|
||||
exports.deriveTenantKey = deriveTenantKey;
|
||||
exports.encryptForDatabase = encryptForDatabase;
|
||||
exports.decryptFromDatabase = decryptFromDatabase;
|
||||
exports.generateSecurePassword = generateSecurePassword;
|
||||
// Cryptographic utilities for GT 2.0
|
||||
const crypto_1 = __importDefault(require("crypto"));
|
||||
// Encryption configuration
|
||||
const ALGORITHM = 'aes-256-gcm';
|
||||
const KEY_LENGTH = 32; // 256 bits
|
||||
const IV_LENGTH = 16; // 128 bits
|
||||
const TAG_LENGTH = 16; // 128 bits
|
||||
/**
|
||||
* Generate a random encryption key
|
||||
*/
|
||||
function generateEncryptionKey() {
|
||||
return crypto_1.default.randomBytes(KEY_LENGTH).toString('hex');
|
||||
}
|
||||
/**
|
||||
* Encrypt data using AES-256-GCM
|
||||
*/
|
||||
function encrypt(data, keyHex) {
|
||||
const key = Buffer.from(keyHex, 'hex');
|
||||
const iv = crypto_1.default.randomBytes(IV_LENGTH);
|
||||
const cipher = crypto_1.default.createCipher(ALGORITHM, key);
|
||||
cipher.setAAD(Buffer.from('GT2-TENANT-DATA'));
|
||||
let encrypted = cipher.update(data, 'utf8', 'hex');
|
||||
encrypted += cipher.final('hex');
|
||||
const tag = cipher.getAuthTag();
|
||||
return {
|
||||
encrypted,
|
||||
iv: iv.toString('hex'),
|
||||
tag: tag.toString('hex')
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Decrypt data using AES-256-GCM
|
||||
*/
|
||||
function decrypt(encryptedData, keyHex, ivHex, tagHex) {
|
||||
const key = Buffer.from(keyHex, 'hex');
|
||||
const iv = Buffer.from(ivHex, 'hex');
|
||||
const tag = Buffer.from(tagHex, 'hex');
|
||||
const decipher = crypto_1.default.createDecipher(ALGORITHM, key);
|
||||
decipher.setAuthTag(tag);
|
||||
decipher.setAAD(Buffer.from('GT2-TENANT-DATA'));
|
||||
let decrypted = decipher.update(encryptedData, 'hex', 'utf8');
|
||||
decrypted += decipher.final('utf8');
|
||||
return decrypted;
|
||||
}
|
||||
/**
|
||||
* Hash data using SHA-256
|
||||
*/
|
||||
function sha256Hash(data) {
|
||||
return crypto_1.default.createHash('sha256').update(data).digest('hex');
|
||||
}
|
||||
/**
|
||||
* Generate HMAC signature
|
||||
*/
|
||||
function generateHMAC(data, secret) {
|
||||
return crypto_1.default.createHmac('sha256', secret).update(data).digest('hex');
|
||||
}
|
||||
/**
|
||||
* Verify HMAC signature
|
||||
*/
|
||||
function verifyHMAC(data, signature, secret) {
|
||||
const expectedSignature = generateHMAC(data, secret);
|
||||
return crypto_1.default.timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'));
|
||||
}
|
||||
/**
|
||||
* Generate tenant-specific encryption key from master key and tenant ID
|
||||
*/
|
||||
function deriveTenantKey(masterKey, tenantId) {
|
||||
const key = crypto_1.default.pbkdf2Sync(tenantId, Buffer.from(masterKey, 'hex'), 100000, // iterations
|
||||
KEY_LENGTH, 'sha256');
|
||||
return key.toString('hex');
|
||||
}
|
||||
/**
|
||||
* Encrypt JSON data for database storage
|
||||
*/
|
||||
function encryptForDatabase(data, encryptionKey) {
|
||||
const jsonString = JSON.stringify(data);
|
||||
const { encrypted, iv, tag } = encrypt(jsonString, encryptionKey);
|
||||
// Combine all components into a single string
|
||||
return `${iv}:${tag}:${encrypted}`;
|
||||
}
|
||||
/**
|
||||
* Decrypt JSON data from database storage
|
||||
*/
|
||||
function decryptFromDatabase(encryptedData, encryptionKey) {
|
||||
const [iv, tag, encrypted] = encryptedData.split(':');
|
||||
if (!iv || !tag || !encrypted) {
|
||||
throw new Error('Invalid encrypted data format');
|
||||
}
|
||||
const jsonString = decrypt(encrypted, encryptionKey, iv, tag);
|
||||
return JSON.parse(jsonString);
|
||||
}
|
||||
/**
|
||||
* Generate a secure random password
|
||||
*/
|
||||
function generateSecurePassword(length = 16) {
|
||||
const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*';
|
||||
let password = '';
|
||||
for (let i = 0; i < length; i++) {
|
||||
const randomIndex = crypto_1.default.randomInt(0, charset.length);
|
||||
password += charset[randomIndex];
|
||||
}
|
||||
return password;
|
||||
}
|
||||
Reference in New Issue
Block a user