// Importa o cliente Dinamo HSM
const { hsm } = require("@dinamonetworks/hsm-dinamo");
const crypto = require("node:crypto");

// Define os parâmetros de conexão com o HSM
const options = {
host: "127.0.0.1",
authUsernamePassword: {
username: "master",
password: "12345678",
},
};

async function eccVerify() {
// Connecta ao HSM
const conn = await hsm.connect(options);

// Dados a serem assinados
const data = "Data to be signed";
const hash = crypto.createHash("sha256");
const hashedData = await hash.update(data).digest();

// Nome da chave
const keyName = "myEccVerifyKey";

// Cria a chave ECC
const keyCreated = await conn.key.create(
keyName, // Nome da chave
hsm.enums.ECC_ASYMMETRIC_SWITCHES.ALG_ECC_SECP256K1, // Algoritmo da chave
true, // Se é exportável
true // Se é temporária
);

// Efetua a assinatura ECC
const signature = await conn.cryptography.eccSign(
keyName, // Nome da chave
hsm.enums.HASH_ALGORITHMS.ALG_SHA2_256, // Algoritmo de hash
hashedData // Dados a serem assinados
);

// Verica a assinatura
const valid = await conn.cryptography.eccVerify(
keyName,
hsm.enums.HASH_ALGORITHMS.ALG_SHA2_256,
hashedData,
signature
);

// Verifica se a assinatura é válida
if (valid) {
console.log("Valid signature");
} else {
console.log("Invalid signature");
}

// Desconecta do HSM
await conn.disconnect();
}

// Execute a função eccVerify
eccVerify();