public SIPAuthorisationDigest(SIPAuthorisationHeadersEnum authorisationType, string realm, string username, string password, string uri, string nonce, string request) { AuthorisationType = authorisationType; Realm = realm; Username = username; Password = password; URI = uri; Nonce = nonce; RequestType = request; }
public SIPAuthorisationDigest( SIPAuthorisationHeadersEnum authorisationType, string realm, string username, string password, string uri, string nonce, string request, DigestAlgorithmsEnum hashAlgorithm = DigestAlgorithmsEnum.MD5) { AuthorisationType = authorisationType; Realm = realm; Username = username; Password = password; URI = uri; Nonce = nonce; RequestType = request; DigestAlgorithm = hashAlgorithm; }
public static SIPAuthenticationHeader ParseSIPAuthenticationHeader(SIPAuthorisationHeadersEnum authorizationType, string headerValue) { try { SIPAuthenticationHeader authHeader = new SIPAuthenticationHeader(); authHeader.SIPDigest = SIPAuthorisationDigest.ParseAuthorisationDigest(authorizationType, headerValue); return authHeader; } catch { throw new ApplicationException("Error parsing SIP authentication header request, " + headerValue); } }
public SIPAuthenticationHeader(SIPAuthorisationHeadersEnum authorisationType, string realm, string nonce) { SIPDigest = new SIPAuthorisationDigest(authorisationType); SIPDigest.Realm = realm; SIPDigest.Nonce = nonce; }
public static SIPAuthorisationDigest ParseAuthorisationDigest(SIPAuthorisationHeadersEnum authorisationType, string authorisationRequest) { SIPAuthorisationDigest authRequest = new SIPAuthorisationDigest(authorisationType); string noDigestHeader = Regex.Replace(authorisationRequest, @"^\s*Digest\s*", "", RegexOptions.IgnoreCase); string[] headerFields = noDigestHeader.Split(','); if (headerFields != null && headerFields.Length > 0) { foreach (string headerField in headerFields) { int equalsIndex = headerField.IndexOf('='); if (equalsIndex != -1 && equalsIndex < headerField.Length) { string headerName = headerField.Substring(0, equalsIndex).Trim(); string headerValue = headerField.Substring(equalsIndex + 1).Trim(m_headerFieldRemoveChars); if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_REALM_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Realm = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_NONCE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Nonce = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_USERNAME_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Username = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_RESPONSE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Response = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_URI_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.URI = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_CNONCE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Cnonce = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_NONCECOUNT_KEY + "$", RegexOptions.IgnoreCase).Success) { Int32.TryParse(headerValue, out authRequest.NonceCount); } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_QOP_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Qop = headerValue.ToLower(); } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_OPAQUE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Opaque = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_ALGORITHM_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Algorithhm = headerValue; } } } } return(authRequest); }
public SIPAuthorisationDigest(SIPAuthorisationHeadersEnum authorisationType) { AuthorisationType = authorisationType; }
public static SIPAuthorisationDigest ParseAuthorisationDigest(SIPAuthorisationHeadersEnum authorisationType, string authorisationRequest) { SIPAuthorisationDigest authRequest = new SIPAuthorisationDigest(authorisationType); string noDigestHeader = Regex.Replace(authorisationRequest, @"^\s*Digest\s*", "", RegexOptions.IgnoreCase); string[] headerFields = noDigestHeader.Split(','); if (headerFields != null && headerFields.Length > 0) { foreach (string headerField in headerFields) { int equalsIndex = headerField.IndexOf('='); if (equalsIndex != -1 && equalsIndex < headerField.Length) { string headerName = headerField.Substring(0, equalsIndex).Trim(); string headerValue = headerField.Substring(equalsIndex + 1).Trim(m_headerFieldRemoveChars); if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_REALM_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Realm = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_NONCE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Nonce = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_USERNAME_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Username = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_RESPONSE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Response = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_URI_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.URI = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_CNONCE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Cnonce = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_NONCECOUNT_KEY + "$", RegexOptions.IgnoreCase).Success) { Int32.TryParse(headerValue, out authRequest.NonceCount); } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_QOP_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Qop = headerValue.ToLower(); } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_OPAQUE_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Opaque = headerValue; } else if (Regex.Match(headerName, "^" + AuthHeaders.AUTH_ALGORITHM_KEY + "$", RegexOptions.IgnoreCase).Success) { authRequest.Algorithhm = headerValue; } } } } return authRequest; }
public SIPAuthorisationDigest(SIPAuthorisationHeadersEnum authorisationType, DigestAlgorithmsEnum hashAlgorithm = DigestAlgorithmsEnum.MD5) { AuthorisationType = authorisationType; DigestAlgorithm = hashAlgorithm; }
public string GetDigest() { // Just to make things difficult For some authorisation requests the header changes when the authenticated response is generated. if (AuthorisationType == SIPAuthorisationHeadersEnum.ProxyAuthenticate) { AuthorisationResponseType = SIPAuthorisationHeadersEnum.ProxyAuthorization; } else if (AuthorisationType == SIPAuthorisationHeadersEnum.WWWAuthenticate) { AuthorisationResponseType = SIPAuthorisationHeadersEnum.Authorize; } // If the authorisation header has specified quality of protection equal to "auth" a client nonce needs to be supplied. string nonceCountStr = null; if (Qop == QOP_AUTHENTICATION_VALUE) { NonceCount = (NonceCount != 0) ? NonceCount : NONCE_DEFAULT_COUNT; nonceCountStr = GetPaddedNonceCount(NonceCount); if (Cnonce == null || Cnonce.Trim().Length == 0) { Cnonce = Crypto.GetRandomInt().ToString(); } } if (Nonce == null) { Nonce = Crypto.GetRandomString(12); } if (Password != null) { return(HTTPDigest.DigestCalcResponse( Username, Realm, Password, URI, Nonce, nonceCountStr, Cnonce, Qop, RequestType, DigestAlgorithm)); } else if (HA1 != null) { return(HTTPDigest.DigestCalcResponse( HA1, URI, Nonce, nonceCountStr, Cnonce, Qop, RequestType, DigestAlgorithm)); } else { throw new ApplicationException("SIP authorisation digest cannot be calculated. No password or HA1 available."); } }