code: func RegisterProtocol(ps *Pss, topic *Topic, spec *protocols.Spec, targetprotocol *p2p.Protocol, options *ProtocolParams) (*Protocol, error) {
  	if !options.Asymmetric && !options.Symmetric {
  		return nil, fmt.Errorf("specify at least one of asymmetric or symmetric messaging mode")
  	}
  	pp := &Protocol{
  		Pss:          ps,
  		proto:        targetprotocol,
  		topic:        topic,
  		spec:         spec,
  		pubKeyRWPool: make(map[string]p2p.MsgReadWriter),
  		symKeyRWPool: make(map[string]p2p.MsgReadWriter),
  		Asymmetric:   options.Asymmetric,
  		Symmetric:    options.Symmetric,
  	}
  	return pp, nil
  }
docs: // Activates devp2p emulation over a specific pss topic
  //
  // One or both encryption schemes must be specified. If
  // only one is specified, the protocol will not be valid
  // for the other, and will make the message handler
  // return errors