示例#1
0
        public bool SetLoginStatus(CLogInStatus logginStatus)
        {
            bool retVal = false;

            if (!users_list.ContainsKey(logginStatus.m_username))
            {
                return(retVal);
            }

            UserServiceData userData = users_list[logginStatus.m_username];

            if (userData != null)
            {
                if (!logginStatus.m_logInFail)
                {
                    string logginChalleng = CAes.SimpleDecrypt(logginStatus.m_challenge, userData.SessionKey, userData.SessionKey);
                    if (userData.logginChallenge == logginChalleng)
                    {
                        retVal = true;
                        sendNewUserToAllClients(logginStatus.m_username, 1000);
                    }
                }
                if (!retVal)
                {
                    users_list.Remove(logginStatus.m_username);
                }
            }
            return(retVal);
        }
示例#2
0
        public CSessionKeyResponse GetSessionKeyForChatConnection(CSessionParams sessionParams)
        {
            // get users from the data base
            User retUser1FromDB = m_DBservice.getUserByName(sessionParams.client1UserName);
            User retUser2FromDB = m_DBservice.getUserByName(sessionParams.client2UserName);

            UserServiceData localUser   = users_list[sessionParams.client1UserName];
            UserServiceData partnerUser = users_list[sessionParams.client2UserName];

            // check validity
            if (retUser1FromDB == null || retUser2FromDB == null || localUser == null || partnerUser == null)
            {
                if (retUser1FromDB == null)
                {
                    Console.Write(sessionParams.client1UserName + "not exist in DB");
                }
                if (retUser2FromDB == null)
                {
                    Console.Write(sessionParams.client2UserName + "not exist in DB");
                }
                if (localUser == null)
                {
                    Console.Write(sessionParams.client1UserName + "not logged in");
                }
                if (partnerUser == null)
                {
                    Console.Write(sessionParams.client2UserName + "not logged in");
                }
                return(null);
            }

            // genrate new session key
            byte[] sessionKey = CAes.NewKey();

            //encrypt Eka [ Ks ||  || Kb[Ks] ]

            byte[] encryptedDataForClientB = CAes.SimpleEncrypt(sessionKey, partnerUser.SessionKey, partnerUser.SessionKey); //Kb[Ks]
            byte[] keyA  = CAes.SimpleEncrypt(sessionKey, localUser.SessionKey, localUser.SessionKey);                       //Ka[Ks]
            byte[] keyAB = CAes.SimpleEncrypt(encryptedDataForClientB, localUser.SessionKey, localUser.SessionKey);          //Ka[clientB data]

            // set return value
            CSessionKeyResponse retVal = new CSessionKeyResponse();

            retVal.m_sessionKeyA = keyA;
            retVal.m_sessionKeyB = keyAB;

            users_list[sessionParams.client1UserName].clientKdcCallBack.startChatSession(retUser2FromDB.ID + 1100, retUser2FromDB.Name, true);
            users_list[sessionParams.client2UserName].clientKdcCallBack.startChatSession(retUser1FromDB.ID + 1100, retUser1FromDB.Name, false);

            return(retVal);
        }
示例#3
0
        public CKdcToClientLogInData LogInApp(string userName)
        {
            if (users_list.ContainsKey(userName))
            {
                Console.WriteLine("you already logged");
                return(null);
            }

            Console.WriteLine("LOGIN: NAME {0} ", userName);

            CKdcToClientLogInData msgKdcToClientLoggin = new CKdcToClientLogInData();

            User retUserFromDB = m_DBservice.getUserByName(userName);

            if (retUserFromDB != null)
            {
                byte[] userSessionKey = CAes.NewKey();
                string challenge      = Path.GetRandomFileName();
                int    port           = 1100 + retUserFromDB.ID;
                byte[] localPortByte  = BitConverter.GetBytes(port);

                msgKdcToClientLoggin.m_username        = CAes.SimpleEncryptWithPassword(userName, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_kdcAsSessionKey = CAes.SimpleEncryptWithPassword(userSessionKey, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_challenge       = CAes.SimpleEncryptWithPassword(challenge, retUserFromDB.PassWord);
                msgKdcToClientLoggin.m_localPort       = CAes.SimpleEncryptWithPassword(localPortByte, retUserFromDB.PassWord);

                UserServiceData userServiceData = new UserServiceData(userSessionKey, OperationContext.Current.GetCallbackChannel <IClientKdcCallBack>());
                userServiceData.logginChallenge = challenge + challenge;
                users_list.Add(userName, userServiceData);
            }
            else
            {
                msgKdcToClientLoggin = null;
            }

            return(msgKdcToClientLoggin);
        }