示例#1
0
        //public void WriteMsAuthentication(HeaderNames header, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, bool version, bool crlf)
        //{
        //    ByteArrayPart name;

        //    switch (header)
        //    {
        //        case HeaderNames.ProxyAuthenticate:
        //            name = C.Proxy_Authenticate;
        //            break;

        //        case HeaderNames.WwwAuthenticate:
        //            name = C.WWW_Authenticate;
        //            break;

        //        case HeaderNames.AuthenticationInfo:
        //            name = C.Authentication_Info;
        //            break;

        //        case HeaderNames.ProxyAuthenticationInfo:
        //            name = C.Proxy_Authentication_Info;
        //            break;

        //        default:
        //            throw new ArgumentException();
        //    }

        //    Write(name, C.HCOLON, C.SP, scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

        //    if (scheme == AuthSchemes.Kerberos)
        //        Write(C.targetname, C.EQUAL, C.DQUOTE, C.sip, C.SLASH, targetname, C.DQUOTE, C.COMMA);
        //    else
        //        Write(C.targetname, C.EQUAL, C.DQUOTE, targetname, C.DQUOTE, C.COMMA);

        //    Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);

        //    if (version == true)
        //        Write(C.COMMA, C.version, C.EQUAL, 3);

        //    Write(crlf == true ? C.CRLF : C.COMMA);
        //}

        //public void WriteMsAuthenticationInfo(ByteArrayPart opaque, int snum, ByteArrayPart srand, ByteArrayPart rspauth)
        //{
        //    Write(C.opaque, C.EQUAL, C.DQUOTE, opaque, C.DQUOTE, C.COMMA);
        //    Write(C.qop, C.EQUAL, C.DQUOTE, C.auth, C.DQUOTE, C.COMMA);
        //    Write(C.snum, C.EQUAL, C.DQUOTE, snum, C.DQUOTE, C.COMMA);
        //    Write(C.srand, C.EQUAL, C.DQUOTE, srand, C.DQUOTE, C.COMMA);
        //    Write(C.rspauth, C.EQUAL, C.DQUOTE, rspauth, C.DQUOTE, C.CRLF);
        //}

        //public void WriteMsAuthentication(ByteArrayPart opaque, ByteArrayPart gssapiData)
        //{
        //    Write(C.opaque, C.EQUAL, C.DQUOTE, opaque, C.DQUOTE, C.COMMA);
        //    Write(C.gssapi_data, C.EQUAL, C.DQUOTE, gssapiData, C.DQUOTE, C.CRLF);
        //}

        public void WriteAuthenticationInfo(bool proxy, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, int opaque, int snum, int srand, ArraySegment <byte> rspauth)
        {
            Write(proxy ? C.Proxy_Authentication_Info : C.Authentication_Info, C.HCOLON, C.SP,
                  scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

            Write(C.targetname, C.EQUAL, C.DQUOTE);
            if (scheme == AuthSchemes.Kerberos)
            {
                Write(C.sip, C.SLASH);
            }
            Write(targetname, C.DQUOTE, C.COMMA);

            Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);

            Write(C.COMMA, C.opaque, C.EQUAL, C.DQUOTE);
            WriteAsHex8(opaque);
            Write(C.DQUOTE);

            Write(C.COMMA, C.qop, C.EQUAL, C.DQUOTE, C.auth, C.DQUOTE);

            Write(C._snum__, snum, C.DQUOTE);

            Write(C._srand__);
            WriteAsHex8(srand);
            Write(C.DQUOTE);

            Write(C._rspauth__);
            WriteAsHex(rspauth);
            Write(C.DQUOTE);

            Write(C.CRLF);
        }
