|
@ -3,8 +3,11 @@ require('classtool'); |
|
|
function ClassSpec(b) { |
|
|
function ClassSpec(b) { |
|
|
var superclass = b.superclass || require('./util/VersionedData').class(); |
|
|
var superclass = b.superclass || require('./util/VersionedData').class(); |
|
|
|
|
|
|
|
|
function PrivateKey() { |
|
|
//compressed is true if public key is compressed; false otherwise
|
|
|
|
|
|
function PrivateKey(version, buf, compressed) { |
|
|
PrivateKey.super(this, arguments); |
|
|
PrivateKey.super(this, arguments); |
|
|
|
|
|
if (compressed !== undefined) |
|
|
|
|
|
this.compressed(compressed); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
PrivateKey.superclass = superclass; |
|
|
PrivateKey.superclass = superclass; |
|
@ -13,11 +16,52 @@ function ClassSpec(b) { |
|
|
PrivateKey.prototype.validate = function() { |
|
|
PrivateKey.prototype.validate = function() { |
|
|
this.doAsBinary(function() { |
|
|
this.doAsBinary(function() { |
|
|
PrivateKey.super(this, 'validate', arguments); |
|
|
PrivateKey.super(this, 'validate', arguments); |
|
|
if (this.data.length < 32 || this.data.length > 33) |
|
|
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'); |
|
|
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; |
|
|
return PrivateKey; |
|
|
}; |
|
|
}; |
|
|
module.defineClass(ClassSpec); |
|
|
module.defineClass(ClassSpec); |
|
|