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.
67 lines
1.9 KiB
67 lines
1.9 KiB
require('classtool');
|
|
|
|
function ClassSpec(b) {
|
|
var superclass = b.superclass || require('./util/VersionedData').class();
|
|
|
|
//compressed is true if public key is compressed; false otherwise
|
|
function PrivateKey(version, buf, compressed) {
|
|
PrivateKey.super(this, arguments);
|
|
if (compressed !== undefined)
|
|
this.compressed(compressed);
|
|
};
|
|
|
|
PrivateKey.superclass = superclass;
|
|
superclass.applyEncodingsTo(PrivateKey);
|
|
|
|
PrivateKey.prototype.validate = function() {
|
|
this.doAsBinary(function() {
|
|
PrivateKey.super(this, 'validate', arguments);
|
|
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');
|
|
});
|
|
};
|
|
|
|
// 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');
|
|
}
|
|
};
|
|
|
|
return PrivateKey;
|
|
};
|
|
module.defineClass(ClassSpec);
|
|
|