code: func SignatureFragment(normalizedBundleHashFragment Trits, keyFragment Trits, spongeFunc ...SpongeFunction) (Trits, error) {
  	sigFrag := make(Trits, len(keyFragment))
  	copy(sigFrag, keyFragment)
  
  	h := GetSpongeFunc(spongeFunc, kerl.NewKerl)
  	defer h.Reset()
  
  	for i := 0; i < KeySegmentsPerFragment; i++ {
  		hash := sigFrag[i*HashTrinarySize : (i+1)*HashTrinarySize]
  
  		to := MaxTryteValue - normalizedBundleHashFragment[i]
  		for j := 0; j < int(to); j++ {
  			if err := h.Absorb(hash); err != nil {
  				return nil, err
  			}
  			var err error
  			hash, err = h.Squeeze(HashTrinarySize)
  			if err != nil {
  				return nil, err
  			}
  			h.Reset()
  		}
  
  		copy(sigFrag[i*HashTrinarySize:], hash)
  	}
  
  	return sigFrag, nil
  }
docs: // SignatureFragment returns signed fragments using the given bundle hash and key fragment.
  // Optionally takes the SpongeFunction to use. Default is Kerl.