diff --git a/wallet/package.json b/wallet/package.json index 8835914f4..79dcd9839 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 b3555b06f..0b105ac57 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 ); });