private getEncryption()

in src/core/swa-cli-persistence-plugin/impl/crypto.ts [18:53]


  private getEncryption(): Promise<Encryption> {
    if (!this.encryption) {
      this.encryption = Promise.resolve({
        encrypt: (machineId: string, value: string): Promise<string> => {
          return new Promise((resolve, reject) => {
            try {
              const iv = crypto.randomBytes(CryptoService.IV_LENGTH);
              let cipher = crypto.createCipheriv(CryptoService.ALGORITHM, Buffer.from(machineId), iv);
              let encrypted = cipher.update(value);
              encrypted = Buffer.concat([encrypted, cipher.final()]);
              const encryptedValue = iv.toString("hex") + ":" + encrypted.toString("hex");
              resolve(encryptedValue);
            } catch (error) {
              reject(error);
            }
          });
        },
        decrypt: (machineId: string, data: string): Promise<string> => {
          return new Promise((resolve, reject) => {
            try {
              let dataSegments: string[] = data.includes(":") ? data.split(":") : [];
              let iv = Buffer.from(dataSegments.shift() || "", "hex");
              let encryptedText = Buffer.from(dataSegments.join(":"), "hex");
              let decipher = crypto.createDecipheriv(CryptoService.ALGORITHM, Buffer.from(machineId), iv);
              let decrypted = decipher.update(encryptedText);
              decrypted = Buffer.concat([decrypted, decipher.final()]);
              resolve(decrypted.toString());
            } catch (error) {
              reject(error);
            }
          });
        },
      });
    }
    return this.encryption;
  }