/* */ 
(function(Buffer) {
  var CipherBase = require('cipher-base');
  var des = require('des.js');
  var inherits = require('inherits');
  var modes = {
    'des-ede3-cbc': des.CBC.instantiate(des.EDE),
    'des-ede3': des.EDE,
    'des-ede-cbc': des.CBC.instantiate(des.EDE),
    'des-ede': des.EDE,
    'des-cbc': des.CBC.instantiate(des.DES),
    'des-ecb': des.DES
  };
  modes.des = modes['des-cbc'];
  modes.des3 = modes['des-ede3-cbc'];
  module.exports = DES;
  inherits(DES, CipherBase);
  function DES(opts) {
    CipherBase.call(this);
    var modeName = opts.mode.toLowerCase();
    var mode = modes[modeName];
    var type;
    if (opts.decrypt) {
      type = 'decrypt';
    } else {
      type = 'encrypt';
    }
    var key = opts.key;
    if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
      key = Buffer.concat([key, key.slice(0, 8)]);
    }
    var iv = opts.iv;
    this._des = mode.create({
      key: key,
      iv: iv,
      type: type
    });
  }
  DES.prototype._update = function(data) {
    return new Buffer(this._des.update(data));
  };
  DES.prototype._final = function() {
    return new Buffer(this._des.final());
  };
})(require('buffer').Buffer);
