chore: add custom cursor, add config system
This commit is contained in:
37
src/lib/crypto.ts
Normal file
37
src/lib/crypto.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import cryptojs from 'crypto-js';
|
||||
|
||||
export class Crypto {
|
||||
private key: cryptojs.lib.WordArray;
|
||||
private ivLength: number;
|
||||
|
||||
constructor(key: string, opts?: { ivLength?: number }) {
|
||||
this.key = cryptojs.SHA256(key);
|
||||
this.ivLength = opts?.ivLength ?? 16;
|
||||
}
|
||||
|
||||
encrypt(str: string): string {
|
||||
const iv = cryptojs.lib.WordArray.random(this.ivLength);
|
||||
const encrypted = cryptojs.AES.encrypt(str, this.key, { iv });
|
||||
|
||||
const ivBase64 = iv.toString(cryptojs.enc.Base64);
|
||||
const ctBase64 = encrypted.ciphertext.toString(cryptojs.enc.Base64);
|
||||
|
||||
return `${ivBase64}:${ctBase64}`;
|
||||
}
|
||||
|
||||
decrypt(data: string): string {
|
||||
const [ivBase64, ctBase64] = data.split(':');
|
||||
|
||||
if (!ivBase64 || !ctBase64) throw new Error('Invalid input format');
|
||||
|
||||
const iv = cryptojs.enc.Base64.parse(ivBase64);
|
||||
const ciphertext = cryptojs.enc.Base64.parse(ctBase64);
|
||||
|
||||
const cipherParams = cryptojs.lib.CipherParams.create({
|
||||
ciphertext,
|
||||
});
|
||||
|
||||
const decrypted = cryptojs.AES.decrypt(cipherParams, this.key, { iv });
|
||||
return decrypted.toString(cryptojs.enc.Utf8);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user