Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80551 views
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
}
29
30