1 | var xor = require('buffer-xor')
|
2 |
|
3 | exports.encrypt = function (self, data, decrypt) {
|
4 | var out = new Buffer('')
|
5 | var len
|
6 |
|
7 | while (data.length) {
|
8 | if (self._cache.length === 0) {
|
9 | self._cache = self._cipher.encryptBlock(self._prev)
|
10 | self._prev = new Buffer('')
|
11 | }
|
12 |
|
13 | if (self._cache.length <= data.length) {
|
14 | len = self._cache.length
|
15 | out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
|
16 | data = data.slice(len)
|
17 | } else {
|
18 | out = Buffer.concat([out, encryptStart(self, data, decrypt)])
|
19 | break
|
20 | }
|
21 | }
|
22 |
|
23 | return out
|
24 | }
|
25 | function encryptStart (self, data, decrypt) {
|
26 | var len = data.length
|
27 | var out = xor(data, self._cache)
|
28 | self._cache = self._cache.slice(len)
|
29 | self._prev = Buffer.concat([self._prev, decrypt ? data : out])
|
30 | return out
|
31 | }
|