code: func (p *Pss) process(pssmsg *PssMsg, raw bool, prox bool) error {
  	metrics.GetOrRegisterCounter("pss.process", nil).Inc(1)
  
  	var err error
  	var recvmsg *whisper.ReceivedMessage
  	var payload []byte
  	var from PssAddress
  	var asymmetric bool
  	var keyid string
  	var keyFunc func(envelope *whisper.Envelope) (*whisper.ReceivedMessage, string, PssAddress, error)
  
  	envelope := pssmsg.Payload
  	psstopic := Topic(envelope.Topic)
  
  	if raw {
  		payload = pssmsg.Payload.Data
  	} else {
  		if pssmsg.isSym() {
  			keyFunc = p.processSym
  		} else {
  			asymmetric = true
  			keyFunc = p.processAsym
  		}
  
  		recvmsg, keyid, from, err = keyFunc(envelope)
  		if err != nil {
  			return errors.New("Decryption failed")
  		}
  		payload = recvmsg.Payload
  	}
  
  	if len(pssmsg.To) < addressLength || prox {
  		err = p.enqueue(pssmsg)
  	}
  	p.executeHandlers(psstopic, payload, from, raw, prox, asymmetric, keyid)
  	return err
  }
docs: // Entry point to processing a message for which the current node can be the intended recipient.
  // Attempts symmetric and asymmetric decryption with stored keys.
  // Dispatches message to all handlers matching the message topic