Merge pull request #1250 from braydonf/feature/compact-uncompressed
Support Uncompressed Public Key Compact Signatures
This commit is contained in:
commit
7cf97ac379
@ -31,10 +31,17 @@ Signature.prototype.set = function(obj) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Signature.fromCompact = function(buf) {
|
Signature.fromCompact = function(buf) {
|
||||||
|
$.checkArgument(BufferUtil.isBuffer(buf), 'Argument is expected to be a Buffer');
|
||||||
|
|
||||||
var sig = new Signature();
|
var sig = new Signature();
|
||||||
//TODO: handle uncompressed pubkeys
|
|
||||||
var compressed = true;
|
var compressed = true;
|
||||||
var i = buf.slice(0, 1)[0] - 27 - 4;
|
var i = buf.slice(0, 1)[0] - 27 - 4;
|
||||||
|
if (i < 0) {
|
||||||
|
compressed = false;
|
||||||
|
i = i + 4;
|
||||||
|
}
|
||||||
|
|
||||||
var b2 = buf.slice(1, 33);
|
var b2 = buf.slice(1, 33);
|
||||||
var b3 = buf.slice(33, 65);
|
var b3 = buf.slice(33, 65);
|
||||||
|
|
||||||
@ -142,8 +149,9 @@ Signature.prototype.toCompact = function(i, compressed) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var val = i + 27 + 4;
|
var val = i + 27 + 4;
|
||||||
if (compressed === false)
|
if (compressed === false) {
|
||||||
val = val - 4;
|
val = val - 4;
|
||||||
|
}
|
||||||
var b1 = new Buffer([val]);
|
var b1 = new Buffer([val]);
|
||||||
var b2 = this.r.toBuffer({
|
var b2 = this.r.toBuffer({
|
||||||
size: 32
|
size: 32
|
||||||
|
|||||||
@ -49,6 +49,18 @@ describe('Signature', function() {
|
|||||||
var sig = Signature.fromCompact(compressed);
|
var sig = Signature.fromCompact(compressed);
|
||||||
sig.r.cmp(BN.Zero).should.equal(0);
|
sig.r.cmp(BN.Zero).should.equal(0);
|
||||||
sig.s.cmp(BN.Zero).should.equal(0);
|
sig.s.cmp(BN.Zero).should.equal(0);
|
||||||
|
sig.compressed.should.equal(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create a signature from an uncompressed signature', function() {
|
||||||
|
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);
|
||||||
|
sig.compressed.should.equal(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user