Blame view

node_modules/browserify-cipher/test.js 1.8 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
  var test = require('tape')
  var crypto = require('crypto')
  var desModes = require('browserify-des/modes')
  var aesModes = require('browserify-aes/modes')
  var ourCrypto = require('./browser')
  
  function runIvTest (mode, keyLen, ivLen) {
    test('mode: ' + mode, function (t) {
      var i = 0
      while (++i < 10) {
        run(i)
      }
      function run (i) {
        t.test('run: ' + i, function (t) {
          t.plan(2)
          var key = crypto.randomBytes(keyLen)
          var iv = crypto.randomBytes(ivLen)
          var text = crypto.randomBytes(200)
          var ourEncrypt
          try {
            ourEncrypt = ourCrypto.createCipheriv(mode, key, iv)
          } catch (e) {
            t.notOk(e, e.stack)
          }
          var nodeEncrypt
          try {
            nodeEncrypt = crypto.createCipheriv(mode, key, iv)
          } catch (e) {
            t.notOk(e, e.stack)
          }
          var ourCipherText = Buffer.concat([ourEncrypt.update(text), ourEncrypt.final()])
          var authTag
          if (mode.slice(-3) === 'gcm') {
            authTag = ourEncrypt.getAuthTag()
          }
          var nodeCipherText = Buffer.concat([nodeEncrypt.update(text), nodeEncrypt.final()])
          t.equals(nodeCipherText.toString('hex'), ourCipherText.toString('hex'))
          var ourDecrypt = ourCrypto.createDecipheriv(mode, key, iv)
          if (mode.slice(-3) === 'gcm') {
            ourDecrypt.setAuthTag(authTag)
          }
          var plainText = Buffer.concat([ourDecrypt.update(ourCipherText), ourDecrypt.final()])
          t.equals(text.toString('hex'), plainText.toString('hex'))
        })
      }
    })
  }
  Object.keys(aesModes).forEach(function (modeName) {
    var mode = aesModes[modeName]
    runIvTest(modeName, mode.key / 8, mode.iv)
  })
  Object.keys(desModes).forEach(function (modeName) {
    var mode = desModes[modeName]
    runIvTest(modeName, mode.key, mode.iv)
  })