code: func (a *announceData) checkSignature(id enode.ID, update keyValueMap) error {
  	var sig []byte
  	if err := update.get("sign", &sig); err != nil {
  		return err
  	}
  	rlp, _ := rlp.EncodeToBytes(announceBlock{a.Hash, a.Number, a.Td})
  	recPubkey, err := crypto.SigToPub(crypto.Keccak256(rlp), sig)
  	if err != nil {
  		return err
  	}
  	if id == enode.PubkeyToIDV4(recPubkey) {
  		return nil
  	}
  	return errors.New("wrong signature")
  }
docs: // checkSignature verifies if the block announcement has a valid signature by the given pubKey