// Define os parâmetros de conexão com o HSM constoptions = { host:"127.0.0.1", authUsernamePassword: { username:"master", password:"12345678", }, };
asyncfunctionverifySignature() { // Connecta ao HSM constconn = awaithsm.connect(options);
// Nome da chave constkeyName = "myKeyToVerifySignature";
// Cria uma nova chave constkey = awaitconn.blockchain.create( keyName, // Nome da chave hsm.enums.BLOCKCHAIN_KEYS.BITCOIN_MINI_KEY, // Tipo true, // Se é exportável true, // Se é temporária hsm.enums.VERSION_OPTIONS.BIP32_TEST_NET// Versão );
// Dados para serem aplicados a hash constdataToHash = Buffer.from("Data to hash"); // Geração de hash com base nos dados consthashedData = awaitconn.blockchain.hashData( hsm.enums.BLOCKCHAIN_HASH_MODE.SHA256, dataToHash );
// Assina o hash constsignedHash = awaitconn.blockchain.sign( hsm.enums.BLOCKCHAIN_SIG_TYPE.SIG_RAW_ECDSA, // Tipo da assinatura hsm.enums.BLOCKCHAIN_HASH_MODE.KECCAK256, // Tipo do hash hashedData, // Dados a serem assinados keyName// Nome da chave );
// Recupera a chave pública constpubKeyRecovered = awaitconn.blockchain.pubKeyRecovery( hsm.enums.BLOCKCHAIN_SIG_TYPE.SIG_RAW_ECDSA, // Tipo da assinatura hsm.enums.BLOCKCHAIN_HASH_MODE.KECCAK256, // Modo do hash hashedData, // Hash dos dados signedHash// Assinatura );
// Verifica a assinatura constvalidSig = awaitconn.blockchain.verify( hsm.enums.BLOCKCHAIN_SIG_TYPE.SIG_RAW_ECDSA, // Tipo da assinatura hsm.enums.BLOCKCHAIN_HASH_MODE.KECCAK256, // Modo do hash hashedData, // Hash dos dados signedHash, // Assinatura hsm.enums.BLOCKCHAIN_SIG_VERIFY_PUB_KEY_TYPE.SEC1_UNCOMP, // Tipo da chave pública pubKeyRecovered// Chave pública );
// Verifica se a assinatura é válida if (validSig) { console.log("Valid signature!"); } else { console.log("Invalid signature!"); }
// Desconecta do HSM awaitconn.disconnect(); }
// Execute a função verifySignature verifySignature();