示例#2
0
        public bool TryGetCredentialsByTargetname(AuthSchemes scheme, ByteArrayPart targetname, out Credentials credentials, out bool proxy)
        {
            int length = targetname.Length + ((scheme == AuthSchemes.Kerberos) ? 4 : 0);

            for (int i = 0; i < Count.AuthorizationCount; i++)
            {
                if (Authorization[i].AuthScheme == scheme)
                {
                    if (Authorization[i].Targetname.Length == length && Authorization[i].Targetname.EndWith(targetname))
                    {
                        credentials = Authorization[i];
                        proxy       = false;
                        return(true);
                    }
                }
            }

            for (int i = 0; i < Count.ProxyAuthorizationCount; i++)
            {
                if (ProxyAuthorization[i].AuthScheme == scheme)
                {
                    if (ProxyAuthorization[i].Targetname.Length == length && ProxyAuthorization[i].Targetname.EndWith(targetname))
                    {
                        credentials = ProxyAuthorization[i];
                        proxy       = true;
                        return(true);
                    }
                }
            }

            credentials = new Credentials();
            proxy       = false;
            return(false);
        }
示例#3
0
        public Credentials GetCredentialsByRealm(AuthSchemes scheme, ByteArrayPart realm)
        {
            Credentials credentials;

            TryGetCredentialsByRealm(scheme, realm, out credentials);

            return(credentials);
        }
示例#4
0
        public Credentials GetCredentialsByTargetname(AuthSchemes scheme, ByteArrayPart targetname, out bool proxy)
        {
            Credentials credentials;

            TryGetCredentialsByTargetname(scheme, targetname, out credentials, out proxy);

            return(credentials);
        }
示例#5
0
 public void SetDefaultValue(int index)
 {
     this.AuthScheme    = AuthSchemes.None;
     this.AuthAlgorithm = AuthAlgorithms.None;
     this.Qop.SetDefaultValue(index);
     this.Nonce.SetDefaultValue(index);
     this.Realm.SetDefaultValue(index);
     this.Opaque.SetDefaultValue(index);
     this.Stale = false;
 }
            public SecurityAssociation(int opaque, AuthSchemes scheme, ByteArrayPart targetname)            //, SafeCredHandle credentials)
            {
                this.scheme        = scheme;
                this.targetname    = targetname.DeepCopy();
                this.Opaque        = opaque;
                this.contextHandle = new SafeCtxtHandle();

                this.expireTime = DateTime.MaxValue;
                this.idleTime   = DateTime.MaxValue;
                this.idleTimeUpdatedByExpires = false;

                this.outSnum = 0;
                this.inCnum  = 0;
                //_SlidingWindow.SetAll(false);
            }
                public static int Generate(AuthSchemes scheme, int srand, int snum, ByteArrayPart targetname, SipMessageWriter writer, ref byte[] bytes)
                {
                    int length = 0;

                    Write(scheme.ToUtf8Bytes(), ref bytes, ref length);
                    WriteAsHex8(srand, ref bytes, ref length);
                    Write(snum, ref bytes, ref length);
                    Write(SipMicrosoftAuthentication.realm, ref bytes, ref length);

                    if (scheme == AuthSchemes.Kerberos)
                    {
                        Write(sip_, targetname, ref bytes, ref length);
                    }
                    else
                    {
                        Write(targetname, ref bytes, ref length);
                    }

                    Write(writer.CallId, ref bytes, ref length);
                    Write(writer.CSeq, ref bytes, ref length);
                    Write(writer.Method.ToByteArrayPart(), ref bytes, ref length);
                    Write(writer.FromAddrspec, ref bytes, ref length);
                    Write(writer.FromTag, ref bytes, ref length);
                    Write(writer.ToAddrspec, ref bytes, ref length);
                    Write(writer.ToTag, ref bytes, ref length);
                    // TODO: sip P-Asserted-Identity
                    WriteEmpty(ref bytes, ref length);
                    // TODO: tel P-Asserted-Identity
                    WriteEmpty(ref bytes, ref length);

                    if (writer.Expires != int.MinValue)
                    {
                        Write(writer.Expires, ref bytes, ref length);
                    }
                    else
                    {
                        WriteEmpty(ref bytes, ref length);
                    }

                    if (writer.IsResponse)
                    {
                        Write(writer.StatusCode, ref bytes, ref length);
                    }

                    //SIPServer.Tracer.Info("SignatureBuffer:" + Encoding.UTF8.GetString(bytes, 0, length));

                    return(length);
                }
