Skip to content

Instantly share code, notes, and snippets.

@marc-queiroz
Created August 5, 2020 16:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save marc-queiroz/275b10dbf416e516364dfd130c35a9f3 to your computer and use it in GitHub Desktop.
Save marc-queiroz/275b10dbf416e516364dfd130c35a9f3 to your computer and use it in GitHub Desktop.
Truffle console commands - Learning how to sign a message using a private key and restore the address from hashed message
var ethUtil = require('ethereumjs-util')
var data = 'Hello World!'
var message = new Buffer(data)
var msgHash = ethUtil.hashPersonalMessage(message)
// privateKey = 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
// publicKey = 0x627306090abaB3A6e1400e9345bC60c78a8BEf57
var privateKey = new Buffer('c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3', "hex")
var sig = ethUtil.ecsign(msgHash, privateKey)
var publicKey = ethUtil.ecrecover(msgHash, sig.v, sig.r, sig.s)
var sender = ethUtil.publicToAddress(publicKey)
console.log('publicKey = ', sender.toString('hex'))
var Web3 = require('web3');
var web3 = new Web3();
var ethUtil = require('ethereumjs-util');
// Private Key
var pKey = "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3"
var pKeyx = new Buffer(pKey, "hex")
// Shared Message
var message = 'Hello World!'
var messageHash = web3.utils.sha3(message)
var messageHashx = new Buffer(messageHash.replace("0x", ""), "hex")
// Signed Hash
var signedMessage = ethUtil.ecsign(messageHashx, pKeyx)
var signedHash = ethUtil.toRpcSig(signedMessage.v, signedMessage.r, signedMessage.s).toString("hex")
console.log('signedHash = ', signedHash)
// Recover Address
var sigDecoded = ethUtil.fromRpcSig(signedHash)
var recoveredPub = ethUtil.ecrecover(messageHashx, sigDecoded.v, sigDecoded.r, sigDecoded.s)
var recoveredAddress = ethUtil.pubToAddress(recoveredPub).toString("hex")
console.log('recoveredAddress = ', recoveredAddress)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment