Skip to content

Instantly share code, notes, and snippets.

@dcb9
Last active December 17, 2025 09:36
Show Gist options
  • Select an option

  • Save dcb9/385631846097e1f59e3cba3b1d42f3ed to your computer and use it in GitHub Desktop.

Select an option

Save dcb9/385631846097e1f59e3cba3b1d42f3ed to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
)
func main() {
fmt.Println(verifySig(
"0x0EaE3eF6CC7176553E6B45d94e9eFDE2Da7B82a5",
"0x34850b7e36e635783df0563c7202c3ac776df59db5015d2b6f0add33955bb5c43ce35efb5ce695a243bc4c5dc4298db40cd765f3ea5612d2d57da1e4933b2f201b",
[]byte("Example `personal_sign` message"),
))
}
func verifySig(from, sigHex string, msg []byte) bool {
sig := hexutil.MustDecode(sigHex)
msg = accounts.TextHash(msg)
if sig[crypto.RecoveryIDOffset] == 27 || sig[crypto.RecoveryIDOffset] == 28 {
sig[crypto.RecoveryIDOffset] -= 27 // Transform yellow paper V from 27/28 to 0/1
}
recovered, err := crypto.SigToPub(msg, sig)
if err != nil {
return false
}
recoveredAddr := crypto.PubkeyToAddress(*recovered)
return from == recoveredAddr.Hex()
}
@dcb9
Copy link
Copy Markdown
Author

dcb9 commented Apr 4, 2024

@valterlobo Very useful, thanks for sharing

@umiiii
Copy link
Copy Markdown

umiiii commented Sep 7, 2025

Thanks for your solution!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment