import Logging from "@hibas123/nodelogging"; import * as fs from "fs"; let private_key: string; let rsa: RSA; export function sign(message: Buffer): Buffer { return rsa.sign(message, "buffer"); } export function verify(message: Buffer, signature: Buffer): boolean { return rsa.verify(message, signature); } export let public_key: string; import * as jwt from "jsonwebtoken"; import config from "./config"; export function createJWT(payload: any, options: jwt.SignOptions) { return new Promise((resolve, reject) => { return jwt.sign(payload, private_key, options, (err, token) => { if (err) reject(err); else resolve(token); }); }); } export async function validateJWT(data: string) { return new Promise((resolve, reject) => { jwt.verify(data, public_key, (err, valid) => { if (err) reject(err); else resolve(valid); }); }); } let create = false; if (fs.existsSync("./keys")) { if (fs.existsSync("./keys/private.pem")) { if (fs.existsSync("./keys/public.pem")) { Logging.log("Using existing private and public key"); private_key = fs.readFileSync("./keys/private.pem").toString("utf8"); public_key = fs.readFileSync("./keys/public.pem").toString("utf8"); if (!private_key || !public_key) { create = true; } } else create = true; } else create = true; } else create = true; import * as RSA from "node-rsa"; if (create === true) { Logging.log("Started RSA Key gen"); let rsa = new RSA({ b: 4096 }); private_key = rsa.exportKey("private"); public_key = rsa.exportKey("public"); if (!fs.existsSync("./keys")) { fs.mkdirSync("./keys"); } fs.writeFileSync("./keys/private.pem", private_key); fs.writeFileSync("./keys/public.pem", public_key); Logging.log("Key pair generated"); } rsa = new RSA(private_key, "private"); rsa.importKey(public_key, "public");