cfb1.js 850 B

12345678910111213141516171819202122232425262728293031323334
  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. }