code: func ContentHash(r io.Reader) (string, error) {
  	buf := make([]byte, hashBlockSize)
  	resultHash := sha256.New()
  	n, err := r.Read(buf)
  	if err != nil && err != io.EOF {
  		return "", err
  	}
  	if n > 0 {
  		bufHash := sha256.Sum256(buf[:n])
  		resultHash.Write(bufHash[:])
  	}
  	for n == hashBlockSize && err == nil {
  		n, err = r.Read(buf)
  		if err != nil && err != io.EOF {
  			return "", err
  		}
  		if n > 0 {
  			bufHash := sha256.Sum256(buf[:n])
  			resultHash.Write(bufHash[:])
  		}
  	}
  	return fmt.Sprintf("%x", resultHash.Sum(nil)), nil
  }
docs: // ContentHash returns the Dropbox content_hash for a io.Reader.
  // See https://www.dropbox.com/developers/reference/content-hash