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

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

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

// Nome e Hexadecimal da chave que útilizaada para encriptar a chave AES
const kekKeyName = "myKekKey";
const kekKeyData = Buffer.from(
"1DBA0B9C732C697B204220F8D63A5FE2A521866864785A6CDB071152DA59639E",
"hex"
);

// Importa a chave útilizada para encriptar
const kekImported = await conn.key.import(
kekKeyName, // Nome da chave
hsm.enums.SYMMETRICAL_KEYS.ALG_AES_256, // Algoritmo da chave
kekKeyData, // Dados da chave
true, // Se a chave é exportável
true // Se a chave é temporária
);

if (!kekImported) {
console.log("Error importing KEK");
return;
}

// Dados da chave que foi encriptada e será importada
// Nome do chave
const keyName = "myEncryptedKey";
// IV (Inicialization Vector) utilizado para encriptar a chave
const iv = "00000000000000000000000000000000";
// Dados da chave encriptada
const data = Buffer.from(
"2C2E214A8A9D281D296FEF58F7474291FD0A9421C80A4161C3AE2CA253735854",
"hex"
);

// Importa a chave encriptada
const imported = await conn.key.importKekWrap(
hsm.enums.KEK_MODE.MODE_CBC, // Modo de operação para a importação da chave
hsm.enums.KEK_WRAP_PADDING._0_PAD, // Padding utilizado na exportação da chave
keyName, // Nome da chave
kekKeyName, // Nome da chave útilizada para encriptar
hsm.enums.SYMMETRICAL_KEYS.ALG_AES_256, // Algoritmo da chave
data, // Dados da chave encriptada
iv, // IV utilizado para encriptar a chave
true, // Se a chave é exportável
true // Se a chave é temporária
);

if (imported) {
console.log("Key imported successfully");
} else {
console.log("Error importing key");
}

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

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