diff --git a/package.json b/package.json index cb62bfbc..4477f3a0 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "node-fetch": "^2.1.2", "node-localstorage": "~1.3.0", "pako": "^1.0.6", - "rusha": "^0.8.12", "web-streams-polyfill": "^1.3.2" }, "repository": { diff --git a/src/crypto/hash/index.js b/src/crypto/hash/index.js index b8ef17e1..c897d930 100644 --- a/src/crypto/hash/index.js +++ b/src/crypto/hash/index.js @@ -1,9 +1,7 @@ /** * @fileoverview Provides an interface to hashing functions available in Node.js or external libraries. - * @see {@link https://github.com/srijs/rusha|Rusha} * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto} * @see {@link https://github.com/indutny/hash.js|hash.js} - * @requires rusha * @requires asmcrypto.js * @requires hash.js * @requires crypto/hash/md5 @@ -12,19 +10,16 @@ * @module crypto/hash */ -import Rusha from 'rusha'; +import { SHA1 } from 'asmcrypto.js/src/hash/sha1/exports'; import { SHA256 } from 'asmcrypto.js/src/hash/sha256/exports'; -import sha1 from 'hash.js/lib/hash/sha/1'; +import { SHA512 } from 'asmcrypto.js/src/hash/sha512/exports'; import sha224 from 'hash.js/lib/hash/sha/224'; -import sha256 from 'hash.js/lib/hash/sha/256'; import sha384 from 'hash.js/lib/hash/sha/384'; -import sha512 from 'hash.js/lib/hash/sha/512'; import { ripemd160 } from 'hash.js/lib/hash/ripemd'; import md5 from './md5'; import stream from '../../stream'; import util from '../../util'; -const rusha = new Rusha(); const nodeCrypto = util.getNodeCrypto(); const Buffer = util.getNodeBuffer(); @@ -42,7 +37,16 @@ function hashjs_hash(hash) { const hashInstance = hash(); return stream.transform(data, value => { hashInstance.update(value); - }, () => util.hex_to_Uint8Array(hashInstance.digest('hex'))); + }, () => new Uint8Array(hashInstance.digest())); + }; +} + +function asmcrypto_hash(hash) { + return function(data) { + const hashInstance = new hash(); + return stream.transform(data, value => { + hashInstance.process(value); + }, () => hashInstance.finish().result); }; } @@ -60,15 +64,11 @@ if (nodeCrypto) { // Use Node native crypto for all hash functions } else { // Use JS fallbacks hash_fns = { md5: md5, - sha1: hashjs_hash(sha1), - /*sha1: function(data) { - return util.hex_to_Uint8Array(rusha.digest(data)); - },*/ + sha1: asmcrypto_hash(SHA1), sha224: hashjs_hash(sha224), - sha256: hashjs_hash(sha256), + sha256: asmcrypto_hash(SHA256), sha384: hashjs_hash(sha384), - // TODO, benchmark this vs asmCrypto's SHA512 - sha512: hashjs_hash(sha512), + sha512: asmcrypto_hash(SHA512), ripemd: hashjs_hash(ripemd160) }; } @@ -77,7 +77,7 @@ export default { /** @see module:md5 */ md5: hash_fns.md5, - /** @see rusha */ + /** @see asmCrypto */ sha1: hash_fns.sha1, /** @see hash.js */ sha224: hash_fns.sha224, @@ -85,7 +85,7 @@ export default { sha256: hash_fns.sha256, /** @see hash.js */ sha384: hash_fns.sha384, - /** @see hash.js */ + /** @see asmCrypto */ sha512: hash_fns.sha512, /** @see hash.js */ ripemd: hash_fns.ripemd,