| /** |
| * node-crc32-stream |
| * |
| * Copyright (c) 2014 Chris Talkington, contributors. |
| * Licensed under the MIT license. |
| * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT |
| */ |
| var inherits = require('util').inherits; |
| var Transform = require('readable-stream').Transform; |
| |
| var crc32 = require('buffer-crc32'); |
| |
| var CRC32Stream = module.exports = function CRC32Stream(options) { |
| Transform.call(this, options); |
| this.checksum = new Buffer(4); |
| this.checksum.writeInt32BE(0, 0); |
| |
| this.rawSize = 0; |
| }; |
| |
| inherits(CRC32Stream, Transform); |
| |
| CRC32Stream.prototype._transform = function(chunk, encoding, callback) { |
| if (chunk) { |
| this.checksum = crc32(chunk, this.checksum); |
| this.rawSize += chunk.length; |
| } |
| |
| callback(null, chunk); |
| }; |
| |
| CRC32Stream.prototype.digest = function() { |
| return crc32.unsigned(0, this.checksum); |
| }; |
| |
| CRC32Stream.prototype.hex = function() { |
| return this.digest().toString(16).toUpperCase(); |
| }; |
| |
| CRC32Stream.prototype.size = function() { |
| return this.rawSize; |
| }; |