Blame view

node_modules/browserify-aes/modes/ctr.js 908 Bytes
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
  var xor = require('buffer-xor')
  var Buffer = require('safe-buffer').Buffer
  var incr32 = require('../incr32')
  
  function getBlock (self) {
    var out = self._cipher.encryptBlockRaw(self._prev)
    incr32(self._prev)
    return out
  }
  
  var blockSize = 16
  exports.encrypt = function (self, chunk) {
    var chunkNum = Math.ceil(chunk.length / blockSize)
    var start = self._cache.length
    self._cache = Buffer.concat([
      self._cache,
      Buffer.allocUnsafe(chunkNum * blockSize)
    ])
    for (var i = 0; i < chunkNum; i++) {
      var out = getBlock(self)
      var offset = start + i * blockSize
      self._cache.writeUInt32BE(out[0], offset + 0)
      self._cache.writeUInt32BE(out[1], offset + 4)
      self._cache.writeUInt32BE(out[2], offset + 8)
      self._cache.writeUInt32BE(out[3], offset + 12)
    }
    var pad = self._cache.slice(0, chunk.length)
    self._cache = self._cache.slice(chunk.length)
    return xor(chunk, pad)
  }