Version 1
[yaffs-website] / node_modules / hasha / index.js
diff --git a/node_modules/hasha/index.js b/node_modules/hasha/index.js
new file mode 100644 (file)
index 0000000..6500c2e
--- /dev/null
@@ -0,0 +1,70 @@
+'use strict';
+var fs = require('fs');
+var crypto = require('crypto');
+var isStream = require('is-stream');
+var Promise = require('pinkie-promise');
+
+var hasha = module.exports = function (input, opts) {
+       opts = opts || {};
+
+       var outputEncoding = opts.encoding || 'hex';
+
+       if (outputEncoding === 'buffer') {
+               outputEncoding = undefined;
+       }
+
+       var hash = crypto.createHash(opts.algorithm || 'sha512');
+
+       var update = function (buf) {
+               var inputEncoding = typeof buf === 'string' ? 'utf8' : undefined;
+               hash.update(buf, inputEncoding);
+       };
+
+       if (Array.isArray(input)) {
+               input.forEach(update);
+       } else {
+               update(input);
+       }
+
+       return hash.digest(outputEncoding);
+};
+
+hasha.stream = function (opts) {
+       opts = opts || {};
+
+       var outputEncoding = opts.encoding || 'hex';
+
+       if (outputEncoding === 'buffer') {
+               outputEncoding = undefined;
+       }
+
+       var stream = crypto.createHash(opts.algorithm || 'sha512');
+       stream.setEncoding(outputEncoding);
+       return stream;
+};
+
+hasha.fromStream = function (stream, opts) {
+       if (!isStream(stream)) {
+               return Promise.reject(new TypeError('Expected a stream'));
+       }
+
+       opts = opts || {};
+
+       return new Promise(function (resolve, reject) {
+               stream
+                       .on('error', reject)
+                       .pipe(hasha.stream(opts))
+                       .on('error', reject)
+                       .on('finish', function () {
+                               resolve(this.read());
+                       });
+       });
+};
+
+hasha.fromFile = function (fp, opts) {
+       return hasha.fromStream(fs.createReadStream(fp), opts);
+};
+
+hasha.fromFileSync = function (fp, opts) {
+       return hasha(fs.readFileSync(fp), opts);
+};