From cdea232f2fc94823a7257cbdd228fe38570385cd Mon Sep 17 00:00:00 2001 From: sta Date: Wed, 2 Jul 2014 21:22:39 +0900 Subject: [PATCH] Modified ToDigestString method --- .../Net/AuthenticationChallenge.cs | 23 ++++++++-- websocket-sharp/Net/AuthenticationResponse.cs | 43 +++++++++---------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/websocket-sharp/Net/AuthenticationChallenge.cs b/websocket-sharp/Net/AuthenticationChallenge.cs index 7daaac52..d7afe0df 100644 --- a/websocket-sharp/Net/AuthenticationChallenge.cs +++ b/websocket-sharp/Net/AuthenticationChallenge.cs @@ -109,9 +109,26 @@ namespace WebSocketSharp.Net internal string ToDigestString () { - var output = new StringBuilder (64); - output.AppendFormat ("Digest realm=\"{0}\"", Parameters["realm"]); - output.AppendFormat (", nonce=\"{0}\"", Parameters["nonce"]); + var output = new StringBuilder (128); + + var domain = Parameters["domain"]; + if (domain != null) + output.AppendFormat ( + "Digest realm=\"{0}\", domain=\"{1}\", nonce=\"{2}\"", + Parameters["realm"], + domain, + Parameters["nonce"]); + else + output.AppendFormat ( + "Digest realm=\"{0}\", nonce=\"{1}\"", Parameters["realm"], Parameters["nonce"]); + + var opaque = Parameters["opaque"]; + if (opaque != null) + output.AppendFormat (", opaque=\"{0}\"", opaque); + + var stale = Parameters["stale"]; + if (stale != null) + output.AppendFormat (", stale={0}", stale); var algo = Parameters["algorithm"]; if (algo != null) diff --git a/websocket-sharp/Net/AuthenticationResponse.cs b/websocket-sharp/Net/AuthenticationResponse.cs index 671c487d..5b7b2893 100644 --- a/websocket-sharp/Net/AuthenticationResponse.cs +++ b/websocket-sharp/Net/AuthenticationResponse.cs @@ -180,8 +180,8 @@ namespace WebSocketSharp.Net if (qops != null) { if (qops.Split (',').Contains (qop => qop.Trim ().ToLower () == "auth")) { Parameters["qop"] = "auth"; - Parameters["nc"] = String.Format ("{0:x8}", ++_nonceCount); Parameters["cnonce"] = CreateNonceValue (); + Parameters["nc"] = String.Format ("{0:x8}", ++_nonceCount); } else { Parameters["qop"] = null; @@ -205,8 +205,8 @@ namespace WebSocketSharp.Net var uri = parameters["uri"]; var algo = parameters["algorithm"]; var qop = parameters["qop"]; - var nc = parameters["nc"]; var cnonce = parameters["cnonce"]; + var nc = parameters["nc"]; var method = parameters["method"]; var a1 = algo != null && algo.ToLower () == "md5-sess" @@ -279,30 +279,29 @@ namespace WebSocketSharp.Net internal string ToDigestString () { - var res = new StringBuilder (64); - res.AppendFormat ("username=\"{0}\"", Parameters["username"]); - res.AppendFormat (", realm=\"{0}\"", Parameters["realm"]); - res.AppendFormat (", nonce=\"{0}\"", Parameters["nonce"]); - res.AppendFormat (", uri=\"{0}\"", Parameters["uri"]); - - var algo = Parameters["algorithm"]; - if (algo != null) - res.AppendFormat (", algorithm={0}", algo); - - res.AppendFormat (", response=\"{0}\"", Parameters["response"]); - - var qop = Parameters["qop"]; - if (qop != null) { - res.AppendFormat (", qop={0}", qop); - res.AppendFormat (", nc={0}", Parameters["nc"]); - res.AppendFormat (", cnonce=\"{0}\"", Parameters["cnonce"]); - } + var output = new StringBuilder (256); + output.AppendFormat ( + "Digest username=\"{0}\", realm=\"{1}\", nonce=\"{2}\", uri=\"{3}\", response=\"{4}\"", + Parameters["username"], + Parameters["realm"], + Parameters["nonce"], + Parameters["uri"], + Parameters["response"]); var opaque = Parameters["opaque"]; if (opaque != null) - res.AppendFormat (", opaque=\"{0}\"", opaque); + output.AppendFormat (", opaque=\"{0}\"", opaque); - return "Digest " + res.ToString (); + var algo = Parameters["algorithm"]; + if (algo != null) + output.AppendFormat (", algorithm={0}", algo); + + var qop = Parameters["qop"]; + if (qop != null) + output.AppendFormat ( + ", qop={0}, cnonce=\"{1}\", nc={2}", qop, Parameters["cnonce"], Parameters["nc"]); + + return output.ToString (); } #endregion