Browse Source

address convenience functions

patch-2
Ryan X. Charles 10 years ago
parent
commit
a2512226f8
  1. 11
      lib/address.js
  2. 5
      lib/key.js
  3. 21
      test/test.address.js
  4. 14
      test/test.key.js

11
lib/address.js

@ -1,5 +1,7 @@
var base58check = require('./base58check'); var base58check = require('./base58check');
var constants = require('./constants'); var constants = require('./constants');
var Hash = require('./hash');
var Pubkey = require('./pubkey');
function Address(hash, network, type) { function Address(hash, network, type) {
this.hash = hash; this.hash = hash;
@ -7,6 +9,15 @@ function Address(hash, network, type) {
this.type = type; this.type = type;
}; };
Address.prototype.fromPubkey = function(pubkey, network, compressed) {
if (typeof compressed === 'undefined')
compressed = true;
this.hash = Hash.sha256ripemd160(pubkey.toDER(compressed));
this.network = network || 'mainnet';
this.type = 'pubkeyhash';
return this;
};
Address.prototype.fromString = function(str) { Address.prototype.fromString = function(str) {
var buf = base58check.decode(str); var buf = base58check.decode(str);
if (buf.length !== 1 + 20) if (buf.length !== 1 + 20)

5
lib/key.js

@ -1,3 +1,4 @@
var Address = require('../lib/address');
var Privkey = require('./privkey'); var Privkey = require('./privkey');
var Pubkey = require('./pubkey'); var Pubkey = require('./pubkey');
var Random = require('./random'); var Random = require('./random');
@ -31,6 +32,10 @@ Key.prototype.fromString = function(str) {
} }
}; };
Key.prototype.getAddress = function(network, compressed) {
return (new Address()).fromPubkey(this.pubkey, network, compressed);
};
Key.prototype.privkey2pubkey = function() { Key.prototype.privkey2pubkey = function() {
this.pubkey = new Pubkey(point.getG().mul(this.privkey.bn)); this.pubkey = new Pubkey(point.getG().mul(this.privkey.bn));
}; };

21
test/test.address.js

@ -1,5 +1,6 @@
var should = require('chai').should(); var should = require('chai').should();
var constants = require('../lib/constants'); var constants = require('../lib/constants');
var Pubkey = require('../lib/pubkey');
var Address = require('../lib/address'); var Address = require('../lib/address');
describe('address', function() { describe('address', function() {
@ -11,6 +12,26 @@ describe('address', function() {
should.exist(address); should.exist(address);
}); });
describe('#fromPubkey', function() {
it('should make this address from a compressed pubkey', function() {
var pubkey = new Pubkey();
pubkey.fromDER(new Buffer('0285e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b004', 'hex'));
var address = new Address();
address.fromPubkey(pubkey);
address.toString().should.equal('19gH5uhqY6DKrtkU66PsZPUZdzTd11Y7ke');
});
it('should make this address from an uncompressed pubkey', function() {
var pubkey = new Pubkey();
pubkey.fromDER(new Buffer('0285e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b004', 'hex'));
var address = new Address();
address.fromPubkey(pubkey, 'mainnet', false);
address.toString().should.equal('16JXnhxjJUhxfyx4y6H4sFcxrgt8kQ8ewX');
});
});
describe('#fromString', function() { describe('#fromString', function() {
it('should derive from this known address string mainnet', function() { it('should derive from this known address string mainnet', function() {

14
test/test.key.js

@ -1,6 +1,7 @@
var should = require('chai').should(); var should = require('chai').should();
var bn = require('../lib/bn'); var bn = require('../lib/bn');
var point = require('../lib/point'); var point = require('../lib/point');
var Address = require('../lib/address');
var Privkey = require('../lib/privkey'); var Privkey = require('../lib/privkey');
var Pubkey = require('../lib/pubkey'); var Pubkey = require('../lib/pubkey');
var Key = require('../lib/key'); var Key = require('../lib/key');
@ -74,6 +75,19 @@ describe('key', function() {
}); });
describe('#getAddress', function() {
it('should return an address', function() {
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
var pubhex = '02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc';
var key = new Key();
key.privkey = new Privkey(bn(new Buffer(privhex, 'hex')));
key.privkey2pubkey();
key.getAddress().toString().should.equal((new Address()).fromPubkey(key.pubkey).toString());
});
});
describe("#privkey2pubkey", function() { describe("#privkey2pubkey", function() {
it('should convert this known Privkey to known Pubkey', function() { it('should convert this known Privkey to known Pubkey', function() {

Loading…
Cancel
Save