Skip to content

Instantly share code, notes, and snippets.

@lautarodragan
Created May 15, 2019 03:42
Show Gist options
  • Save lautarodragan/e165128d34e4551cc233440285dd81ae to your computer and use it in GitHub Desktop.
Save lautarodragan/e165128d34e4551cc233440285dd81ae to your computer and use it in GitHub Desktop.
ethereumjs-util @types/bn.js issue
import { bufferToHex, ecrecover, fromRpcSig, hashPersonalMessage, publicToAddress } from 'ethereumjs-util'
export function signatureIsValid(address: string, message: string, signature: string): boolean {
const msgHash = hashPersonalMessage(Buffer.from(message))
const signatureParams = fromRpcSig(signature)
const publicKey = ecrecover(
msgHash,
signatureParams.v,
signatureParams.r,
signatureParams.s,
)
const addressBuffer = publicToAddress(publicKey)
const addressVerified = bufferToHex(addressBuffer)
return addressVerified === address
}
const signedMessage = {
"address": "0xbe7d20a0f75dbccb82efe6ae3af1768e5e83d0b8",
"msg": "Secret Message",
"sig": "0x5e06a683754daa113774b42a1c3fd1f038b95e82eea918d404bab8d229df4ed06a4f5497aa9969a55aa559b97a48655d99b08c6992134c2d5d65b3becb11cf2b1c",
"version": "3",
"signer": "MEW"
}
console.log(signatureIsValid(signedMessage.address, signedMessage.msg, signedMessage.sig))
{
"name": "example-ethereumjs-util-issue",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "tsc"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node": "12.0.2",
"typescript": "3.4.5"
},
"dependencies": {
"ethereumjs-util": "6.1.0"
}
}
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"sourceMap": true,
"strict": true,
"esModuleInterop": true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment