// Importa FileSystem do NodeJS
const fs = require("node:fs");
// Importa o Path do NodeJS
const path = require("node:path");

// 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 generateP10() {
// Connecta ao HSM
const conn = await hsm.connect(options);

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

// Cria a nova chave
const created = await conn.key.create(
keyName, // Nome da chave
hsm.enums.RSA_ASYMMETRIC_KEYS.ALG_RSA_2048, // Algoritmo da chave
true, // Se é exportável
true // Se é temporária
);

// Verifica se a chave foi criada
if (created) {
console.log("Key created");

// Gera o P10
const dn = {
CN: "Dev Team",
OU: ["Engenharia", "TI"],
O: "Exemplo Corp",
L: "Brasilia",
ST: "DF",
C: "BR",
E: "lab@dev.com",
};
const p10 = await conn.key.generatePKCS10(
keyName, // Nome da chave
dn // Distinguished Name
);

// Verifica se o P10 foi gerado
if (p10) {
console.log("PKCS#10 generated");

const certClearText = await conn.key.exportCertClearText(keyName);

console.log(
"Cert clear text (base64): " + certClearText.toString("base64")
);
} else {
console.log("P10 not generated");
}
} else {
console.log("Key not created");
}

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

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