From e6bcf1293408c22f053b5ab4ad0f024be90b4799 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 3 Nov 2014 12:05:33 -0500 Subject: [PATCH] fixed an issue with verifying a signature with a public key with leading zeros --- lib/bitauth.js | 4 ++-- test/test.bitauth.js | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/bitauth.js b/lib/bitauth.js index 082a4dc..5de5aa6 100644 --- a/lib/bitauth.js +++ b/lib/bitauth.js @@ -44,8 +44,8 @@ BitAuth.getPublicKeyFromPrivateKey = function(privkey) { // compressed public key var pubKey = keys.getPublic(); - var xbuf = new Buffer(pubKey.x.toString('hex', 2), 'hex'); - var ybuf = new Buffer(pubKey.y.toString('hex', 2), 'hex'); + var xbuf = new Buffer(pubKey.x.toString('hex', 64), 'hex'); + var ybuf = new Buffer(pubKey.y.toString('hex', 64), 'hex'); if (ybuf[ybuf.length-1] % 2) { //odd var pub = Buffer.concat([new Buffer([3]), xbuf]); diff --git a/test/test.bitauth.js b/test/test.bitauth.js index f008fbc..8149c51 100644 --- a/test/test.bitauth.js +++ b/test/test.bitauth.js @@ -19,6 +19,9 @@ describe('bitauth', function() { sin: 'Tf3yr5tYvccKNVrE26BrPs6LWZRh8woHwjR' } + // a private key that will produce a public key with a leading zero + var privateKeyToZero = 'c6b7f6bfe5bb19b1e390e55ed4ba5df8af6068d0eb89379a33f9c19aacf6c08c'; + // keys generated var keys = null; @@ -99,6 +102,24 @@ describe('bitauth', function() { }); }); + it('should verify the signature with leading zero public key', function(done) { + + var leadingZeroKeys = { + priv: privateKeyToZero, + pub: bitauth.getPublicKeyFromPrivateKey(privateKeyToZero) + }; + + signature = bitauth.sign(contract, leadingZeroKeys.priv); + bitauth.verifySignature(contract, leadingZeroKeys.pub, signature, function(err, valid){ + should.not.exist(err); + should.exist(valid); + valid.should.equal(true); + }); + + done(); + + }); + }); describe('#validateSinTrue', function() {