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