28 lines
775 B
TypeScript
28 lines
775 B
TypeScript
import Password from "../tools/Password";
|
|
import crypto from "crypto";
|
|
import { secureValuesPublicKey } from "../../constants";
|
|
|
|
export const generateSecureValue = (content: string) => {
|
|
// Generate a hash of the content
|
|
const hash = Password.hash(content);
|
|
|
|
// Parse the PEM key into a proper KeyObject
|
|
const publicKey = crypto.createPublicKey(secureValuesPublicKey);
|
|
|
|
// Encrypt the content using the .secureValues.pub public key
|
|
const encrypted = crypto.publicEncrypt(
|
|
{
|
|
key: publicKey,
|
|
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
|
|
oaepHash: "sha256",
|
|
},
|
|
Buffer.from(content, "utf-8"),
|
|
);
|
|
|
|
// Return the encrypted content and the hash for storage
|
|
return {
|
|
encrypted: encrypted.toString("base64"),
|
|
hash,
|
|
};
|
|
};
|