示例#8
0
public void SetDefaultValue()
{
AuthScheme = AuthSchemes.None;
AuthAlgorithm = AuthAlgorithms.None;
NonceCountBytes.SetDefaultValue();
MessageQop.SetDefaultValue();
DigestUri.SetDefaultValue();
Nonce.SetDefaultValue();
Realm.SetDefaultValue();
Cnonce.SetDefaultValue();
Opaque.SetDefaultValue();
Response.SetDefaultValue();
Username.SetDefaultValue();
NonceCount = int.MinValue;
HasResponse = false;
OnSetDefaultValue();
}
                public static int Generate(AuthSchemes scheme, int srand, int snum, ByteArrayPart targetname, SipMessageReader reader, ref byte[] bytes)
                {
                    int length = 0;

                    Write(scheme.ToUtf8Bytes(), ref bytes, ref length);
                    WriteAsHex8(srand, ref bytes, ref length);
                    Write(snum, ref bytes, ref length);
                    Write(SipMicrosoftAuthentication.realm, ref bytes, ref length);

                    if (scheme == AuthSchemes.Kerberos)
                    {
                        Write(sip_, targetname, ref bytes, ref length);
                    }
                    else
                    {
                        Write(targetname, ref bytes, ref length);
                    }

                    Write(reader.CallId, ref bytes, ref length);
                    Write(reader.CSeq.Value, ref bytes, ref length);
                    Write(reader.Method.ToByteArrayPart(), ref bytes, ref length);
                    Write(reader.From.AddrSpec.Value, ref bytes, ref length);
                    Write(reader.From.Tag, ref bytes, ref length);
                    Write(reader.To.AddrSpec.Value, ref bytes, ref length);
                    Write(reader.To.Tag, ref bytes, ref length);
                    // TODO: sip P-Asserted-Identity
                    WriteEmpty(ref bytes, ref length);
                    // TODO: tel P-Asserted-Identity
                    WriteEmpty(ref bytes, ref length);

                    if (reader.Expires != int.MinValue)
                    {
                        Write(reader.Expires, ref bytes, ref length);
                    }
                    else
                    {
                        WriteEmpty(ref bytes, ref length);
                    }

                    if (reader.IsResponse)
                    {
                        Write(reader.StatusCode.Value, ref bytes, ref length);
                    }

                    return(length);
                }
示例#10
0
        public void WriteAuthenticateMs(bool proxy, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, int opaque)
        {
            Write(proxy ? C.Proxy_Authenticate : C.WWW_Authenticate, C.HCOLON, C.SP, scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

            Write(C.targetname, C.EQUAL, C.DQUOTE);
            if (scheme == AuthSchemes.Kerberos)
            {
                Write(C.sip, C.SLASH);
            }
            Write(targetname, C.DQUOTE, C.COMMA);

            Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);
            Write(C.COMMA, C.version, C.EQUAL, 3);

            Write(C.COMMA, C.opaque, C.EQUAL, C.DQUOTE);
            WriteAsHex8(opaque);
            Write(C.DQUOTE, C.CRLF);
        }
示例#11
0
 public void SetDefaultValue(int index)
 {
     this.AuthScheme    = AuthSchemes.None;
     this.AuthAlgorithm = AuthAlgorithms.None;
     this.NonceCountBytes.SetDefaultValue(index);
     this.MessageQop.SetDefaultValue(index);
     this.DigestUri.SetDefaultValue(index);
     this.Realm.SetDefaultValue(index);
     this.Opaque.SetDefaultValue(index);
     this.Nonce.SetDefaultValue(index);
     this.Cnonce.SetDefaultValue(index);
     this.Response.SetDefaultValue(index);
     this.Username.SetDefaultValue(index);
     this.Targetname.SetDefaultValue(index);
     this.GssapiData.SetDefaultValue(index);
     this.NonceCount    = -2147483648;
     this.Cnum          = -2147483648;
     this.Crand         = -2147483648;
     this.Version       = -2147483648;
     this.HasResponse   = false;
     this.HasGssapiData = false;
 }
