public Caller DigestValidateResponse(string company, string method, string response)
        {
            var digest = DigestHeader.Parse(response);

            var partialCaller = Find(new Caller
            {
                Company = company,
                Name    = digest.Username,
                KeyType = "Password"
            });

            if (partialCaller == null)
            {
                return(null);
            }

            if (partialCaller.KeyValue == null)
            {
                return(partialCaller);
            }

            digest.Password = partialCaller.KeyValue;
            digest.Nonce    = "test";

            if (digest.GetCalculatedResponse(method) != digest.Response)
            {
                return(null);
            }

            return(partialCaller);
        }
 public DigestHeader(DigestHeader copy)
 {
     foreach (var kv in copy._values)
     {
         _values.Add(kv.Key, kv.Value);
     }
 }
        public string DigestGenerateRequest(string realm)
        {
            var digest = new DigestHeader
            {
                Realm = realm,
                Nonce = "test"
            };

            return(digest.ServerResponseHeader);
        }
        public static DigestHeader Parse(string header)
        {
            if (!header.ToUpper().StartsWith("DIGEST"))
            {
                return(null);
            }
            var    credentials = new DigestHeader();
            string arguments   = header.Substring(6);

            string[] keyValues = arguments.Split(',');
            foreach (string kv in keyValues)
            {
                string[] parts = kv.Split(new[] { '=' }, 2);
                string   key   = parts[0].Trim(' ', '\t', '\r', '\n', '\"');
                string   value = parts[1].Trim(' ', '\t', '\r', '\n', '\"');
                credentials._values.Add(key, value);
            }
            return(credentials);
        }