Exportación de clave simétrica envuelta en KEK (clave de cifrado)

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();