You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
82 lines
2.3 KiB
|
|
var VersionedData = require('../util/VersionedData');
|
|
var EncodedData = require('../util/EncodedData');
|
|
var networks = require('../networks');
|
|
var util = require('util');
|
|
|
|
//compressed is true if public key is compressed; false otherwise
|
|
function PrivateKey(version, buf, compressed) {
|
|
PrivateKey.super_.call(this, version, buf);
|
|
if (compressed !== undefined)
|
|
this.compressed(compressed);
|
|
};
|
|
util.inherits(PrivateKey, VersionedData);
|
|
EncodedData.applyEncodingsTo(PrivateKey);
|
|
|
|
PrivateKey.prototype.validate = function() {
|
|
this.doAsBinary(function() {
|
|
PrivateKey.super_.prototype.validate.call(this);
|
|
if (this.data.length < 32 || (this.data.length > 1 + 32 && !this.compressed()) || (this.data.length == 1 + 32 + 1 && this.data[1 + 32 + 1 - 1] != 1) || this.data.length > 1 + 32 + 1)
|
|
throw new Error('invalid data length');
|
|
});
|
|
if (typeof this.network() === 'undefined') throw new Error('invalid network');
|
|
};
|
|
|
|
// get or set the payload data (as a Buffer object)
|
|
// overloaded from VersionedData
|
|
PrivateKey.prototype.payload = function(data) {
|
|
if (data) {
|
|
this.doAsBinary(function() {
|
|
data.copy(this.data, 1);
|
|
});
|
|
return data;
|
|
}
|
|
var buf = this.as('binary');
|
|
if (buf.length == 1 + 32 + 1)
|
|
return buf.slice(1, 1 + 32);
|
|
else if (buf.length == 1 + 32)
|
|
return buf.slice(1);
|
|
};
|
|
|
|
// get or set whether the corresponding public key is compressed
|
|
PrivateKey.prototype.compressed = function(compressed) {
|
|
if (compressed !== undefined) {
|
|
this.doAsBinary(function() {
|
|
var len = 1 + 32 + 1;
|
|
if (compressed) {
|
|
var data = new Buffer(len);
|
|
this.data.copy(data);
|
|
this.data = data;
|
|
this.data[len - 1] = 1;
|
|
} else {
|
|
this.data = this.data.slice(0, len - 1);
|
|
}
|
|
});
|
|
} else {
|
|
var len = 1 + 32 + 1;
|
|
var data = this.as('binary');
|
|
if (data.length == len && data[len - 1] == 1)
|
|
return true;
|
|
else if (data.length == len - 1)
|
|
return false;
|
|
else
|
|
throw new Error('invalid private key');
|
|
}
|
|
};
|
|
|
|
PrivateKey.prototype.network = function() {
|
|
var version = this.version();
|
|
|
|
var livenet = networks.livenet;
|
|
var testnet = networks.testnet;
|
|
|
|
var answer;
|
|
if (version === livenet.privKeyVersion)
|
|
answer = livenet;
|
|
else if (version === testnet.privKeyVersion)
|
|
answer = testnet;
|
|
|
|
return answer;
|
|
};
|
|
|
|
module.exports = PrivateKey;
|
|
|