Blame view

node_modules/browserify-cipher/browser.js 1.97 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  var DES = require('browserify-des')
  var aes = require('browserify-aes/browser')
  var aesModes = require('browserify-aes/modes')
  var desModes = require('browserify-des/modes')
  var ebtk = require('evp_bytestokey')
  
  function createCipher (suite, password) {
    suite = suite.toLowerCase()
  
    var keyLen, ivLen
    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) {
    suite = suite.toLowerCase()
  
    var keyLen, ivLen
    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)
    if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })
  
    throw new TypeError('invalid suite type')
  }
  
  function createDecipheriv (suite, key, iv) {
    suite = suite.toLowerCase()
    if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)
    if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })
  
    throw new TypeError('invalid suite type')
  }
  
  function getCiphers () {
    return Object.keys(desModes).concat(aes.getCiphers())
  }
  
  exports.createCipher = exports.Cipher = createCipher
  exports.createCipheriv = exports.Cipheriv = createCipheriv
  exports.createDecipher = exports.Decipher = createDecipher
  exports.createDecipheriv = exports.Decipheriv = createDecipheriv
  exports.listCiphers = exports.getCiphers = getCiphers