Browse Source

Merge pull request #1250 from braydonf/feature/compact-uncompressed

Support Uncompressed Public Key Compact Signatures
patch-2
Patrick Nagurny 10 years ago
parent
commit
7cf97ac379
  1. 12
      lib/crypto/signature.js
  2. 12
      test/crypto/signature.js

12
lib/crypto/signature.js

@ -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

12
test/crypto/signature.js

@ -49,6 +49,18 @@ describe('Signature', function() {
var sig = Signature.fromCompact(compressed);
sig.r.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…
Cancel
Save