示例#12
0
        public bool TryGetCredentialsByRealm(AuthSchemes scheme, ByteArrayPart realm, out Credentials credentials)
        {
            for (int i = 0; i < Count.AuthorizationCount; i++)
            {
                if (Authorization[i].AuthScheme == scheme && Authorization[i].Realm.Equals(realm))
                {
                    credentials = Authorization[i];
                    return(true);
                }
            }

            for (int i = 0; i < Count.ProxyAuthorizationCount; i++)
            {
                if (ProxyAuthorization[i].AuthScheme == scheme && ProxyAuthorization[i].Realm.Equals(realm))
                {
                    credentials = ProxyAuthorization[i];
                    return(true);
                }
            }

            credentials = new Credentials();
            return(false);
        }
		public bool TryGetCredentialsByRealm(AuthSchemes scheme, ByteArrayPart realm, out Credentials credentials)
		{
			for (int i = 0; i < Count.AuthorizationCount; i++)
			{
				if (Authorization[i].AuthScheme == scheme && Authorization[i].Realm.Equals(realm))
				{
					credentials = Authorization[i];
					return true;
				}
			}

			for (int i = 0; i < Count.ProxyAuthorizationCount; i++)
			{
				if (ProxyAuthorization[i].AuthScheme == scheme && ProxyAuthorization[i].Realm.Equals(realm))
				{
					credentials = ProxyAuthorization[i];
					return true;
				}
			}

			credentials = new Credentials();
			return false;
		}
		public bool TryGetCredentialsByTargetname(AuthSchemes scheme, ByteArrayPart targetname, out Credentials credentials, out bool proxy)
		{
			int length = targetname.Length + ((scheme == AuthSchemes.Kerberos) ? 4 : 0);

			for (int i = 0; i < Count.AuthorizationCount; i++)
			{
				if (Authorization[i].AuthScheme == scheme)
					if (Authorization[i].Targetname.Length == length && Authorization[i].Targetname.EndWith(targetname))
					{
						credentials = Authorization[i];
						proxy = false;
						return true;
					}
			}

			for (int i = 0; i < Count.ProxyAuthorizationCount; i++)
			{
				if (ProxyAuthorization[i].AuthScheme == scheme)
					if (ProxyAuthorization[i].Targetname.Length == length && ProxyAuthorization[i].Targetname.EndWith(targetname))
					{
						credentials = ProxyAuthorization[i];
						proxy = true;
						return true;
					}
			}

			credentials = new Credentials();
			proxy = false;
			return false;
		}
		public Credentials GetCredentialsByTargetname(AuthSchemes scheme, ByteArrayPart targetname, out bool proxy)
		{
			Credentials credentials;
			TryGetCredentialsByTargetname(scheme, targetname, out credentials, out proxy);

			return credentials;
		}
示例#16
0
 public static byte[] ToUtf8Bytes(this AuthSchemes schemes)
 {
     return(Converters.authSchemes[(int)schemes]);
 }
