imba
Version:
28 lines (27 loc) • 942 B
JavaScript
import xor from "../../buffer-xor";
import incr32 from "../incr32";
function getBlock(self) {
var out = self._cipher.encryptBlockRaw(self._prev);
incr32(self._prev);
return out;
}
var blockSize = 16;
export const encrypt = function (self, chunk) {
var chunkNum = Math.ceil(chunk.length / blockSize);
var start = self._cache.length;
self._cache = Buffer.concat([
self._cache,
Buffer.allocUnsafe(chunkNum * blockSize)
]);
for (var i = 0; i < chunkNum; i++) {
var out = getBlock(self);
var offset = start + i * blockSize;
self._cache.writeUInt32BE(out[0], offset + 0);
self._cache.writeUInt32BE(out[1], offset + 4);
self._cache.writeUInt32BE(out[2], offset + 8);
self._cache.writeUInt32BE(out[3], offset + 12);
}
var pad = self._cache.slice(0, chunk.length);
self._cache = self._cache.slice(chunk.length);
return xor(chunk, pad);
};