JavaScript HSM API Dinamo
    Preparing search index...
    import { hsm } from "@dinamonetworks/hsm-dinamo";

    const cipherExample = async () => {
    let conn;
    try {
    // Define os parâmetros de conexão com o HSM
    const options = {
    host: "127.0.0.1",
    authUsernamePassword: {
    username: "master",
    password: "12345678",
    },
    };

    // Estabelece conexão com o HSM
    conn = await hsm.connect(options);
    console.log("Connected to HSM successfully.");

    // 1. Cria uma chave AES para o exemplo
    const keyName = `AES_KEY_${Date.now()}`;
    await conn.key.create(
    keyName,
    hsm.enums.SYMMETRICAL_KEYS.ALG_AES_128,
    false, // Exportável
    true // Temporário
    );
    console.log(`AES key created successfully: ${keyName}`);

    const data = Buffer.from("Sensitive data to be protected by HSM", "utf8");
    const iv = 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.
    const cipherOptions = {
    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...");
    const ciphertext = await conn.cryptography.encrypt(cipherOptions, data);
    console.log("Ciphertext (hex):", ciphertext.toString("hex"));

    // 3. Descriptografa o dado
    console.log("Decrypting data...");
    const plaintext = await conn.cryptography.decrypt(cipherOptions, ciphertext);
    console.log("Plaintext restored:", plaintext.toString("utf8"));

    // 4. Uso do método genérico cipher()
    // É necessário definir a direção manualmente no campo mode
    console.log("Using generic cipher() method...");
    const genericOptions = {
    ...cipherOptions,
    mode: hsm.enums.SYMMETRIC_OPERATIONS_MODE.MODE_CBC | hsm.enums.SYMMETRIC_OPERATIONS_DIRECTION.ENCRYPT
    };
    const genericResult = await conn.cryptography.cipher(genericOptions, data);
    console.log("Generic encryption result matches:", genericResult.equals(ciphertext));

    } catch (err) {
    console.error("Error during cipher example:", err.message);
    } finally {
    if (conn) {
    await conn.disconnect();
    console.log("Disconnected from HSM.");
    }
    }
    };

    cipherExample();