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