Merge pull request #140 from matiu/bug/fix-ripe160-and-address
Bug/fix ripe160 and address
This commit is contained in:
commit
c565d6207c
|
@ -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');
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ../
|
||||
|
||||
|
|
|
@ -28,6 +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<<k[b]|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<<l[b]|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 = CryptoJS.RIPEMD160;
|
||||
module.exports.WordArray = CryptoJS.lib.WordArray;
|
||||
module.exports.crypto31 = CryptoJS;
|
|
@ -19,6 +19,7 @@
|
|||
div.innerHTML += s + '<br />';
|
||||
};
|
||||
|
||||
print('<hr> <h1>Address</h1>' );
|
||||
var addrStrings = [
|
||||
"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
|
||||
"1A1zP1eP5QGefi2DMPTfTL5SLmv7Dixxxx",
|
||||
|
@ -38,34 +39,57 @@
|
|||
}
|
||||
|
||||
});
|
||||
print('<hr>');
|
||||
|
||||
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('<hr>');
|
||||
print('<hr> <h1>KeyModule</h1>' );
|
||||
/*
|
||||
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('<hr>');
|
||||
print('<hr> <h1>PeerManager</h1>' );
|
||||
|
||||
console.log('[example.html.65:PeerManager:]'); //TODO
|
||||
var p = new bitcore.PeerManager();
|
||||
|
||||
var pm = require('PeerManager');
|
||||
print('<hr> <h1>Util</h1>' );
|
||||
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));
|
||||
|
||||
|
||||
var Buffer = bitcore.Buffer;
|
||||
|
||||
pubKeyHash = coinUtil.ripe160(new bitcore.Buffer('hola'));
|
||||
print(bitcore.buffertools.toHex(pubKeyHash));
|
||||
|
||||
var bu = new Buffer('a5c756101065ac5b8f689139e6d856fa99e54b5000b6428b43729d334cc9277d', 'hex');
|
||||
print(bitcore.buffertools.toHex(bu));
|
||||
|
||||
var pubKeyHash2 = coinUtil.ripe160(bu);
|
||||
print(bitcore.buffertools.toHex(pubKeyHash2));
|
||||
|
||||
|
||||
print('<hr><h1>WalletKey </h1>');
|
||||
var WalletKey = bitcore.WalletKey;
|
||||
var networks = bitcore.networks;
|
||||
|
||||
var priv = 'L4cEVwoNDeYdCQfFJAGkGKPnE2TmqLEuBn4znQChD2ojjQRJVKpU';
|
||||
var s = new WalletKey({
|
||||
network: networks.livenet
|
||||
});
|
||||
s.fromObj({ priv: priv});
|
||||
var o = s.storeObj();
|
||||
print("Private: " + o.priv);
|
||||
print("Public: " + o.pub);
|
||||
print("Addr: " + o.addr);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -50,6 +50,54 @@ describe('WalletKey', function() {
|
|||
s.privKey.private.toString().should.equal(s2.privKey.private.toString());
|
||||
s.privKey.public.toString().should.equal(s2.privKey.public.toString());
|
||||
});
|
||||
|
||||
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');
|
||||
o.addr.should.equal('mqBsTsnVF2zifoGtm7UsXRfdJUr52Jg5d4');
|
||||
});
|
||||
|
||||
|
||||
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.priv.should.equal(priv);
|
||||
o.pub.should.equal('04470bbc100896e4df317526efa22f15aac3681ef02d230d00d15b4cba8eea1e88477523d644f20edb6b344f06bba77a9dff81be69d74282866b0b7f3e9d0d910b');
|
||||
o.addr.should.equal('1v5GwPNomikEqmMe7h6q1jRw62WKTD6Xo');
|
||||
});
|
||||
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -36,6 +36,33 @@ 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() {
|
||||
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'],
|
||||
|
@ -44,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() {
|
||||
|
|
19
util/util.js
19
util/util.js
|
@ -14,14 +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 RIPEMD160 = browser.RIPEMD160;
|
||||
var WordArray = browser.WordArray;
|
||||
data = data.toString();
|
||||
var result = 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');
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue