code: func NewPss(k *network.Kademlia, params *PssParams) (*Pss, error) {
  	if params.privateKey == nil {
  		return nil, errors.New("missing private key for pss")
  	}
  	cap := p2p.Cap{
  		Name:    pssProtocolName,
  		Version: pssVersion,
  	}
  	ps := &Pss{
  		Kademlia: k,
  		KeyStore: loadKeyStore(),
  
  		privateKey: params.privateKey,
  		quitC:      make(chan struct{}),
  
  		fwdPool:         make(map[string]*protocols.Peer),
  		fwdCache:        make(map[pssDigest]pssCacheEntry),
  		cacheTTL:        params.CacheTTL,
  		msgTTL:          params.MsgTTL,
  		paddingByteSize: defaultPaddingByteSize,
  		capstring:       cap.String(),
  		outbox:          make(chan *PssMsg, defaultOutboxCapacity),
  
  		handlers:         make(map[Topic]map[*handler]bool),
  		topicHandlerCaps: make(map[Topic]*handlerCaps),
  
  		hashPool: sync.Pool{
  			New: func() interface{} {
  				return sha3.NewLegacyKeccak256()
  			},
  		},
  	}
  
  	for i := 0; i < hasherCount; i++ {
  		hashfunc := storage.MakeHashFunc(storage.DefaultHash)()
  		ps.hashPool.Put(hashfunc)
  	}
  
  	return ps, nil
  }
docs: // Creates a new Pss instance.
  //
  // In addition to params, it takes a swarm network Kademlia
  // and a FileStore storage for message cache storage.