Browse Source

Merge pull request #630 from braydonf/feature/immutable

Immutable Address, PublicKey and PrivateKey
patch-2
Esteban Ordano 10 years ago
parent
commit
2b866a8460
  1. 18
      lib/address.js
  2. 17
      lib/privatekey.js
  3. 11
      lib/publickey.js
  4. 6
      test/privatekey.js

18
lib/address.js

@ -71,10 +71,20 @@ function Address(data, network, type) {
info.network = info.network || network || networks.defaultNetwork.name;
info.type = info.type || type || 'pubkeyhash';
// set the validated values
this.hashBuffer = info.hashBuffer;
this.network = info.network;
this.type = info.type;
Object.defineProperty(this, 'hashBuffer', {
configurable: false,
value: info.hashBuffer
});
Object.defineProperty(this, 'network', {
configurable: false,
value: info.network
});
Object.defineProperty(this, 'type', {
configurable: false,
value: info.type
});
return this;

17
lib/privatekey.js

@ -67,9 +67,20 @@ var PrivateKey = function PrivateKey(data, network, compressed) {
throw new TypeError('Must specify whether the corresponding public key is compressed or not (true or false)');
}
this.bn = info.bn;
this.compressed = info.compressed;
this.network = info.network;
Object.defineProperty(this, 'bn', {
configurable: false,
value: info.bn
});
Object.defineProperty(this, 'compressed', {
configurable: false,
value: info.compressed
});
Object.defineProperty(this, 'network', {
configurable: false,
value: info.network
});
return this;

11
lib/publickey.js

@ -55,8 +55,15 @@ var PublicKey = function PublicKey(data, compressed) {
// validation
info.point.validate();
this.point = info.point;
this.compressed = info.compressed;
Object.defineProperty(this, 'point', {
configurable: false,
value: info.point
});
Object.defineProperty(this, 'compressed', {
configurable: false,
value: info.compressed
});
return this;

6
test/privatekey.js

@ -263,16 +263,14 @@ describe('PrivateKey', function() {
it('should convert this known PrivateKey to known PublicKey and preserve compressed=true', function() {
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
var privkey = new PrivateKey(BN(new Buffer(privhex, 'hex')));
privkey.compressed = true;
var privkey = new PrivateKey(BN(new Buffer(privhex, 'hex')), 'livenet', true);
var pubkey = privkey.toPublicKey();
pubkey.compressed.should.equal(true);
});
it('should convert this known PrivateKey to known PublicKey and preserve compressed=true', function() {
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
var privkey = new PrivateKey(BN(new Buffer(privhex, 'hex')));
privkey.compressed = false;
var privkey = new PrivateKey(BN(new Buffer(privhex, 'hex')), 'livenet', false);
var pubkey = privkey.toPublicKey();
pubkey.compressed.should.equal(false);
});

Loading…
Cancel
Save