From 43061c691b77bac625264b7b353583b405fa992b Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Fri, 29 Dec 2017 20:44:32 -0500 Subject: [PATCH] Verify message supports normalized and non-normalized recovery parameter. --- wallet/package.json | 2 +- wallet/wallet.js | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/wallet/package.json b/wallet/package.json index 8835914f..79dcd983 100644 --- a/wallet/package.json +++ b/wallet/package.json @@ -1,6 +1,6 @@ { "name": "ethers-wallet", - "version": "2.1.6", + "version": "2.1.7", "description": "Wallet and signing library for Ethereum.", "bugs": { "url": "http://github.com/ethers-io/ethers.js/issues", diff --git a/wallet/wallet.js b/wallet/wallet.js index b3555b06..0b105ac5 100644 --- a/wallet/wallet.js +++ b/wallet/wallet.js @@ -306,13 +306,16 @@ utils.defineProperty(Wallet, 'verifyMessage', function(message, signature) { signature = utils.hexlify(signature); if (signature.length != 132) { throw new Error('invalid signature'); } var digest = getHash(message); - var recoveryParam = parseInt(signature.substring(130), 16) - 27; + + var recoveryParam = parseInt(signature.substring(130), 16); + if (recoveryParam >= 27) { recoveryParam -= 27; } if (recoveryParam < 0) { throw new Error('invalid signature'); } + return SigningKey.recover( digest, signature.substring(0, 66), '0x' + signature.substring(66, 130), - parseInt(signature.substring(130), 16) - 27 + recoveryParam ); });