|
package common
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"testing"
|
|
|
|
ethCommon "github.com/ethereum/go-ethereum/common"
|
|
ethCrypto "github.com/ethereum/go-ethereum/crypto"
|
|
"github.com/iden3/go-iden3-crypto/babyjub"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAccountCreationAuth(t *testing.T) {
|
|
// Ethereum key
|
|
ethSk, err := ethCrypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19")
|
|
require.NoError(t, err)
|
|
ethAddr := ethCrypto.PubkeyToAddress(ethSk.PublicKey)
|
|
|
|
// BabyJubJub key
|
|
var sk babyjub.PrivateKey
|
|
_, err = hex.Decode(sk[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
|
|
assert.NoError(t, err)
|
|
|
|
chainID := uint16(0)
|
|
hermezContractAddr := ethCommon.HexToAddress("0xc344E203a046Da13b0B4467EB7B3629D0C99F6E6")
|
|
a := AccountCreationAuth{
|
|
EthAddr: ethAddr,
|
|
BJJ: sk.Public().Compress(),
|
|
}
|
|
msg, err := a.HashToSign(chainID, hermezContractAddr)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "cb5a7e44329ff430c81fec49fb2ac6741f02d5ec96cbcb618a6991f0a9c80ffd", hex.EncodeToString(msg))
|
|
|
|
// sign AccountCreationAuth with eth key
|
|
sig, err := ethCrypto.Sign(msg, ethSk)
|
|
assert.NoError(t, err)
|
|
a.Signature = sig
|
|
|
|
assert.True(t, a.VerifySignature(chainID, hermezContractAddr))
|
|
}
|