diff --git a/README.md b/README.md index 0d8ea3f..428d698 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,24 @@ We recommend the use of TypeScript for best in class intellisense. ```typescript import * as nodehash from "nodehash"; -let sha256 = new nodehash.sha256(); -let myHashedString = sha256.fromString(); +// from stream +let readStream = fs.createReadStream("./somefile.txt"); +nodehash.sha256FromStream(readStream) + .then((resultString){ + console.log(resultString); // prints hash of the file + }); + +// from file +nodehash.sha256FromFile("./somefile.txt") + .then((resultString){ + console.log(resultString); // prints hash of the file + }); + +// from string +nodehash.sha256FromString("some weird random string"); + .then((resultString){ + console.log(resultString); // prints hash of the file + }); + +let hashString = nodehash.sha256FromStringSync("some weird random string") ``` \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index e69de29..c8d868c 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -0,0 +1 @@ +export * from "./nodehash.sha256"; diff --git a/dist/index.js b/dist/index.js index 056a48d..9d12e9d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,2 +1,6 @@ "use strict"; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +__export(require("./nodehash.sha256")); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaUJBQWMsbUJBQW1CLENBQUMsRUFBQSJ9 \ No newline at end of file diff --git a/dist/nodehash.helpers.d.ts b/dist/nodehash.helpers.d.ts new file mode 100644 index 0000000..8b8bffc --- /dev/null +++ b/dist/nodehash.helpers.d.ts @@ -0,0 +1,2 @@ +/// +export declare let hashStreamPipeStop: (resolveFuntion: any) => NodeJS.ReadWriteStream; diff --git a/dist/nodehash.helpers.js b/dist/nodehash.helpers.js new file mode 100644 index 0000000..282f2f3 --- /dev/null +++ b/dist/nodehash.helpers.js @@ -0,0 +1,13 @@ +"use strict"; +const plugins = require("./nodehash.plugins"); +exports.hashStreamPipeStop = (resolveFuntion) => { + let forEach = (chunk, enc, cb) => { + resolveFuntion(chunk.toString("utf8")); + cb(null, chunk); + }; + let atEnd = (cb) => { + cb(); + }; + return plugins.through2(forEach, atEnd); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWhhc2guaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25vZGVoYXNoLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFFbkMsMEJBQWtCLEdBQUcsQ0FBQyxjQUFjO0lBQzNDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFDLEdBQUcsRUFBQyxFQUFFO1FBQzlCLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkMsRUFBRSxDQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDWCxFQUFFLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/dist/nodehash.plugins.d.ts b/dist/nodehash.plugins.d.ts index 8ccaaa0..b8f6639 100644 --- a/dist/nodehash.plugins.d.ts +++ b/dist/nodehash.plugins.d.ts @@ -1,2 +1,7 @@ import "typings-global"; export import crypto = require("crypto"); +export import fs = require("fs"); +export import path = require("path"); +export import q = require("q"); +export import stream = require("stream"); +export import through2 = require("through2"); diff --git a/dist/nodehash.plugins.js b/dist/nodehash.plugins.js index 8ece177..4a2772b 100644 --- a/dist/nodehash.plugins.js +++ b/dist/nodehash.plugins.js @@ -1,4 +1,9 @@ "use strict"; require("typings-global"); exports.crypto = require("crypto"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWhhc2gucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25vZGVoYXNoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGNBQU0sV0FBVyxRQUFRLENBQUMsQ0FBQyJ9 \ No newline at end of file +exports.fs = require("fs"); +exports.path = require("path"); +exports.q = require("q"); +exports.stream = require("stream"); +exports.through2 = require("through2"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWhhc2gucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25vZGVoYXNoLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGNBQU0sV0FBVyxRQUFRLENBQUMsQ0FBQztBQUMzQixVQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixjQUFNLFdBQVcsUUFBUSxDQUFDLENBQUM7QUFDM0IsZ0JBQVEsV0FBVyxVQUFVLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/dist/nodehash.sha256.d.ts b/dist/nodehash.sha256.d.ts new file mode 100644 index 0000000..c61ee95 --- /dev/null +++ b/dist/nodehash.sha256.d.ts @@ -0,0 +1,18 @@ +/// +import * as plugins from "./nodehash.plugins"; +/** + * creates sha256 Hash from Stream + */ +export declare let sha256FromStream: (input: any) => plugins.q.Promise<{}>; +/** + * creates sha256 Hash from File; + */ +export declare let sha256FromFile: (filePath: string) => plugins.q.Promise<{}>; +/** + * Computes sha256 Hash from String synchronously + */ +export declare let sha256FromStringSync: (stringArg: any) => any; +/** + * Computes sha256 Hash from String + */ +export declare let sha256FromString: (stringArg: any) => plugins.q.Promise<{}>; diff --git a/dist/nodehash.sha256.js b/dist/nodehash.sha256.js new file mode 100644 index 0000000..e6bb520 --- /dev/null +++ b/dist/nodehash.sha256.js @@ -0,0 +1,48 @@ +"use strict"; +const plugins = require("./nodehash.plugins"); +const helpers = require("./nodehash.helpers"); +/** + * creates sha256 Hash from Stream + */ +exports.sha256FromStream = (input) => { + let done = plugins.q.defer(); + let hash = plugins.crypto.createHash('sha256'); + hash["setEncoding"]("hex"); + input + .pipe(hash) + .pipe(helpers.hashStreamPipeStop(done.resolve)); + return done.promise; +}; +/** + * creates sha256 Hash from File; + */ +exports.sha256FromFile = (filePath) => { + let done = plugins.q.defer(); + let absolutePath = plugins.path.resolve(filePath); + let readableStream = plugins.fs.createReadStream(absolutePath); + exports.sha256FromStream(readableStream) + .then((resultHashString) => { + done.resolve(resultHashString); + }); + return done.promise; +}; +/** + * Computes sha256 Hash from String synchronously + */ +exports.sha256FromStringSync = (stringArg) => { + let hash = plugins.crypto.createHash('sha256'); + hash.update(stringArg); + return hash.digest("hex"); +}; +/** + * Computes sha256 Hash from String + */ +exports.sha256FromString = (stringArg) => { + let done = plugins.q.defer(); + let hash = plugins.crypto.createHash('sha256'); + hash.update(stringArg); + let hashResult = hash.digest("hex"); + done.resolve(hashResult); + return done.promise; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWhhc2guc2hhMjU2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbm9kZWhhc2guc2hhMjU2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxvQkFBb0IsQ0FBQyxDQUFBO0FBQzlDLE1BQVksT0FBTyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFFOUM7O0dBRUc7QUFDUSx3QkFBZ0IsR0FBRyxDQUFDLEtBQUs7SUFDaEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUvQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsS0FBSztTQUNBLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDVixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ1Esc0JBQWMsR0FBRyxDQUFDLFFBQWU7SUFDeEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9ELHdCQUFnQixDQUFDLGNBQWMsQ0FBQztTQUMzQixJQUFJLENBQUMsQ0FBQyxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDUSw0QkFBb0IsR0FBRyxDQUFDLFNBQVM7SUFDeEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNRLHdCQUFnQixHQUFHLENBQUMsU0FBUztJQUNwQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/package.json b/package.json index fd1f2f2..83f4673 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "keywords": [ "hash", "node", - "sha" + "sha265" ], "author": "Lossless GmbH", "license": "MIT", @@ -28,6 +28,10 @@ "typings-test": "^1.0.1" }, "dependencies": { + "@types/q": "0.x.x", + "@types/through2": "0.x.x", + "q": "^1.4.1", + "through2": "^2.0.1", "typings-global": "^1.0.6" } } diff --git a/test/test.d.ts b/test/test.d.ts index e69de29..e7cc8ee 100644 --- a/test/test.d.ts +++ b/test/test.d.ts @@ -0,0 +1 @@ +import "typings-test"; diff --git a/test/test.js b/test/test.js index 2d72cbf..48f3b33 100644 --- a/test/test.js +++ b/test/test.js @@ -1 +1,46 @@ -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file +"use strict"; +require("typings-test"); +const should = require("should"); +const fs = require("fs"); +const nodehash = require("../dist/index"); +describe("nodehash", function () { + describe("sha256FromStringSync", function () { + it("should convert a String to sha256 hash synchronously", function () { + let testHash = nodehash.sha256FromStringSync("test"); + let testHash2 = nodehash.sha256FromStringSync("testString"); + let testHash3 = nodehash.sha256FromStringSync("test"); + should.equal(testHash, testHash3); + should.notEqual(testHash, "test"); + }); + }); + describe("sha256fromStringSync", function () { + it("should convert a String to sha256 hash synchronously", function (done) { + nodehash.sha256FromString("test") + .then(resultString => { + let compareString = nodehash.sha256FromStringSync("test"); + should.equal(resultString, compareString); + done(); + }); + }); + }); + describe("sha256fromStream", function () { + it("should convert a Stream to sha256 and resolve a promise with result", function (done) { + let readStream = fs.createReadStream("./test/testImageForHash.jpg"); + nodehash.sha256FromStream(readStream) + .then((resultString) => { + should.equal(resultString, "45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c"); + done(); + }); + }); + }); + describe("sha256fromFile", function () { + it("should convert a Stream to sha256 and resolve a promise with result", function (done) { + nodehash.sha256FromFile("./test/testImageForHash.jpg") + .then((resultString) => { + should.equal(resultString, "45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c"); + done(); + }); + }); + }); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxNQUFNLFdBQVcsUUFBUSxDQUFDLENBQUM7QUFDbEMsTUFBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFFMUIsTUFBWSxRQUFRLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFFMUMsUUFBUSxDQUFDLFVBQVUsRUFBQztJQUNoQixRQUFRLENBQUMsc0JBQXNCLEVBQUM7UUFDNUIsRUFBRSxDQUFDLHNEQUFzRCxFQUFDO1lBQ3RELElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUQsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsc0JBQXNCLEVBQUM7UUFDNUIsRUFBRSxDQUFDLHNEQUFzRCxFQUFDLFVBQVMsSUFBSTtZQUNuRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2lCQUM1QixJQUFJLENBQUMsWUFBWTtnQkFDZCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxrQkFBa0IsRUFBQztRQUN4QixFQUFFLENBQUMscUVBQXFFLEVBQUMsVUFBUyxJQUFJO1lBQ2xGLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3BFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxDQUFDLFlBQW1CO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBQyxrRUFBa0UsQ0FBQyxDQUFBO2dCQUM3RixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBQztRQUN0QixFQUFFLENBQUMscUVBQXFFLEVBQUMsVUFBUyxJQUFJO1lBQ2xGLFFBQVEsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLENBQUM7aUJBQ2pELElBQUksQ0FBQyxDQUFDLFlBQW1CO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBQyxrRUFBa0UsQ0FBQyxDQUFBO2dCQUM3RixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index e69de29..3c911d8 100644 --- a/test/test.ts +++ b/test/test.ts @@ -0,0 +1,46 @@ +import "typings-test"; +import should = require("should"); +import fs = require("fs"); + +import * as nodehash from "../dist/index"; + +describe("nodehash",function(){ + describe("sha256FromStringSync",function(){ + it("should convert a String to sha256 hash synchronously",function(){ + let testHash = nodehash.sha256FromStringSync("test"); + let testHash2 = nodehash.sha256FromStringSync("testString"); + let testHash3 = nodehash.sha256FromStringSync("test"); + should.equal(testHash,testHash3); + should.notEqual(testHash,"test"); + }) + }); + describe("sha256fromStringSync",function(){ + it("should convert a String to sha256 hash synchronously",function(done){ + nodehash.sha256FromString("test") + .then(resultString => { + let compareString = nodehash.sha256FromStringSync("test"); + should.equal(resultString,compareString); + done(); + }) + }) + }); + describe("sha256fromStream",function(){ + it("should convert a Stream to sha256 and resolve a promise with result",function(done){ + let readStream = fs.createReadStream("./test/testImageForHash.jpg"); + nodehash.sha256FromStream(readStream) + .then((resultString:string) => { + should.equal(resultString,"45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c") + done(); + }); + }) + }); + describe("sha256fromFile",function(){ + it("should convert a Stream to sha256 and resolve a promise with result",function(done){ + nodehash.sha256FromFile("./test/testImageForHash.jpg") + .then((resultString:string) => { + should.equal(resultString,"45b80413ed93acb495691186ce61850449439f9183352b9bff96d5533fa1046c") + done(); + }); + }) + }); +}); \ No newline at end of file diff --git a/test/testImageForHash.jpg b/test/testImageForHash.jpg new file mode 100644 index 0000000..cb8ac80 Binary files /dev/null and b/test/testImageForHash.jpg differ diff --git a/ts/index.ts b/ts/index.ts index 1fc9213..1e46d31 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1 +1,3 @@ import * as plugins from "./nodehash.plugins"; + +export * from "./nodehash.sha256"; \ No newline at end of file diff --git a/ts/nodehash.helpers.ts b/ts/nodehash.helpers.ts new file mode 100644 index 0000000..4cc371a --- /dev/null +++ b/ts/nodehash.helpers.ts @@ -0,0 +1,15 @@ +import * as plugins from "./nodehash.plugins"; + +export let hashStreamPipeStop = (resolveFuntion) => { + let forEach = (chunk:Buffer,enc,cb) => { + resolveFuntion(chunk.toString("utf8")); + cb(null,chunk); + }; + + let atEnd = (cb) => { + cb(); + }; + + return plugins.through2(forEach,atEnd); +}; + diff --git a/ts/nodehash.plugins.ts b/ts/nodehash.plugins.ts index 9eb4670..b8f6639 100644 --- a/ts/nodehash.plugins.ts +++ b/ts/nodehash.plugins.ts @@ -1,2 +1,7 @@ import "typings-global"; -export import crypto = require("crypto"); \ No newline at end of file +export import crypto = require("crypto"); +export import fs = require("fs"); +export import path = require("path"); +export import q = require("q"); +export import stream = require("stream"); +export import through2 = require("through2"); diff --git a/ts/nodehash.sha256.ts b/ts/nodehash.sha256.ts new file mode 100644 index 0000000..466c558 --- /dev/null +++ b/ts/nodehash.sha256.ts @@ -0,0 +1,51 @@ +import * as plugins from "./nodehash.plugins"; +import * as helpers from "./nodehash.helpers"; + +/** + * creates sha256 Hash from Stream + */ +export let sha256FromStream = (input) => { + let done = plugins.q.defer(); + let hash = plugins.crypto.createHash('sha256'); + + hash["setEncoding"]("hex"); + input + .pipe(hash) + .pipe(helpers.hashStreamPipeStop(done.resolve)); + return done.promise; +}; + +/** + * creates sha256 Hash from File; + */ +export let sha256FromFile = (filePath:string) => { + let done = plugins.q.defer(); + let absolutePath = plugins.path.resolve(filePath); + let readableStream = plugins.fs.createReadStream(absolutePath); + sha256FromStream(readableStream) + .then((resultHashString) => { + done.resolve(resultHashString); + }); + return done.promise; +} + +/** + * Computes sha256 Hash from String synchronously + */ +export let sha256FromStringSync = (stringArg) => { + let hash = plugins.crypto.createHash('sha256'); + hash.update(stringArg); + return hash.digest("hex"); +}; + +/** + * Computes sha256 Hash from String + */ +export let sha256FromString = (stringArg) => { + let done = plugins.q.defer(); + let hash = plugins.crypto.createHash('sha256'); + hash.update(stringArg); + let hashResult = hash.digest("hex"); + done.resolve(hashResult); + return done.promise; +};