mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
34 lines
983 B
TypeScript
34 lines
983 B
TypeScript
import { createCipheriv, createDecipheriv, randomBytes, createHash } from "crypto";
|
|
|
|
const ALGORITHM = "aes-256-cbc"
|
|
const IV = randomBytes(16);
|
|
|
|
export type Hash = {
|
|
iv: string,
|
|
encryptedData: string
|
|
}
|
|
|
|
export type Encryption = {
|
|
encrypt: (value:string) => Hash
|
|
decrypt: (hash: Hash) => string
|
|
}
|
|
|
|
const encryption = (secret: string): Encryption => {
|
|
const key = createHash('sha256').update(String(secret)).digest('base64').substr(0, 32);
|
|
return {
|
|
encrypt: (value: string) => {
|
|
const cipher = createCipheriv(ALGORITHM, key, IV);
|
|
return {
|
|
iv: IV.toString("hex"),
|
|
encryptedData: Buffer.concat([cipher.update(value), cipher.final()]).toString("hex")
|
|
};
|
|
},
|
|
decrypt: (hash: Hash) => {
|
|
const decipher = createDecipheriv(ALGORITHM, key, Buffer.from(hash.iv, 'hex'));
|
|
return Buffer.concat([decipher.update(Buffer.from(hash.encryptedData, 'hex')), decipher.final()]).toString();
|
|
}
|
|
}
|
|
}
|
|
|
|
export default encryption;
|