From 68c1170250709088169012447548f83c5ad597c9 Mon Sep 17 00:00:00 2001 From: whyrusleeping Date: Wed, 9 Oct 2019 10:32:08 +0900 Subject: [PATCH] compute signatures over msg cids instead of raw bytes --- chain/gen/gen.go | 7 +------ chain/messagepool.go | 10 ++-------- chain/types/signature_cgo.go | 2 ++ node/impl/full/wallet.go | 7 ++----- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/chain/gen/gen.go b/chain/gen/gen.go index 5cee19efb..8116560b6 100644 --- a/chain/gen/gen.go +++ b/chain/gen/gen.go @@ -336,12 +336,7 @@ func (cg *ChainGen) getRandomMessages() ([]*types.SignedMessage, error) { GasPrice: types.NewInt(0), } - unsigned, err := msg.Serialize() - if err != nil { - return nil, err - } - - sig, err := cg.w.Sign(context.TODO(), cg.banker, unsigned) + sig, err := cg.w.Sign(context.TODO(), cg.banker, msg.Cid().Bytes()) if err != nil { return nil, err } diff --git a/chain/messagepool.go b/chain/messagepool.go index b241a9176..b4bacd7a5 100644 --- a/chain/messagepool.go +++ b/chain/messagepool.go @@ -1,7 +1,6 @@ package chain import ( - "encoding/base64" "sync" pubsub "github.com/libp2p/go-libp2p-pubsub" @@ -82,14 +81,9 @@ func (mp *MessagePool) Add(m *types.SignedMessage) error { } func (mp *MessagePool) addLocked(m *types.SignedMessage) error { - data, err := m.Message.Serialize() - if err != nil { - return err - } + log.Debugf("mpooladd: %s %s", m.Message.From, m.Message.Nonce) - log.Debugf("mpooladd: %d %s", m.Message.Nonce, base64.StdEncoding.EncodeToString(data)) - - if err := m.Signature.Verify(m.Message.From, data); err != nil { + if err := m.Signature.Verify(m.Message.From, m.Message.Cid().Bytes()); err != nil { log.Warnf("mpooladd signature verification failed: %s", err) return err } diff --git a/chain/types/signature_cgo.go b/chain/types/signature_cgo.go index e811a0f24..aa9c8585e 100644 --- a/chain/types/signature_cgo.go +++ b/chain/types/signature_cgo.go @@ -30,6 +30,7 @@ func (s *Signature) Verify(addr address.Address, msg []byte) error { } if addr != maybeaddr { + panic("stop here") return fmt.Errorf("signature did not match") } @@ -45,6 +46,7 @@ func (s *Signature) Verify(addr address.Address, msg []byte) error { copy(sig[:], s.Data) if !bls.Verify(sig, digests, pubkeys) { + panic("stop here") return fmt.Errorf("bls signature failed to verify") } diff --git a/node/impl/full/wallet.go b/node/impl/full/wallet.go index 6f02f7ff5..81adf41ad 100644 --- a/node/impl/full/wallet.go +++ b/node/impl/full/wallet.go @@ -40,12 +40,9 @@ func (a *WalletAPI) WalletSign(ctx context.Context, k address.Address, msg []byt } func (a *WalletAPI) WalletSignMessage(ctx context.Context, k address.Address, msg *types.Message) (*types.SignedMessage, error) { - msgbytes, err := msg.Serialize() - if err != nil { - return nil, err - } + mcid := msg.Cid() - sig, err := a.WalletSign(ctx, k, msgbytes) + sig, err := a.WalletSign(ctx, k, mcid.Bytes()) if err != nil { return nil, xerrors.Errorf("failed to sign message: %w", err) }