code: func composeContentBlocks4(w io.Writer, contentData []byte, transformedKey []byte) {
  	offset := 0
  	for offset < len(contentData) {
  		var hash []byte
  		var length uint32
  		var data []byte
  
  		if len(contentData[offset:]) >= blockSplitRate {
  			data = append(data, contentData[offset:]...)
  		} else {
  			data = append(data, contentData...)
  		}
  		length = uint32(len(data))
  		mac := hmac.New(sha256.New, transformedKey)
  		mac.Write(data)
  		hash = mac.Sum(nil)
  
  		binary.Write(w, binary.LittleEndian, hash)
  		binary.Write(w, binary.LittleEndian, length)
  		binary.Write(w, binary.LittleEndian, data)
  		offset = offset + blockSplitRate
  	}
  	binary.Write(w, binary.LittleEndian, [32]byte{})
  	binary.Write(w, binary.LittleEndian, uint32(0))
  }
docs: // composeContentBlocks4 composes every content block into a HMAC-LENGTH-DATA block scheme (Kdbx v4)