arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/common/accountcreationauths_test.go
common/accountcreationauths_test.goRaw
 1package common
 2
 3import (
 4	"encoding/hex"
 5	"testing"
 6
 7	ethCommon "github.com/ethereum/go-ethereum/common"
 8	ethCrypto "github.com/ethereum/go-ethereum/crypto"
 9	"github.com/iden3/go-iden3-crypto/babyjub"
10	"github.com/stretchr/testify/assert"
11	"github.com/stretchr/testify/require"
12)
13
14func TestAccountCreationAuth(t *testing.T) {
15	// Ethereum key
16	ethSk, err := ethCrypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19")
17	require.NoError(t, err)
18	ethAddr := ethCrypto.PubkeyToAddress(ethSk.PublicKey)
19
20	// BabyJubJub key
21	var sk babyjub.PrivateKey
22	_, err = hex.Decode(sk[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
23	assert.NoError(t, err)
24
25	chainID := uint16(0)
26	hermezContractAddr := ethCommon.HexToAddress("0xc344E203a046Da13b0B4467EB7B3629D0C99F6E6")
27	a := AccountCreationAuth{
28		EthAddr: ethAddr,
29		BJJ:     sk.Public().Compress(),
30	}
31	msg, err := a.HashToSign(chainID, hermezContractAddr)
32	assert.NoError(t, err)
33	assert.Equal(t, "cb5a7e44329ff430c81fec49fb2ac6741f02d5ec96cbcb618a6991f0a9c80ffd", hex.EncodeToString(msg))
34
35	// sign AccountCreationAuth with eth key
36	sig, err := ethCrypto.Sign(msg, ethSk)
37	assert.NoError(t, err)
38	a.Signature = sig
39
40	assert.True(t, a.VerifySignature(chainID, hermezContractAddr))
41}