示例#17
0
		//public void WriteMsAuthentication(HeaderNames header, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, bool version, bool crlf)
		//{
		//    ByteArrayPart name;

		//    switch (header)
		//    {
		//        case HeaderNames.ProxyAuthenticate:
		//            name = C.Proxy_Authenticate;
		//            break;

		//        case HeaderNames.WwwAuthenticate:
		//            name = C.WWW_Authenticate;
		//            break;

		//        case HeaderNames.AuthenticationInfo:
		//            name = C.Authentication_Info;
		//            break;

		//        case HeaderNames.ProxyAuthenticationInfo:
		//            name = C.Proxy_Authentication_Info;
		//            break;

		//        default:
		//            throw new ArgumentException();
		//    }

		//    Write(name, C.HCOLON, C.SP, scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

		//    if (scheme == AuthSchemes.Kerberos)
		//        Write(C.targetname, C.EQUAL, C.DQUOTE, C.sip, C.SLASH, targetname, C.DQUOTE, C.COMMA);
		//    else
		//        Write(C.targetname, C.EQUAL, C.DQUOTE, targetname, C.DQUOTE, C.COMMA);

		//    Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);

		//    if (version == true)
		//        Write(C.COMMA, C.version, C.EQUAL, 3);

		//    Write(crlf == true ? C.CRLF : C.COMMA);
		//}

		//public void WriteMsAuthenticationInfo(ByteArrayPart opaque, int snum, ByteArrayPart srand, ByteArrayPart rspauth)
		//{
		//    Write(C.opaque, C.EQUAL, C.DQUOTE, opaque, C.DQUOTE, C.COMMA);
		//    Write(C.qop, C.EQUAL, C.DQUOTE, C.auth, C.DQUOTE, C.COMMA);
		//    Write(C.snum, C.EQUAL, C.DQUOTE, snum, C.DQUOTE, C.COMMA);
		//    Write(C.srand, C.EQUAL, C.DQUOTE, srand, C.DQUOTE, C.COMMA);
		//    Write(C.rspauth, C.EQUAL, C.DQUOTE, rspauth, C.DQUOTE, C.CRLF);
		//}

		//public void WriteMsAuthentication(ByteArrayPart opaque, ByteArrayPart gssapiData)
		//{
		//    Write(C.opaque, C.EQUAL, C.DQUOTE, opaque, C.DQUOTE, C.COMMA);
		//    Write(C.gssapi_data, C.EQUAL, C.DQUOTE, gssapiData, C.DQUOTE, C.CRLF);
		//}

		public void WriteAuthenticationInfo(bool proxy, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, int opaque, int snum, int srand, ArraySegment<byte> rspauth)
		{
			Write(proxy ? C.Proxy_Authentication_Info : C.Authentication_Info, C.HCOLON, C.SP,
				scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

			Write(C.targetname, C.EQUAL, C.DQUOTE);
			if (scheme == AuthSchemes.Kerberos)
				Write(C.sip, C.SLASH);
			Write(targetname, C.DQUOTE, C.COMMA);

			Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);

			Write(C.COMMA, C.opaque, C.EQUAL, C.DQUOTE);
			WriteAsHex8(opaque);
			Write(C.DQUOTE);

			Write(C.COMMA, C.qop, C.EQUAL, C.DQUOTE, C.auth, C.DQUOTE);

			Write(C._snum__, snum, C.DQUOTE);

			Write(C._srand__);
			WriteAsHex8(srand);
			Write(C.DQUOTE);

			Write(C._rspauth__);
			WriteAsHex(rspauth);
			Write(C.DQUOTE);

			Write(C.CRLF);
		}
示例#18
0
		public void WriteAuthenticateMs(bool proxy, AuthSchemes scheme, ByteArrayPart targetname, ByteArrayPart realm, int opaque, ArraySegment<byte> gssapiData)
		{
			Write(proxy ? C.Proxy_Authenticate : C.WWW_Authenticate, C.HCOLON, C.SP, scheme == AuthSchemes.Ntlm ? C.NTLM : C.Kerberos, C.SP);

			Write(C.targetname, C.EQUAL, C.DQUOTE);
			if (scheme == AuthSchemes.Kerberos)
				Write(C.sip, C.SLASH);
			Write(targetname, C.DQUOTE, C.COMMA);

			Write(C.realm, C.EQUAL, C.DQUOTE, realm, C.DQUOTE);
			Write(C.COMMA, C.version, C.EQUAL, 3);

			Write(C.COMMA, C.opaque, C.EQUAL, C.DQUOTE);
			WriteAsHex8(opaque);
			Write(C.DQUOTE, C.COMMA);

			Write(C.gssapi_data, C.EQUAL, C.DQUOTE);
			WriteAsBase64(gssapiData);
			Write(C.DQUOTE, C.CRLF);
		}
		public Credentials GetCredentialsByRealm(AuthSchemes scheme, ByteArrayPart realm)
		{
			Credentials credentials;
			TryGetCredentialsByRealm(scheme, realm, out credentials);

			return credentials;
		}