conststreamCipherExample = 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_STREAM_${Date.now()}`; awaitconn.key.create( keyName, hsm.enums.SYMMETRICAL_KEYS.ALG_AES_128, false, true );
constiv = Buffer.alloc(16, 0);
// Define as opções para o stream de cifração constcipherOptions = { keyName:keyName, mode:hsm.enums.SYMMETRIC_OPERATIONS_MODE.MODE_CBC | hsm.enums.SYMMETRIC_OPERATIONS_DIRECTION.ENCRYPT, iv:iv };
// 2. Cria o Transform Stream de cifração constcipherStream = conn.cryptography.createCipherStream(cipherOptions);
// 3. Simula uma fonte de dados (ex: leitura de arquivo) constsourceData = "Large amount of data that should be processed in chunks through a stream."; constsourceStream = Readable.from(sourceData);
console.log("Processing data through cipher stream..."); letencryptedResult = Buffer.alloc(0);
// 4. Conecta os streams sourceStream.pipe(cipherStream);
// 5. Coleta o resultado forawait (constchunkofcipherStream) { encryptedResult = Buffer.concat([encryptedResult, chunk]); console.log(`Received encrypted chunk of ${chunk.length} bytes`); }