Browse Source

Added support for uncompressed public keys to Signature.fromCompact

patch-2
Braydon Fuller 10 years ago
parent
commit
a5cd5a1407
  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

@ -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);
});
});

Loading…
Cancel
Save