Added getID to PublicKey

- Tests in BloomFilter in [bitcoin core](https://github.com/bitcoin/bitcoin/blob/master/src/test/bloom_tests.cpp#L85) use the CPubKey.GetID as input into the BloomFilter
- The hash is calculated when generating an Address however the hash itself is not currently available
This commit is contained in:
Braydon Fuller 2015-01-08 17:43:59 -05:00
parent 3b4aaff44d
commit b38f7fa319
2 changed files with 30 additions and 0 deletions

View File

@ -3,6 +3,7 @@
var Address = require('./address');
var BN = require('./crypto/bn');
var Point = require('./crypto/point');
var Hash = require('./crypto/hash');
var JSUtil = require('./util/js');
var Network = require('./networks');
var _ = require('lodash');
@ -384,6 +385,15 @@ PublicKey.prototype.toBuffer = PublicKey.prototype.toDER = function() {
}
};
/*
* Will return a sha256 + ripemd160 hash of the serialized public key
* @see https://github.com/bitcoin/bitcoin/blob/master/src/pubkey.h#L141
* @returns {Buffer}
*/
PublicKey.prototype.getID = function getID() {
return Hash.sha256ripemd160(this.toBuffer())
}
/**
* Will return an address for the public key
*

View File

@ -8,6 +8,7 @@ var Point = bitcore.crypto.Point;
var BN = bitcore.crypto.BN;
var PublicKey = bitcore.PublicKey;
var PrivateKey = bitcore.PrivateKey;
var Address = bitcore.Address;
var Networks = bitcore.Networks;
/* jshint maxlen: 200 */
@ -340,6 +341,25 @@ describe('PublicKey', function() {
});
describe('hashes', function() {
// wif private key, address
// see: https://github.com/bitcoin/bitcoin/blob/master/src/test/key_tests.cpp#L20
var data = [
['5HxWvvfubhXpYYpS3tJkw6fq9jE9j18THftkZjHHfmFiWtmAbrj', '1QFqqMUD55ZV3PJEJZtaKCsQmjLT6JkjvJ'],
['5KC4ejrDjv152FGwP386VD1i2NYc5KkfSMyv1nGy1VGDxGHqVY3', '1F5y5E5FMc5YzdJtB9hLaUe43GDxEKXENJ'],
['Kwr371tjA9u2rFSMZjTNun2PXXP3WPZu2afRHTcta6KxEUdm1vEw', '1NoJrossxPBKfCHuJXT4HadJrXRE9Fxiqs'],
['L3Hq7a8FEQwJkW1M2GNKDW28546Vp5miewcCzSqUD9kCAXrJdS3g', '1CRj2HyM1CXWzHAXLQtiGLyggNT9WQqsDs']
];
data.forEach(function(d){
var publicKey = PrivateKey.fromWIF(d[0]).toPublicKey();
var address = Address.fromString(d[1]);
address.hashBuffer.should.deep.equal(publicKey.getID());
});
});
describe('#toString', function() {
it('should print this known public key', function() {