/*
 * This is a stupid little mock that basically disabled encryption.
 * The reason it is needed is because the Forge module loader doesn't
 * play along with Jest.
 */
const forge = require('../../node_modules/node-forge/lib/index');

module.exports = {
  jsbn: forge.jsbn,
  util: forge.util,
  pkcs5: {
    pbkdf2: forge.pkcs5.pbkdf2,
  },
  md: {
    sha256: forge.md.sha256,
  },
  rsa: {
    setPublicKey() {
      return {
        encrypt(str) {
          return str;
        },
      };
    },
    setPrivateKey() {
      return {
        decrypt(str) {
          return str;
        },
      };
    },
  },
  random: {
    getBytesSync(n) {
      let s = '';
      for (let i = 0; i < n; i++) {
        s += 'a';
      }
      return s;
    },
  },
  pki: {
    rsa: {
      generateKeyPair() {
        return {
          privateKey: {
            d: 'a',
            dP: 'a',
            dQ: 'a',
            e: 'a',
            n: 'a',
            p: 'a',
            q: 'a',
            qInv: 'a',
          },
          publicKey: {
            e: 'a',
            n: 'a',
          },
        };
      },
    },
  },
  cipher: {
    createCipher(alg, key) {
      return {
        start(config) {
          this._config = config;
        },
        update(buffer) {
          this._data = buffer;
        },
        finish() {
          this.mode = { tag: 'tag' };
          this.output = this._data;
        },
      };
    },
    createDecipher(alg, key) {
      return {
        start(config) {
          this._config = config;
        },
        update(buffer) {
          this.output = buffer;
        },
        finish() {
          return true;
        },
      };
    },
  },
};
