Exemplo de cifração/decifração simétrica (one-shot)
import { hsm } from"@dinamonetworks/hsm-dinamo";
constcipherExample = async () => { letconn; try { // Define os parâmetros de conexão com o HSM constoptions = { host:"127.0.0.1", authUsernamePassword: { username:"master", password:"12345678", }, };
// Estabelece conexão com o HSM conn = awaithsm.connect(options); console.log("Connected to HSM successfully.");
// 1. Cria uma chave AES para o exemplo constkeyName = `AES_KEY_${Date.now()}`; awaitconn.key.create( keyName, hsm.enums.SYMMETRICAL_KEYS.ALG_AES_128, false, // Exportável true// Temporário ); console.log(`AES key created successfully: ${keyName}`);
constdata = Buffer.from("Sensitive data to be protected by HSM", "utf8"); constiv = Buffer.alloc(16, 0); // IV zerado para o exemplo (use IVs aleatórios em produção)
// Define as opções da operação // Nota: O modo deve conter apenas a modalidade de operação (ex: CBC, ECB, CTR, GCM) // O HSM identifica o algoritmo (ex: AES) a partir da chave fornecida. constcipherOptions = { keyName:keyName, mode:hsm.enums.SYMMETRIC_OPERATIONS_MODE.MODE_CBC, iv:iv };
// 2. Criptografa o dado (one-shot) // Se o dado for maior que 1200 bytes, o SDK utilizará internamente o modo STREAM. console.log("Encrypting data..."); constciphertext = awaitconn.cryptography.encrypt(cipherOptions, data); console.log("Ciphertext (hex):", ciphertext.toString("hex"));