diff --git a/lib/util/checksum-stream.js b/lib/util/checksum-stream.js new file mode 100644 index 0000000..6c6705b --- /dev/null +++ b/lib/util/checksum-stream.js @@ -0,0 +1,24 @@ +var crypto = require('crypto') +var through = require('mississippi').through + +module.exports = checksumStream +function checksumStream (digest, algorithm) { + var hash = crypto.createHash(algorithm || 'sha1') + var stream = through(function (chunk, enc, cb) { + hash.update(chunk, enc) + cb(null, chunk, enc) + }, function (cb) { + var streamDigest = hash.digest('hex') + if (digest && streamDigest !== digest) { + var err = new Error('checksum failed') + err.code = 'EBADCHECKSUM' + err.expected = digest + err.found = streamDigest + return cb(err) + } else { + stream.emit('digest', streamDigest) + cb() + } + }) + return stream +}