init commit
diff --git a/digest_auth_client.go b/digest_auth_client.go
new file mode 100644
index 0000000..474b3e4
--- /dev/null
+++ b/digest_auth_client.go
@@ -0,0 +1,63 @@
+package digest_auth_client
+
+import (
+	"crypto/md5"
+	"crypto/sha256"
+	"fmt"
+	"hash"
+	"io"
+	"strings"
+)
+
+type AuthorizationHeader struct {
+	Algorithm string // unquoted
+	Body      string // request value
+	Cnonce    string // quoted
+	Method    string // request value
+	Nc        string // unquoted
+	Opaque    string // quoted
+	Qop       string // unquoted
+	Realm     string // quoted
+	Resposne  string // quoted
+	Uri       string // quoted
+	Userhash  string // quoted
+	Username  string // quoted
+	Username_ string // quoted
+}
+
+func (ah *AuthorizationHeader) ComputeResponse() AuthorizationHeader {
+	return *ah
+}
+
+func (ah *AuthorizationHeader) ComputeA1() AuthorizationHeader {
+	return *ah
+}
+
+func (ah *AuthorizationHeader) ComputeA2() (s string) {
+
+	if strings.Compare(ah.Qop, "auth") == 0 || strings.Compare(ah.Qop, "") == 0 {
+		s = fmt.Sprintf("%s:%s", ah.Method, ah.Uri)
+	}
+
+	if strings.Compare(ah.Qop, "auth-int") == 0 {
+		s = fmt.Sprintf("%s:%s", s, ah.Hash(ah.Body))
+	}
+
+	return
+}
+
+func (ah *AuthorizationHeader) Hash(a string) (s string) {
+
+	var h hash.Hash
+
+	if strings.Compare(ah.Algorithm, "MD5") == 0 {
+		h = md5.New()
+	} else if strings.Compare(ah.Algorithm, "SHA-256") == 0 {
+		h = sha256.New()
+	}
+
+	io.WriteString(h, a)
+	s = string(h.Sum(nil))
+
+	return
+}