From eb13e47c8f4bd70c60fd8d54d9040195d6ef8ffe Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Tue, 11 Mar 2014 23:10:21 -0300 Subject: [PATCH 1/7] add demo broken test for WalletKey --- test/test.WalletKey.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/test.WalletKey.js b/test/test.WalletKey.js index eb29ce02c..93d3bf242 100644 --- a/test/test.WalletKey.js +++ b/test/test.WalletKey.js @@ -50,6 +50,21 @@ describe('WalletKey', function() { s.privKey.private.toString().should.equal(s2.privKey.private.toString()); s.privKey.public.toString().should.equal(s2.privKey.public.toString()); }); + it('test for pubs/addr from known priv key', function() { + var priv = 'cU5NxfpfecLCUWnJyoUF6dCZqCfLSAZnTBPraCPis2if8iHHbNk1'; + var s = new WalletKey({ + network: networks.testnet + }); + s.fromObj({ priv: priv}); + var o = s.storeObj(); + o.priv.should.equal(priv); + o.pub.should.equal('03fd4788dd045c791043d739dd10d5e8b15aa6c9702f26116dde88ebbce6eb7706'); + o.addr.should.equal('mqBsTsnVF2zifoGtm7UsXRfdJUr52Jg5d4'); + }); + + + + }); From e2c775e17f0ba1521b89b873aec7487015875d51 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Tue, 11 Mar 2014 23:43:57 -0300 Subject: [PATCH 2/7] more broken cases in browser --- test/test.WalletKey.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/test/test.WalletKey.js b/test/test.WalletKey.js index 93d3bf242..966fd8458 100644 --- a/test/test.WalletKey.js +++ b/test/test.WalletKey.js @@ -50,12 +50,14 @@ describe('WalletKey', function() { s.privKey.private.toString().should.equal(s2.privKey.private.toString()); s.privKey.public.toString().should.equal(s2.privKey.public.toString()); }); - it('test for pubs/addr from known priv key', function() { + + it('should import priv key testnet / compressed', function() { var priv = 'cU5NxfpfecLCUWnJyoUF6dCZqCfLSAZnTBPraCPis2if8iHHbNk1'; var s = new WalletKey({ network: networks.testnet }); s.fromObj({ priv: priv}); + s.privKey.compressed.should.equal(true); var o = s.storeObj(); o.priv.should.equal(priv); o.pub.should.equal('03fd4788dd045c791043d739dd10d5e8b15aa6c9702f26116dde88ebbce6eb7706'); @@ -63,6 +65,38 @@ describe('WalletKey', function() { }); + it('should import priv key livenet / uncompressed', function() { + + //this is a WIF priv, compress flag = false + var priv = '5KMpLZExnGzeU3oC9qZnKBt7yejLUS8boPiWag33TMX2XEK2Ayc'; + var s = new WalletKey({ + network: networks.livenet, + }); + s.fromObj({ priv: priv}); + s.privKey.compressed.should.equal(false); + var o = s.storeObj(); + o.pub.should.equal('04470bbc100896e4df317526efa22f15aac3681ef02d230d00d15b4cba8eea1e88477523d644f20edb6b344f06bba77a9dff81be69d74282866b0b7f3e9d0d910b'); + o.addr.should.equal('1v5GwPNomikEqmMe7h6q1jRw62WKTD6Xo'); + o.priv.should.equal(priv); + }); + + + it('should import priv key livenet / compressed', function() { + + //this is a WIF priv, compress flag = true + var priv = 'L4cEVwoNDeYdCQfFJAGkGKPnE2TmqLEuBn4znQChD2ojjQRJVKpU'; + var s = new WalletKey({ + network: networks.livenet, + }); + s.fromObj({ priv: priv}); + s.privKey.compressed.should.equal(true); + var o = s.storeObj(); + o.priv.should.equal(priv); + o.pub.should.equal('03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071'); + o.addr.should.equal('1JEgFNDmEUdd6FvNhDBqSuw2uZ4yisSr7A'); + o.priv.should.equal(priv); + }); + }); From 5be37f2c7b65bd10703ee1f6b46ee2cf04f39a21 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 12 Mar 2014 00:11:12 -0300 Subject: [PATCH 3/7] remove PeerManager exception, no necesary anymore --- Key.js | 2 ++ WalletKey.js | 2 ++ bitcore.js | 5 +---- examples/example.html | 30 ++++++++++++++++-------------- test/test.WalletKey.js | 3 +-- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/Key.js b/Key.js index 550c40f9d..0f306165a 100644 --- a/Key.js +++ b/Key.js @@ -50,6 +50,8 @@ if (process.versions) { }; kSpec.prototype.regenerateSync = function() { + +console.log('[Key.js.53]', this); //TODO if (!this.private) { throw new Error('Key does not have a private key set'); } diff --git a/WalletKey.js b/WalletKey.js index c2311a5a6..716dc8ecc 100644 --- a/WalletKey.js +++ b/WalletKey.js @@ -21,7 +21,9 @@ WalletKey.prototype.generate = function() { WalletKey.prototype.storeObj = function() { var pubKey = this.privKey.public.toString('hex'); +console.log('[WalletKey.js.23:pubKey:]',pubKey); //TODO var pubKeyHash = coinUtil.sha256ripe160(this.privKey.public); +console.log('[WalletKey.js.25:pubKeyHash:]',pubKeyHash); //TODO var addr = new Address(this.network.addressPubkey, pubKeyHash); var priv = new PrivateKey(this.network.keySecret, this.privKey.private, this.privKey.compressed); var obj = { diff --git a/bitcore.js b/bitcore.js index c66b5c5df..0b12d8385 100644 --- a/bitcore.js +++ b/bitcore.js @@ -37,14 +37,11 @@ requireWhenAccessed('PrivateKey', './PrivateKey'); requireWhenAccessed('RpcClient', './RpcClient'); requireWhenAccessed('Wallet', './Wallet'); requireWhenAccessed('WalletKey', './WalletKey'); +requireWhenAccessed('PeerManager', './PeerManager'); module.exports.Buffer = Buffer; if (typeof process.versions === 'undefined') { // Browser specific module.exports.bignum.config({EXPONENTIAL_AT: 9999999, DECIMAL_PLACES: 0, ROUNDING_MODE: 1}); } -else { - // Nodejs specific - requireWhenAccessed('PeerManager', './PeerManager'); -} diff --git a/examples/example.html b/examples/example.html index 951ef1e72..b9d3eaf70 100644 --- a/examples/example.html +++ b/examples/example.html @@ -40,32 +40,34 @@ }); print('
'); - var Key = require('KeyModule').Key; - var buffertools = require('buffertools'); - var k = Key.generateSync(); - - print ('Generate Key Pair:'); - print ('Private:' + buffertools.toHex(k.private)); - print ('Public:' + buffertools.toHex(k.public)); - - print('
'); /* Using bitcore root module */ - var bitcore = require('bitcore'); var k = bitcore.KeyModule.Key.generateSync(); print ('Generate Key Pair:'); - print ('Private:' + buffertools.toHex(k.private)); - print ('Public:' + buffertools.toHex(k.public)); + print ('Private:' + bitcore.buffertools.toHex(k.private)); + print ('Public:' + bitcore.buffertools.toHex(k.public)); print('
'); -console.log('[example.html.65:PeerManager:]'); //TODO + var p = new bitcore.PeerManager(); - var pm = require('PeerManager'); + print('
'); + var WalletKey = bitcore.WalletKey; + var networks = bitcore.networks; + + var priv = 'cU5NxfpfecLCUWnJyoUF6dCZqCfLSAZnTBPraCPis2if8iHHbNk1'; + var s = new WalletKey({ + network: networks.testnet + }); + s.fromObj({ priv: priv}); + var o = s.storeObj(); + print("Private: " + o.priv); + print("Public: " + o.pub); + print("Addr: " + o.addr); diff --git a/test/test.WalletKey.js b/test/test.WalletKey.js index 966fd8458..6bd8ababf 100644 --- a/test/test.WalletKey.js +++ b/test/test.WalletKey.js @@ -75,9 +75,9 @@ describe('WalletKey', function() { s.fromObj({ priv: priv}); s.privKey.compressed.should.equal(false); var o = s.storeObj(); + o.priv.should.equal(priv); o.pub.should.equal('04470bbc100896e4df317526efa22f15aac3681ef02d230d00d15b4cba8eea1e88477523d644f20edb6b344f06bba77a9dff81be69d74282866b0b7f3e9d0d910b'); o.addr.should.equal('1v5GwPNomikEqmMe7h6q1jRw62WKTD6Xo'); - o.priv.should.equal(priv); }); @@ -94,7 +94,6 @@ describe('WalletKey', function() { o.priv.should.equal(priv); o.pub.should.equal('03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071'); o.addr.should.equal('1JEgFNDmEUdd6FvNhDBqSuw2uZ4yisSr7A'); - o.priv.should.equal(priv); }); From 711ba6d9a8903b8289ac3cf4e147b0205e8b9850 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 12 Mar 2014 00:15:54 -0300 Subject: [PATCH 4/7] remove PeerManager exception, no necesary anymore --- WalletKey.js | 2 +- examples/example.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WalletKey.js b/WalletKey.js index 716dc8ecc..f651159ee 100644 --- a/WalletKey.js +++ b/WalletKey.js @@ -23,7 +23,7 @@ WalletKey.prototype.storeObj = function() { var pubKey = this.privKey.public.toString('hex'); console.log('[WalletKey.js.23:pubKey:]',pubKey); //TODO var pubKeyHash = coinUtil.sha256ripe160(this.privKey.public); -console.log('[WalletKey.js.25:pubKeyHash:]',pubKeyHash); //TODO +console.log('[WalletKey.js.25:pubKeyHash:]', buffertools.toHex(pubKeyHash)); //TODO var addr = new Address(this.network.addressPubkey, pubKeyHash); var priv = new PrivateKey(this.network.keySecret, this.privKey.private, this.privKey.compressed); var obj = { diff --git a/examples/example.html b/examples/example.html index b9d3eaf70..438472f5f 100644 --- a/examples/example.html +++ b/examples/example.html @@ -59,9 +59,9 @@ var WalletKey = bitcore.WalletKey; var networks = bitcore.networks; - var priv = 'cU5NxfpfecLCUWnJyoUF6dCZqCfLSAZnTBPraCPis2if8iHHbNk1'; + var priv = 'L4cEVwoNDeYdCQfFJAGkGKPnE2TmqLEuBn4znQChD2ojjQRJVKpU'; var s = new WalletKey({ - network: networks.testnet + network: networks.livenet }); s.fromObj({ priv: priv}); var o = s.storeObj(); From 6af1b1dab6f9ca9ed7e75eddd007f01b7c53daf9 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 12 Mar 2014 00:40:59 -0300 Subject: [PATCH 5/7] add broken test for sha256ripe160 --- Key.js | 2 -- WalletKey.js | 2 -- examples/example.html | 12 ++++++++++++ test/test.util.js | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Key.js b/Key.js index 0f306165a..550c40f9d 100644 --- a/Key.js +++ b/Key.js @@ -50,8 +50,6 @@ if (process.versions) { }; kSpec.prototype.regenerateSync = function() { - -console.log('[Key.js.53]', this); //TODO if (!this.private) { throw new Error('Key does not have a private key set'); } diff --git a/WalletKey.js b/WalletKey.js index f651159ee..c2311a5a6 100644 --- a/WalletKey.js +++ b/WalletKey.js @@ -21,9 +21,7 @@ WalletKey.prototype.generate = function() { WalletKey.prototype.storeObj = function() { var pubKey = this.privKey.public.toString('hex'); -console.log('[WalletKey.js.23:pubKey:]',pubKey); //TODO var pubKeyHash = coinUtil.sha256ripe160(this.privKey.public); -console.log('[WalletKey.js.25:pubKeyHash:]', buffertools.toHex(pubKeyHash)); //TODO var addr = new Address(this.network.addressPubkey, pubKeyHash); var priv = new PrivateKey(this.network.keySecret, this.privKey.private, this.privKey.compressed); var obj = { diff --git a/examples/example.html b/examples/example.html index 438472f5f..01f317442 100644 --- a/examples/example.html +++ b/examples/example.html @@ -55,7 +55,19 @@ var p = new bitcore.PeerManager(); print('
'); + var coinUtil = bitcore.util; + + var pk = '03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071' + var pubKeyHash = coinUtil.sha256(pk); + print(bitcore.buffertools.toHex(pubKeyHash)); + pubKeyHash = coinUtil.sha256ripe160(pk); + print(bitcore.buffertools.toHex(pubKeyHash)); + + pubKeyHash = coinUtil.ripe160(new bitcore.Buffer('hola')); + print(bitcore.buffertools.toHex(pubKeyHash)); + + print('
'); var WalletKey = bitcore.WalletKey; var networks = bitcore.networks; diff --git a/test/test.util.js b/test/test.util.js index e3de356a8..e2245508d 100644 --- a/test/test.util.js +++ b/test/test.util.js @@ -36,6 +36,23 @@ describe('util', function() { }); }); }); + describe('#sha256', function() { + var pk = '03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071' + it('should work for ' + pk, function() { + var pubKeyHash = coinUtil.sha256(pk); + var pkh = buffertools.toHex(pubKeyHash); + pkh.should.equal('a5c756101065ac5b8f689139e6d856fa99e54b5000b6428b43729d334cc9277d'); + }); + }); + + describe('#sha256ripe160', function() { + var pk = '03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071' + it('should work for ' + pk, function() { + var pubKeyHash = coinUtil.sha256ripe160(pk); + var pkh = buffertools.toHex(pubKeyHash); + pkh.should.equal('d166a41f27fd4b158f70314e5eee8998bf3d97d5'); + }); + }); describe('#ripemd160', function() { var ripemdData = [ ['somemessage123', '12fd01a7ec6b9ba23b3a5c16fbfab3ac19624a88'], From ab183c0e66a6d5105946ed256e2a92ecbea00e44 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 12 Mar 2014 11:40:10 -0300 Subject: [PATCH 6/7] fixes ripe160 add some tests --- browser/bitcoinjs-lib.js | 15 ++++++++++++++- examples/example.html | 20 +++++++++++++++----- test/test.util.js | 12 +++++++++++- util/util.js | 9 +++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/browser/bitcoinjs-lib.js b/browser/bitcoinjs-lib.js index 2da8ab0e8..4b98cfd05 100644 --- a/browser/bitcoinjs-lib.js +++ b/browser/bitcoinjs-lib.js @@ -188,7 +188,20 @@ f+(((m|~n)^p)+c[2]):64>b?f+((m&p|n&~p)+c[3]):f+((m^(n|~p))+c[4]),f|=0,f=f<>>5]|=128<<24-a%32;e[(a+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;g.sigBytes=4*(e.length+1);this._process();g=this._hash;e=g.words;for(b=0;5>b;b++)a=e[b],e[b]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;return g},clone:function(){var e=l.clone.call(this);e._hash=this._hash.clone();return e}});j.RIPEMD160=l._createHelper(k);j.HmacRIPEMD160=l._createHmacHelper(k)})(Math); -module.exports.RIPEMD160 = CryptoJS.RIPEMD160; +module.exports.ripemd160 = function(bytes) { + if (!Buffer.isBuffer(bytes)) { + throw new Error('arg should be a buffer'); + } + var w = new CryptoJS.lib.WordArray.init(Crypto.util.bytesToWords(bytes), bytes.length); + var wordArray = CryptoJS.RIPEMD160(w); + var words = wordArray.words; + var answer = []; + for (var b = 0; b < words.length * 32; b += 8) { + answer.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); + } + return answer; +}; + Bitcoin = {}; diff --git a/examples/example.html b/examples/example.html index 01f317442..e2b132041 100644 --- a/examples/example.html +++ b/examples/example.html @@ -19,6 +19,7 @@ div.innerHTML += s + '
'; }; + print('

Address

' ); var addrStrings = [ "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", "1A1zP1eP5QGefi2DMPTfTL5SLmv7Dixxxx", @@ -38,8 +39,7 @@ } }); - print('
'); - + print('

KeyModule

' ); /* Using bitcore root module */ @@ -50,11 +50,11 @@ print ('Private:' + bitcore.buffertools.toHex(k.private)); print ('Public:' + bitcore.buffertools.toHex(k.public)); - print('
'); + print('

PeerManager

' ); var p = new bitcore.PeerManager(); - print('
'); + print('

Util

' ); var coinUtil = bitcore.util; var pk = '03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071' @@ -64,10 +64,20 @@ pubKeyHash = coinUtil.sha256ripe160(pk); print(bitcore.buffertools.toHex(pubKeyHash)); + + var Buffer = bitcore.Buffer; + pubKeyHash = coinUtil.ripe160(new bitcore.Buffer('hola')); print(bitcore.buffertools.toHex(pubKeyHash)); - print('
'); + var bu = new Buffer('a5c756101065ac5b8f689139e6d856fa99e54b5000b6428b43729d334cc9277d', 'hex'); + print(bitcore.buffertools.toHex(bu)); + + var pubKeyHash2 = coinUtil.ripe160(bu); + print(bitcore.buffertools.toHex(pubKeyHash2)); + + + print('

WalletKey

'); var WalletKey = bitcore.WalletKey; var networks = bitcore.networks; diff --git a/test/test.util.js b/test/test.util.js index e2245508d..99ff94911 100644 --- a/test/test.util.js +++ b/test/test.util.js @@ -36,6 +36,16 @@ describe('util', function() { }); }); }); + describe('#ripe160', function() { + var pk = 'a5c756101065ac5b8f689139e6d856fa99e54b5000b6428b43729d334cc9277d'; + it('should work for ' + pk, function() { + var pubKeyHash = coinUtil.ripe160(new Buffer(pk,'hex')); + var pkh = buffertools.toHex(pubKeyHash); + pkh.should.equal('d166a41f27fd4b158f70314e5eee8998bf3d97d5'); + }); + }); + + describe('#sha256', function() { var pk = '03d95e184cce34c3cfa58e9a277a09a7c5ed1b2a8134ea1e52887bc66fa3f47071' it('should work for ' + pk, function() { @@ -61,7 +71,7 @@ describe('util', function() { ]; ripemdData.forEach(function(datum) { it('should work for ' + datum[0], function() { - var r = coinUtil.ripe160(datum[0]); + var r = coinUtil.ripe160( new bitcore.Buffer(datum[0])); buffertools.toHex(r).should.equal(datum[1]); }); it('should work for Buffer ' + datum[0], function() { diff --git a/util/util.js b/util/util.js index 8a012928f..7f3dab421 100644 --- a/util/util.js +++ b/util/util.js @@ -16,11 +16,12 @@ var sha256 = exports.sha256 = function (data) { }; var ripe160 = exports.ripe160 = function (data) { + if (!Buffer.isBuffer(data)) { + throw new Error('arg should be a buffer'); + } + if (!process.versions) { - var RIPEMD160 = bjs.RIPEMD160; - var WordArray = bjs.WordArray; - data = data.toString(); - var result = RIPEMD160(data) + ''; + var result = bjs.ripemd160(data); return new Buffer(result, 'hex'); } return new Buffer(crypto.createHash('rmd160').update(data).digest('binary'), 'binary'); From 0f8ee57521d5b7029b3c5b1b94dd9047dd8ecef9 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 12 Mar 2014 15:34:19 -0300 Subject: [PATCH 7/7] refactor ripe160 binding --- browser/concat.sh | 2 +- browser/vendor/{crypto.js => crypto-2.0.js} | 0 browser/vendor/{ripemd160.js => crypto-3.1.js} | 16 +--------------- util/util.js | 12 +++++++++--- 4 files changed, 11 insertions(+), 19 deletions(-) rename browser/vendor/{crypto.js => crypto-2.0.js} (100%) rename browser/vendor/{ripemd160.js => crypto-3.1.js} (93%) diff --git a/browser/concat.sh b/browser/concat.sh index b8676e980..f747c6684 100755 --- a/browser/concat.sh +++ b/browser/concat.sh @@ -1,7 +1,7 @@ #! /bin/bash cd vendor/ -cat browser-adapter.js crypto.js ripemd160.js jsbn.js jsbn2.js prng4.js util.js rng.js ec.js sec.js ecdsa.js eckey.js > vendor-bundle.js +cat browser-adapter.js crypto-2.0.js crypto-3.1.js jsbn.js jsbn2.js prng4.js util.js rng.js ec.js sec.js ecdsa.js eckey.js > vendor-bundle.js mv vendor-bundle.js ../ cd ../ diff --git a/browser/vendor/crypto.js b/browser/vendor/crypto-2.0.js similarity index 100% rename from browser/vendor/crypto.js rename to browser/vendor/crypto-2.0.js diff --git a/browser/vendor/ripemd160.js b/browser/vendor/crypto-3.1.js similarity index 93% rename from browser/vendor/ripemd160.js rename to browser/vendor/crypto-3.1.js index 309d39bf4..044f8c2e4 100644 --- a/browser/vendor/ripemd160.js +++ b/browser/vendor/crypto-3.1.js @@ -28,18 +28,4 @@ g)).finalize(c)}}});var b=e.algo={};return e}(Math); f+(((m|~n)^p)+c[2]):64>b?f+((m&p|n&~p)+c[3]):f+((m^(n|~p))+c[4]),f|=0,f=f<>>32-k[b],f=f+x|0,B=x,x=p,p=n<<10|n>>>22,n=m,m=f,f=C+g[e+j[b]]|0,f=16>b?f+((q^(r|~s))+h[0]):32>b?f+((q&s|r&~s)+h[1]):48>b?f+(((q|~r)^s)+h[2]):64>b?f+((q&r|~q&s)+h[3]):f+((q^r^s)+h[4]),f|=0,f=f<>>32-l[b],f=f+y|0,C=y,y=s,s=r<<10|r>>>22,r=q,q=f;f=a[1]+n+s|0;a[1]=a[2]+p+y|0;a[2]=a[3]+x+C|0;a[3]=a[4]+B+q|0;a[4]=a[0]+m+r|0;a[0]=f},_doFinalize:function(){var g=this._data,e=g.words,b=8*this._nDataBytes,a=8*g.sigBytes; e[a>>>5]|=128<<24-a%32;e[(a+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;g.sigBytes=4*(e.length+1);this._process();g=this._hash;e=g.words;for(b=0;5>b;b++)a=e[b],e[b]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;return g},clone:function(){var e=l.clone.call(this);e._hash=this._hash.clone();return e}});j.RIPEMD160=l._createHelper(k);j.HmacRIPEMD160=l._createHmacHelper(k)})(Math); - -module.exports.ripemd160 = function(bytes) { - if (!Buffer.isBuffer(bytes)) { - throw new Error('arg should be a buffer'); - } - var w = new CryptoJS.lib.WordArray.init(Crypto.util.bytesToWords(bytes), bytes.length); - var wordArray = CryptoJS.RIPEMD160(w); - var words = wordArray.words; - var answer = []; - for (var b = 0; b < words.length * 32; b += 8) { - answer.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); - } - return answer; -}; - +module.exports.crypto31 = CryptoJS; diff --git a/util/util.js b/util/util.js index 75033675a..d90cb2583 100644 --- a/util/util.js +++ b/util/util.js @@ -14,15 +14,21 @@ if (!process.versions) { var sha256 = exports.sha256 = function (data) { return new Buffer(crypto.createHash('sha256').update(data).digest('binary'), 'binary'); }; - var ripe160 = exports.ripe160 = function (data) { if (!Buffer.isBuffer(data)) { throw new Error('arg should be a buffer'); } if (!process.versions) { - var result = browser.ripemd160(data); - return new Buffer(result, 'hex'); + + var w = new browser.crypto31.lib.WordArray.init(Crypto.util.bytesToWords(data), data.length); + var wordArray = browser.crypto31.RIPEMD160(w); + var words = wordArray.words; + var answer = []; + for (var b = 0; b < words.length * 32; b += 8) { + answer.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); + } + return new Buffer(answer, 'hex'); } return new Buffer(crypto.createHash('rmd160').update(data).digest('binary'), 'binary'); };