From 8fa539c61be119d7f8f8eaf9b682004a8d408f35 Mon Sep 17 00:00:00 2001 From: Kagami Hiiragi Date: Fri, 16 Jan 2015 18:35:40 +0300 Subject: [PATCH] Add SHA-1 (used for signing) --- README.md | 3 ++- lib/crypto.js | 12 ++++++++++-- lib/platform.browser.js | 16 +++++++++++----- lib/platform.js | 10 ++++++++-- test.js | 8 ++++++-- 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index a19974b..d3d8b73 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,9 @@ API documentation is available [here](https://bitchan.github.io/bitmessage/docs/ ## Feature matrix (both Browser and Node) - [x] Crypto - - [x] SHA-512 + - [x] SHA-1 - [x] SHA-256 + - [x] SHA-512 - [x] RIPEMD-160 - [x] PRNG - [x] ECC keys manipulation diff --git a/lib/crypto.js b/lib/crypto.js index 64766eb..4993f8d 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -10,12 +10,12 @@ var eccrypto = require("eccrypto"); var platform = require("./platform"); /** - * Calculate SHA-512 hash. + * Calculate SHA-1 hash. * @param {Buffer} buf - Input data * @return {Buffer} Resulting hash. * @function */ -exports.sha512 = platform.sha512; +exports.sha1 = platform.sha1; /** * Calculate SHA-256 hash. @@ -25,6 +25,14 @@ exports.sha512 = platform.sha512; */ exports.sha256 = platform.sha256; +/** + * Calculate SHA-512 hash. + * @param {Buffer} buf - Input data + * @return {Buffer} Resulting hash. + * @function + */ +exports.sha512 = platform.sha512; + /** * Calculate RIPEMD-160 hash. * @param {Buffer} buf - Input data diff --git a/lib/platform.browser.js b/lib/platform.browser.js index 86d9148..90b7bd1 100644 --- a/lib/platform.browser.js +++ b/lib/platform.browser.js @@ -16,14 +16,18 @@ var BN = require("bn.js"); var work = require("webworkify"); var assert = require("./util").assert; -exports.sha512 = function(buf) { - return new Sha512().update(buf).digest(); +exports.sha1 = function(buf) { + return new Buffer(hash.sha1().update(buf).digest()); }; exports.sha256 = function(buf) { return new Buffer(hash.sha256().update(buf).digest()); }; +exports.sha512 = function(buf) { + return new Sha512().update(buf).digest(); +}; + exports.ripemd160 = function(buf) { return new Buffer(hash.ripemd160().update(buf).digest()); }; @@ -69,7 +73,7 @@ exports.pow = function(opts) { poolSize = poolSize || FAILBACK_POOL_SIZE; var cancel; - var promise = new Promise(function(resolve, reject) { + var powp = new Promise(function(resolve, reject) { assert(typeof poolSize === "number", "Bad pool size"); assert(poolSize >= 1, "Pool size is too low"); assert(poolSize <= 1024, "Pool size is too high"); @@ -131,6 +135,8 @@ exports.pow = function(opts) { }); // Allow to stop a POW via custom function added to the Promise // instance. - promise.cancel = cancel; - return promise; + powp.cancel = cancel; + return powp; }; + +exports.promise = Promise; diff --git a/lib/platform.js b/lib/platform.js index 8a5529e..38b885d 100644 --- a/lib/platform.js +++ b/lib/platform.js @@ -15,14 +15,18 @@ var worker = require("./worker"); var createHash = crypto.createHash; -exports.sha512 = function(buf) { - return createHash("sha512").update(buf).digest(); +exports.sha1 = function(buf) { + return createHash("sha1").update(buf).digest(); }; exports.sha256 = function(buf) { return createHash("sha256").update(buf).digest(); }; +exports.sha512 = function(buf) { + return createHash("sha512").update(buf).digest(); +}; + exports.ripemd160 = function(buf) { return createHash("ripemd160").update(buf).digest(); }; @@ -69,3 +73,5 @@ exports.pow = function(opts) { ); }); }; + +exports.promise = promise; diff --git a/test.js b/test.js index 31b9d17..0764dd4 100644 --- a/test.js +++ b/test.js @@ -29,14 +29,18 @@ var Address = bitmessage.Address; var UserAgent = bitmessage.UserAgent; describe("Crypto", function() { - it("should implement SHA-512 hash", function() { - expect(bmcrypto.sha512(Buffer("test")).toString("hex")).to.equal("ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"); + it("should implement SHA-1 hash", function() { + expect(bmcrypto.sha1(Buffer("test")).toString("hex")).to.equal("a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"); }); it("should implement SHA-256 hash", function() { expect(bmcrypto.sha256(Buffer("test")).toString("hex")).to.equal("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"); }); + it("should implement SHA-512 hash", function() { + expect(bmcrypto.sha512(Buffer("test")).toString("hex")).to.equal("ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"); + }); + it("should implement RIPEMD-160 hash", function() { expect(bmcrypto.ripemd160(Buffer("test")).toString("hex")).to.equal("5e52fee47e6b070565f74372468cdc699de89107"); });