1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package main
import ( "crypto/ecdsa" "fmt" "log"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" )
func prefixHash(data []byte) common.Hash { msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) return crypto.Keccak256Hash([]byte(msg)) } func signMsg(msg, privKeyHex string) ([]byte, ecdsa.PublicKey) { privKeyECDSA, err := crypto.HexToECDSA(privKeyHex) if err != nil { log.Fatal(err) } msgHash := prefixHash([]byte(msg)) signature, err := crypto.Sign(msgHash.Bytes(), privKeyECDSA) if err != nil { log.Fatal(err) } if signature[64] < 27{ signature[64] += 27 } return signature, privKeyECDSA.PublicKey }
var fakeP = "4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318"
func main() { sig, _ := signMsg("Some data", fakeP) fmt.Println("signature", hexutil.Encode(sig)) }
|