Commit 1bcd11e9 authored by Maurelian's avatar Maurelian Committed by GitHub

op-node: Return error on big chain id (#3620)

Co-authored-by: default avatarmergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
parent 3ae11e87
...@@ -224,7 +224,11 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config) pubsub.ValidatorEx ...@@ -224,7 +224,11 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config) pubsub.ValidatorEx
signatureBytes, payloadBytes := data[:65], data[65:] signatureBytes, payloadBytes := data[:65], data[65:]
// [REJECT] if the signature by the sequencer is not valid // [REJECT] if the signature by the sequencer is not valid
signingHash := BlockSigningHash(cfg, payloadBytes) signingHash, err := BlockSigningHash(cfg, payloadBytes)
if err != nil {
log.Warn("failed to compute block signing hash", "err", err, "peer", id)
return pubsub.ValidationReject
}
pub, err := crypto.SigToPub(signingHash[:], signatureBytes) pub, err := crypto.SigToPub(signingHash[:], signatureBytes)
if err != nil { if err != nil {
......
...@@ -23,19 +23,22 @@ type Signer interface { ...@@ -23,19 +23,22 @@ type Signer interface {
io.Closer io.Closer
} }
func SigningHash(domain [32]byte, chainID *big.Int, payloadBytes []byte) common.Hash { func SigningHash(domain [32]byte, chainID *big.Int, payloadBytes []byte) (common.Hash, error) {
var msgInput [32 + 32 + 32]byte var msgInput [32 + 32 + 32]byte
// domain: first 32 bytes // domain: first 32 bytes
copy(msgInput[:32], domain[:]) copy(msgInput[:32], domain[:])
// chain_id: second 32 bytes // chain_id: second 32 bytes
if chainID.BitLen() > 256 {
return common.Hash{}, errors.New("chain_id is too large")
}
chainID.FillBytes(msgInput[32:64]) chainID.FillBytes(msgInput[32:64])
// payload_hash: third 32 bytes, hash of encoded payload // payload_hash: third 32 bytes, hash of encoded payload
copy(msgInput[32:], crypto.Keccak256(payloadBytes)) copy(msgInput[32:], crypto.Keccak256(payloadBytes))
return crypto.Keccak256Hash(msgInput[:]) return crypto.Keccak256Hash(msgInput[:]), nil
} }
func BlockSigningHash(cfg *rollup.Config, payloadBytes []byte) common.Hash { func BlockSigningHash(cfg *rollup.Config, payloadBytes []byte) (common.Hash, error) {
return SigningHash(SigningDomainBlocksV1, cfg.L2ChainID, payloadBytes) return SigningHash(SigningDomainBlocksV1, cfg.L2ChainID, payloadBytes)
} }
...@@ -52,7 +55,10 @@ func (s *LocalSigner) Sign(ctx context.Context, domain [32]byte, chainID *big.In ...@@ -52,7 +55,10 @@ func (s *LocalSigner) Sign(ctx context.Context, domain [32]byte, chainID *big.In
if s.priv == nil { if s.priv == nil {
return nil, errors.New("signer is closed") return nil, errors.New("signer is closed")
} }
signingHash := SigningHash(domain, chainID, encodedMsg) signingHash, err := SigningHash(domain, chainID, encodedMsg)
if err != nil {
return nil, err
}
signature, err := crypto.Sign(signingHash[:], s.priv) signature, err := crypto.Sign(signingHash[:], s.priv)
if err != nil { if err != nil {
return nil, err return nil, err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment