import * as crypto from "node:crypto";
import * as util from "node:util";

const generateKeyPair = util.promisify(crypto.generateKeyPair);

export async function genRsaKeyPair(modulusLength = 2048) {
	return await generateKeyPair("rsa", {
		modulusLength,
		publicKeyEncoding: {
			type: "spki",
			format: "pem",
		},
		privateKeyEncoding: {
			type: "pkcs8",
			format: "pem",
			cipher: undefined,
			passphrase: undefined,
		},
	});
}

export async function genEcKeyPair(
	namedCurve:
		| "prime256v1"
		| "secp384r1"
		| "secp521r1"
		| "curve25519" = "prime256v1",
) {
	return await generateKeyPair("ec", {
		namedCurve,
		publicKeyEncoding: {
			type: "spki",
			format: "pem",
		},
		privateKeyEncoding: {
			type: "pkcs8",
			format: "pem",
			cipher: undefined,
			passphrase: undefined,
		},
	});
}
