text: var ebtk = require('evp_bytestokey')
  var aes = require('browserify-aes/browser')
  var DES = require('browserify-des')
  var desModes = require('browserify-des/modes')
  var aesModes = require('browserify-aes/modes')
  function createCipher (suite, password) {
    var keyLen, ivLen
    suite = suite.toLowerCase()
    if (aesModes[suite]) {
      keyLen = aesModes[suite].key
      ivLen = aesModes[suite].iv
    } else if (desModes[suite]) {
      keyLen = desModes[suite].key * 8
      ivLen = desModes[suite].iv
    } else {
      throw new TypeError('invalid suite type')
    }
    var keys = ebtk(password, false, keyLen, ivLen)
    return createCipheriv(suite, keys.key, keys.iv)
  }
  function createDecipher (suite, password) {
    var keyLen, ivLen
    suite = suite.toLowerCase()
    if (aesModes[suite]) {
      keyLen = aesModes[suite].key
      ivLen = aesModes[suite].iv
    } else if (desModes[suite]) {
      keyLen = desModes[suite].key * 8
      ivLen = desModes[suite].iv
    } else {
      throw new TypeError('invalid suite type')
    }
    var keys = ebtk(password, false, keyLen, ivLen)
    return createDecipheriv(suite, keys.key, keys.iv)
  }
  
  function createCipheriv (suite, key, iv) {
    suite = suite.toLowerCase()
    if (aesModes[suite]) {
      return aes.createCipheriv(suite, key, iv)
    } else if (desModes[suite]) {
      return new DES({
        key: key,
        iv: iv,
        mode: suite
      })
    } else {
      throw new TypeError('invalid suite type')
    }
  }
  function createDecipheriv (suite, key, iv) {
    suite = suite.toLowerCase()
    if (aesModes[suite]) {
      return aes.createDecipheriv(suite, key, iv)
    } else if (desModes[suite]) {
      return new DES({
        key: key,
        iv: iv,
        mode: suite,
        decrypt: true
      })
    } else {
      throw new TypeError('invalid suite type')
    }
  }
  exports.createCipher = exports.Cipher = createCipher
  exports.createCipheriv = exports.Cipheriv = createCipheriv
  exports.createDecipher = exports.Decipher = createDecipher
  exports.createDecipheriv = exports.Decipheriv = createDecipheriv
  function getCiphers () {
    return Object.keys(desModes).concat(aes.getCiphers())
  }
  exports.listCiphers = exports.getCiphers = getCiphers
  