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