De key_export_kek_wrap.js
// 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 exportKekWrap() {
// Connecta ao HSM
const conn = await hsm.connect(options);
// Chave que será útilizaada para encriptar a chave que será exportada
const kekKeyName = 'myKekKey';
// Cria a chave KEK no HSM
const kekImported = await conn.key.create(
kekKeyName, // Nome da chave
hsm.enums.SYMMETRICAL_KEYS.ALG_AES_256, // Algoritmo da chave
true, // Se é exportável
true // Se é temporária
)
if (!kekImported) {
console.log("Error on create KEK key");
return;
}
// Chave que será encriptada e exportada
const keyName = 'myEncryptedKey';
// Cria a chave no HSM
const keyToExport = await conn.key.create(
keyName, // Nome da chave
hsm.enums.SYMMETRICAL_KEYS.ALG_AES_256, // Algoritmo da chave
true, // Se é exportável
true // Se é temporária
)
if (!keyToExport) {
console.log("Error on create key");
return;
}
// IV (Initialization Vector) utilizado para encriptar a chave
const iv = '5C3473E5016D36B341D0F363FF95BC1B'
// Exporta a chave encriptada com a KEK
const exportedKekKey = await conn.key.exportKekWrap(
hsm.enums.KEK_MODE.MODE_ECB, // 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
iv // IV utilizado para encriptar a chave
);
if (!exportedKekKey || !exportedKekKey.length === 0) {
console.log("Error on export encrypted key");
return;
}
console.log("Encrypted key exported successfully");
console.log("Encrypted key: " + exportedKekKey.toString('hex'));
// Desconecta do HSM
await conn.disconnect();
}
// Execute a função exportKekWrap
exportKekWrap();