code: func parseAuthorizationHeader(value string) *authorization {
  	if value == "" {
  		return nil
  	}
  
  	parts := strings.SplitN(value, " ", 2)
  	if parts[0] != "Digest" || len(parts) != 2 {
  		return nil
  	}
  
  	authInfo := parts[1]
  	auth := parseDictHeader(authInfo)
  
  	algo := MD5
  	if strings.ToLower(auth["algorithm"]) == "sha-256" {
  		algo = SHA256
  	}
  
  	return &authorization{
  		algorithm: algo,
  		cnonce:    auth["cnonce"],
  		nc:        auth["nc"],
  		nonce:     auth["nonce"],
  		opaque:    auth["opaque"],
  		qop:       auth["qop"],
  		realm:     auth["realm"],
  		response:  auth["response"],
  		uri:       auth["uri"],
  		username:  auth["username"],
  	}
  }
docs: // parseAuthorizationHeader parses an Authorization header into an
  // Authorization struct, given a an authorization header like:
  //
  //    Authorization: Digest username="Mufasa",
  //                         realm="testrealm@host.com",
  //                         nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
  //                         uri="/dir/index.html",
  //                         qop=auth,
  //                         nc=00000001,
  //                         cnonce="0a4f113b",
  //                         response="6629fae49393a05397450978507c4ef1",
  //                         opaque="5ccc069c403ebaf9f0171e9517f40e41"
  //
  // If the given value does not contain a Digest authorization header, or is in
  // some other way malformed, nil is returned.
  //
  // Example from Wikipedia: https://en.wikipedia.org/wiki/Digest_access_authentication#Example_with_explanation