ctr.js 662 B

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