A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import { EncryptionService } from "./EncryptionService"; import * as sjcl from "sjcl"; import { MessageCipherDTO } from "../dto/MessageCipherDTO"; export class SJCLEncryptionService implements EncryptionService { private _params = { mode: "gcm", ts: 128, adata: "", iter: 10000 }; // @ts-ignore
private readonly _promiseWorker: any;
constructor(promiseWorker: any ) { this._promiseWorker = promiseWorker; }
public encrypt(passphrase: string, plainText: string): MessageCipherDTO { // @ts-ignore
return JSON.parse(sjcl.encrypt(passphrase, plainText, this._params) as string) as MessageCipherDTO; }
public decrypt(passphrase: string, cipher: MessageCipherDTO): string { return sjcl.decrypt(passphrase, JSON.stringify(cipher), undefined, undefined); }
public async decryptAsPromise(passphrase: string, cipher: MessageCipherDTO): Promise<string> { const decrypted = await this._promiseWorker.postMessage({"passphrase": passphrase, "cipher": cipher}) return decrypted; } }
|