code: func (m *hashReader) Read(p []byte) (n int, err error) {
  	n, err = m.source.Read(p)
  	if n > 0 {
  		// hash.Hash assures us that this can never return an error.
  		m.hash.Write(p[0:n])
  		m.length += int64(n)
  	}
  	return
  }
docs: // Reads from the source, and returns the values upstream after adding the data
  // to the hash.