mirror of
https://github.com/status-im/status-go.git
synced 2025-01-10 14:47:06 +00:00
2df9df10ab
interface for initializing db, which is implemented for appdatabase and walletdatabase. TBD for multiaccounts DB. Unified DB initializion for all tests using helpers and new interface. Reduced sqlcipher kdf iterations for all tests to 1.
103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/status-im/status-go/eth-node/crypto"
|
|
"github.com/status-im/status-go/params"
|
|
"github.com/status-im/status-go/services/personal"
|
|
"github.com/status-im/status-go/t/utils"
|
|
)
|
|
|
|
func TestHashMessage(t *testing.T) {
|
|
utils.Init()
|
|
|
|
backend, stop1, stop2, stopWallet, err := setupGethStatusBackend()
|
|
defer func() {
|
|
err := stop1()
|
|
if err != nil {
|
|
require.NoError(t, backend.StopNode())
|
|
}
|
|
}()
|
|
defer func() {
|
|
err := stop2()
|
|
if err != nil {
|
|
require.NoError(t, backend.StopNode())
|
|
}
|
|
}()
|
|
defer func() {
|
|
err := stopWallet()
|
|
if err != nil {
|
|
require.NoError(t, backend.StopNode())
|
|
}
|
|
}()
|
|
require.NoError(t, err)
|
|
|
|
config, err := utils.MakeTestNodeConfig(params.StatusChainNetworkID)
|
|
require.NoError(t, err)
|
|
require.NoError(t, backend.AccountManager().InitKeystore(config.KeyStoreDir))
|
|
err = backend.StartNode(config)
|
|
require.NoError(t, err)
|
|
defer func() {
|
|
require.NoError(t, backend.StopNode())
|
|
}()
|
|
|
|
key, err := crypto.GenerateKey()
|
|
require.NoError(t, err)
|
|
addr := crypto.PubkeyToAddress(key.PublicKey)
|
|
|
|
scenarios := []struct {
|
|
message string
|
|
expectedHash string
|
|
recoverMessage string
|
|
}{
|
|
{
|
|
message: "XYZ",
|
|
expectedHash: "634349abf2de883d23e8b46972896c7652a06670c990410d3436d9b44db09e6b",
|
|
recoverMessage: fmt.Sprintf("0x%x", "XYZ"),
|
|
},
|
|
{
|
|
message: "0xXYZ",
|
|
expectedHash: "f9c57a8998c71a2c8d74d70abe6561838f0d6cb6d82bc85bd70afcc82368055c",
|
|
recoverMessage: fmt.Sprintf("0x%x", "0xXYZ"),
|
|
},
|
|
{
|
|
message: "1122",
|
|
expectedHash: "3f07e02a153f02bdf97d77161746257626e9c39e4c3cf59896365fd1e6a9c7c3",
|
|
recoverMessage: fmt.Sprintf("0x%x", "1122"),
|
|
},
|
|
{
|
|
message: "0x1122",
|
|
expectedHash: "86d79d0957efa9b7d91f1116e70d0ee934cb9cdeccefa07756aed2bee119a2f3",
|
|
recoverMessage: "0x1122",
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
t.Run(s.message, func(t *testing.T) {
|
|
hash, err := HashMessage(s.message)
|
|
require.Nil(t, err)
|
|
require.Equal(t, s.expectedHash, fmt.Sprintf("%x", hash))
|
|
|
|
// simulate signature from external signer like a keycard
|
|
sig, err := crypto.Sign(hash, key)
|
|
require.NoError(t, err)
|
|
sig[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper
|
|
|
|
// check that the message was wrapped correctly before hashing it
|
|
recParams := personal.RecoverParams{
|
|
Message: s.recoverMessage,
|
|
Signature: fmt.Sprintf("0x%x", sig),
|
|
}
|
|
|
|
recoveredAddr, err := backend.Recover(recParams)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, addr, recoveredAddr)
|
|
})
|
|
}
|
|
}
|