Skip to content

Commit

Permalink
ethwallet: add convenience SignData method and test
Browse files Browse the repository at this point in the history
  • Loading branch information
pkieltyka committed Jul 30, 2023
1 parent 85ac9b0 commit af08a69
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
12 changes: 12 additions & 0 deletions ethwallet/ethwallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,18 @@ func (w *Wallet) SignMessage(message []byte) ([]byte, error) {
return sig, nil
}

func (w *Wallet) SignData(data []byte) ([]byte, error) {
h := crypto.Keccak256(data)

sig, err := crypto.Sign(h, w.hdnode.PrivateKey())
if err != nil {
return []byte{}, err
}
sig[64] += 27

return sig, nil
}

func (w *Wallet) IsValidSignature(msg, sig []byte) (bool, error) {
recoveredAddress, err := RecoverAddress(msg, sig)
if err != nil {
Expand Down
19 changes: 19 additions & 0 deletions ethwallet/ethwallet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/0xsequence/ethkit/ethwallet"
"github.com/0xsequence/ethkit/go-ethereum/common/hexutil"
"github.com/0xsequence/ethkit/go-ethereum/crypto"
"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -109,3 +110,21 @@ func TestWalletSignAndRecover(t *testing.T) {
assert.NoError(t, err)
assert.True(t, valid)
}

func TestWalletSignDataAndRecover(t *testing.T) {
wallet, err := ethwallet.NewWalletFromPrivateKey("3c121e5b2c2b2426f386bfc0257820846d77610c20e0fd4144417fb8fd79bfb8")
assert.NoError(t, err)

address := wallet.Address()
assert.NoError(t, err)
assert.Equal(t, "0x95a7D93FEf729ed829C761FF0e035BB6Dd2c7052", address.String())

data := []byte("hi")
sig, err := wallet.SignData(data)
assert.NoError(t, err)

recoveredAddress, err := ethwallet.RecoverAddressFromDigest(crypto.Keccak256(data), sig)
assert.NoError(t, err)

assert.Equal(t, address, recoveredAddress)
}

0 comments on commit af08a69

Please sign in to comment.