code: func Key(subseed Trits, securityLevel SecurityLevel, spongeFunc ...SpongeFunction) (Trits, error) {
  	h := GetSpongeFunc(spongeFunc, kerl.NewKerl)
  	defer h.Reset()
  
  	keyLength := KeyFragmentLength * int(securityLevel)
  	key := make(Trits, keyLength)
  
  	err := h.Absorb(subseed)
  	if err != nil {
  		return nil, err
  	}
  
  	key, err = h.Squeeze(keyLength)
  	if err != nil {
  		return nil, err
  	}
  
  	h.Reset()
  
  	for i := 0; i < KeyFragmentLength*int(securityLevel); i += HashTrinarySize {
  		if err := h.Absorb(key[i : i+HashTrinarySize]); err != nil {
  			return nil, err
  		}
  
  		buf, err := h.Squeeze(HashTrinarySize)
  		if err != nil {
  			return nil, err
  		}
  		copy(key[i:], buf)
  
  		h.Reset()
  	}
  
  	return key, nil
  }
docs: // Key computes a new private key from the given subseed using the given security level.
  // Optionally takes the SpongeFunction to use. Default is Kerl.