code: func newAuthReader(akey []byte, data, adata io.Reader, streaming bool) io.Reader {
  	ar := authReader{
  		data:  data,
  		adata: adata,
  		mac:   hmac.New(sha1.New, akey),
  		err:   nil,
  		auth:  false,
  	}
  	if streaming {
  		return &ar
  	}
  	return &bufferedAuthReader{
  		ar,
  		new(bytes.Buffer),
  	}
  }
docs: // newAuthReader returns either a buffered or streaming authentication reader.
  // Buffered authentication is recommended. Streaming authentication is only
  // recommended if: 1. you buffer the data yourself and wait for authentication
  // before streaming to another source such as the network, or 2. you just don't
  // care about authenticating unknown ciphertext before use :).