import { doesFileExist, loadFile, type FileHandle } from "./filesystem-utils"; import { SERVER_PRIVATE_KEY_PATH, SERVER_PUBLIC_KEY_PATH } from "./constants"; import { shell, type shellOutput } from "./shell-commands"; export async function openSSLInit() { await openSSLCreatePrivateKey() await openSSLCreatePublicKey() } export async function openSSLCreatePrivateKey() { // UGLY: may be refactored to output only the private key const outputPromise = shell(`openssl ecparam -genkey -name secp521r1 -noout | openssl pkcs8 -topk8 -nocrypt`) // const outputPromise = $`openssl ecparam -genkey -name secp521r1 -noout | openssl pkcs8 -topk8 -nocrypt`.text() const filePromise = loadFile(SERVER_PRIVATE_KEY_PATH, true) const [output, file] : [shellOutput, FileHandle]= await Promise.all([ outputPromise, filePromise ]) await file.write(output.stdout) } export async function openSSLCreatePublicKey() { // UGLY: may be refactored to output only the private key if (! await doesFileExist(SERVER_PRIVATE_KEY_PATH)) { // UGLY: make more specific throw new Error("You must generate the private key before attempting to generate the public one") } const outputPromise = shell(`openssl ec -in ${SERVER_PRIVATE_KEY_PATH} -pubout `) const filePromise = loadFile(SERVER_PUBLIC_KEY_PATH, true) const [output, file] = await Promise.all([ outputPromise, filePromise ]) await file.write(output.stdout) }