arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Update L1CoordinatorTxFromBytes to EIP712
arnaucube root@arnaucube.com
Sun, 28 Feb 2021 10:56:51 +0100
commit

56ffea2190f20f59a9912ec226e6e8e59ead8b90

parent

f664a3a382d8172453c512645bf721c2f7745b0a

2 files changed, 19 insertions(+), 27 deletions(-)

jump to
M common/l1tx.go → common/l1tx.go

@@ -368,18 +368,11 @@

return tx, nil } -func signHash(data []byte) []byte { - msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - return ethCrypto.Keccak256([]byte(msg)) -} - // L1CoordinatorTxFromBytes decodes a L1Tx from []byte func L1CoordinatorTxFromBytes(b []byte, chainID *big.Int, hermezAddress ethCommon.Address) (*L1Tx, error) { if len(b) != RollupConstL1CoordinatorTotalBytes { return nil, tracerr.Wrap(fmt.Errorf("Can not parse L1CoordinatorTx bytes, expected length %d, current: %d", 101, len(b))) } - - bytesMessage := []byte("I authorize this babyjubjub key for hermez rollup account creation") tx := &L1Tx{ UserOrigin: false,

@@ -401,18 +394,20 @@ if int(v) > 0 {

// L1CoordinatorTX ETH // Ethereum adds 27 to v v = b[0] - byte(27) //nolint:gomnd - chainIDBytes := ethCommon.LeftPadBytes(chainID.Bytes(), 2) - var data []byte - data = append(data, bytesMessage...) - data = append(data, pkCompB...) - data = append(data, chainIDBytes[:]...) - data = append(data, hermezAddress.Bytes()...) var signature []byte signature = append(signature, r[:]...) signature = append(signature, s[:]...) signature = append(signature, v) - hash := signHash(data) - pubKeyBytes, err := ethCrypto.Ecrecover(hash, signature) + + accCreationAuth := AccountCreationAuth{ + BJJ: tx.FromBJJ, + } + h, err := accCreationAuth.HashToSign(uint16(chainID.Uint64()), hermezAddress) + if err != nil { + return nil, tracerr.Wrap(err) + } + + pubKeyBytes, err := ethCrypto.Ecrecover(h, signature) if err != nil { return nil, tracerr.Wrap(err) }
M common/l1tx_test.go → common/l1tx_test.go

@@ -227,7 +227,6 @@

func TestL1CoordinatorTxByteParsers(t *testing.T) { hermezAddress := ethCommon.HexToAddress("0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe") chainID := big.NewInt(1337) - chainIDBytes := ethCommon.LeftPadBytes(chainID.Bytes(), 2) privateKey, err := crypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19") require.NoError(t, err)

@@ -245,18 +244,16 @@ var pkComp babyjub.PublicKeyComp

pkCompL := []byte("56ca90f80d7c374ae7485e9bcc47d4ac399460948da6aeeb899311097925a72c") err = pkComp.UnmarshalText(pkCompL) require.NoError(t, err) - bytesMessage1 := []byte("\x19Ethereum Signed Message:\n120") - bytesMessage2 := []byte("I authorize this babyjubjub key for hermez rollup account creation") - babyjubB := SwapEndianness(pkComp[:]) - var data []byte - data = append(data, bytesMessage1...) - data = append(data, bytesMessage2...) - data = append(data, babyjubB[:]...) - data = append(data, chainIDBytes...) - data = append(data, hermezAddress.Bytes()...) - hash := crypto.Keccak256Hash(data) - signature, err := crypto.Sign(hash.Bytes(), privateKey) + accCreationAuth := AccountCreationAuth{ + EthAddr: fromEthAddr, + BJJ: pkComp, + } + + h, err := accCreationAuth.HashToSign(uint16(chainID.Uint64()), hermezAddress) + require.NoError(t, err) + + signature, err := crypto.Sign(h, privateKey) require.NoError(t, err) // Ethereum adds 27 to v v := int(signature[64])