From 29ad6b692e5bac9a1282f3dcf05222c79f086fc2 Mon Sep 17 00:00:00 2001
From: Andreas Brekken
Date: Tue, 11 Mar 2014 18:25:36 +0100
Subject: [PATCH 1/3] Message signing does not work with compressed keys. ref
#61
---
test/message.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/test/message.js b/test/message.js
index 553cd13..fd00fa9 100644
--- a/test/message.js
+++ b/test/message.js
@@ -30,5 +30,21 @@ describe('Message', function() {
var sig = Message.signMessage(key, msg);
assert.ok(!Message.verifyMessage(addr, sig, msg));
})
+
+ it('handles compressed keys', function() {
+ var key = new ECKey(hexToBytes(priv));
+ key.compressed = true
+
+ var addr = key.getBitcoinAddress().toString()
+
+ var sig = Message.signMessage(key, msg);
+ assert.ok(Message.verifyMessage(addr, sig, msg));
+
+ // wrong message
+ assert.ok(!Message.verifyMessage(addr, sig, 'not foobar'));
+
+ // wrong address
+ assert.ok(!Message.verifyMessage('1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', sig, msg));
+ })
})
})
From f09890fed1331931d083ebcdc9f4052fd7498137 Mon Sep 17 00:00:00 2001
From: Andreas Brekken
Date: Tue, 11 Mar 2014 18:26:40 +0100
Subject: [PATCH 2/3] Determine whether key is compressed from the key itself.
ref #61
---
src/message.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/message.js b/src/message.js
index b370f92..beacfa6 100644
--- a/src/message.js
+++ b/src/message.js
@@ -27,7 +27,7 @@ Message.getHash = function (message) {
return Crypto.SHA256(Crypto.SHA256(buffer, {asBytes: true}), {asBytes: true});
};
-Message.signMessage = function (key, message, compressed) {
+Message.signMessage = function (key, message) {
var hash = Message.getHash(message);
var sig = key.sign(hash);
@@ -37,7 +37,7 @@ Message.signMessage = function (key, message, compressed) {
var i = ecdsa.calcPubkeyRecoveryParam(key, obj.r, obj.s, hash);
i += 27;
- if (compressed) i += 4;
+ if (key.compressed) i += 4;
var rBa = obj.r.toByteArrayUnsigned();
var sBa = obj.s.toByteArrayUnsigned();
From 08e75a82c91368af8002865e66adee6c01eb9167 Mon Sep 17 00:00:00 2001
From: Andreas Brekken
Date: Tue, 11 Mar 2014 18:28:04 +0100
Subject: [PATCH 3/3] Add whether pubkey recovered from sig is compressed.
close #61
---
src/message.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/message.js b/src/message.js
index beacfa6..e2367c7 100644
--- a/src/message.js
+++ b/src/message.js
@@ -59,6 +59,7 @@ Message.verifyMessage = function (address, sig, message) {
var isCompressed = !!(sig.i & 4);
var pubKey = ecdsa.recoverPubKey(sig.r, sig.s, hash, sig.i);
+ pubKey.compressed = isCompressed;
var expectedAddress = pubKey.getBitcoinAddress().toString();