crc32.js 821 B

1234567891011121314151617181920212223242526272829
  1. var isStr = require('./isStr');
  2. var strToBytes = require('./strToBytes');
  3. var TABLE = [];
  4. for (var n = 0; n < 256; n++) {
  5. var c = n;
  6. for (var k = 0; k < 8; k++) {
  7. if (c & 1) {
  8. c = 0xedb88320 ^ (c >>> 1);
  9. } else {
  10. c = c >>> 1;
  11. }
  12. }
  13. TABLE[n] = c >>> 0;
  14. }
  15. if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
  16. exports = function(input, previous) {
  17. return exports.signed(input, previous) >>> 0;
  18. };
  19. exports.signed = function(input, previous) {
  20. if (isStr(input)) input = strToBytes(input);
  21. var crc = previous === 0 ? 0 : ~~previous ^ -1;
  22. for (var i = 0, len = input.length; i < len; i++) {
  23. var byte = input[i];
  24. crc = TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);
  25. }
  26. return crc ^ -1;
  27. };
  28. module.exports = exports;