1 |
|
2 | function encryptByte(self, byte, decrypt) {
|
3 | var pad;
|
4 | var i = -1;
|
5 | var len = 8;
|
6 | var out = 0;
|
7 | var bit, value;
|
8 | while (++i < len) {
|
9 | pad = self._cipher.encryptBlock(self._prev);
|
10 | bit = (byte & (1 << (7-i))) ? 0x80:0;
|
11 | value = pad[0] ^ bit;
|
12 | out += ((value&0x80) >> (i%8));
|
13 | self._prev = shiftIn(self._prev, decrypt?bit:value);
|
14 | }
|
15 | return out;
|
16 | }
|
17 | exports.encrypt = function (self, chunk, decrypt) {
|
18 | var len = chunk.length;
|
19 | var out = new Buffer(len);
|
20 | var i = -1;
|
21 | while (++i < len) {
|
22 | out[i] = encryptByte(self, chunk[i], decrypt);
|
23 | }
|
24 | return out;
|
25 | };
|
26 | function shiftIn(buffer, value) {
|
27 | var len = buffer.length;
|
28 | var i = -1;
|
29 | var out = new Buffer(buffer.length);
|
30 | buffer = Buffer.concat([buffer, new Buffer([value])]);
|
31 | while(++i < len) {
|
32 | out[i] = buffer[i]<<1 | buffer[i+1]>>(7);
|
33 | }
|
34 | return out;
|
35 | } |
\ | No newline at end of file |