Added support for uncompressed public keys to Signature.fromCompact

This commit is contained in:
Braydon Fuller 2015-05-25 23:57:46 -04:00
parent 7719d1bfd4
commit a5cd5a1407
2 changed files with 17 additions and 7 deletions

View File

@ -31,10 +31,17 @@ Signature.prototype.set = function(obj) {
};
Signature.fromCompact = function(buf) {
$.checkArgument(BufferUtil.isBuffer(buf), 'Argument is expected to be a Buffer');
var sig = new Signature();
//TODO: handle uncompressed pubkeys
var compressed = true;
var i = buf.slice(0, 1)[0] - 27 - 4;
if (i < 0) {
compressed = false;
i = i + 4;
}
var b2 = buf.slice(1, 33);
var b3 = buf.slice(33, 65);
@ -142,8 +149,9 @@ Signature.prototype.toCompact = function(i, compressed) {
}
var val = i + 27 + 4;
if (compressed === false)
if (compressed === false) {
val = val - 4;
}
var b1 = new Buffer([val]);
var b2 = this.r.toBuffer({
size: 32

View File

@ -52,11 +52,13 @@ describe('Signature', function() {
});
it('should create a signature from an uncompressed signature', function() {
var uncompressed = '1c49f92a610fa934f45b3a01036055ebbe65a6b910e8c3cfbbb0b64f575' +
'196f2fe18dc5a236d7883434cf48c11d56c804493dfe31b5a09a1a3cab378b2aac8c934';
var sig = Signature.fromCompact(uncompressed);
sig.r.toString('hex').should.equal('38a5e6d9a9fda73a2a8275413be68f408a1859173f07ae557be54ce1fdd5f3b1');
sig.s.toString('hex').should.equal('21135fd5b20a73b09a7389910fe2b20f59b6fd0990c84169367db069cd6e3ea1');
var sigHexaStr = '1cd5e61ab5bfd0d1450997894cb1a53e917f89d82eb43f06fa96f32c96e061aec12fc1188e8b' +
'0dc553a2588be2b5b68dbbd7f092894aa3397786e9c769c5348dc6';
var sig = Signature.fromCompact(new Buffer(sigHexaStr, 'hex'));
var r = 'd5e61ab5bfd0d1450997894cb1a53e917f89d82eb43f06fa96f32c96e061aec1';
var s = '2fc1188e8b0dc553a2588be2b5b68dbbd7f092894aa3397786e9c769c5348dc6';
sig.r.toString('hex').should.equal(r);
sig.s.toString('hex').should.equal(s);
});
});