Ejemplo n.º 1
0
        public void startChatHandshake()
        {
            m_memStreamer    = new MemoryStream();
            m_binryFormatter = new BinaryFormatter();
            clientPrivateData user = ClientAllData.Instance.getMyClient();

            m_myUseruser  = ClientAllData.Instance.getMyClient();
            m_localPort   = m_myUseruser.m_localPort;
            m_partnerPort = m_userPort.port;
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");

            ipPartnerEndPointSend = new IPEndPoint(ipAddress, m_partnerPort);
            ipPartnerEndPointRcv  = new IPEndPoint(ipAddress, m_partnerPort);

            udpClient = null;
            try
            {
                udpClient = new UdpClient(m_localPort);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            if (m_userPort.isMaster)
            {
                masterHandshake();
            }
            else
            {
                remoteHandshake();
            }
        }
Ejemplo n.º 2
0
        // requst to connect to Ftp service
        private void getSessionKeyForFtpWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            clientPrivateData clientData = ClientAllData.Instance.getMyClient();

            //send requst for Auth
            FtpKeyRequst ftpKeyRequst = new FtpKeyRequst(clientData.username);

            FtpTicketResponse ftpTicketResponse = kdcProxy.RequstSessionKeyForFtpConnection(ftpKeyRequst); // blocking

            if (ftpTicketResponse == null)
            {
                return;
            }

            byte[] sessionKey = CAes.SimpleDecrypt(ftpTicketResponse.SessionKeyClientFTPEncryptedForClient, clientData.m_kdcAsSessionKey, clientData.m_kdcAsSessionKey);

            ClientAllData.Instance.getMyClient().m_ftpSessionKey = sessionKey;

            FtpTicketRequst ftpTicketRequst = new FtpTicketRequst();

            ftpTicketRequst.UserNameencryptedForFtpWithFtpKey  = ftpTicketResponse.UserNameencryptedForFtpWithFtpKey;
            ftpTicketRequst.SessionKeyClientFTPEncryptedForFTP = ftpTicketResponse.SessionKeyClientFTPEncryptedForFTP;

            ftpTicketRequst.UserNameencryptedForFtpWithSessionKey = CAes.SimpleEncrypt(clientData.username, sessionKey, sessionKey);
            ftpProxy.requstForConnectionWithSessionKey(ftpTicketRequst); // non blocking

            //TODO: should set timer for time out
        }
Ejemplo n.º 3
0
        private void login_worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            clientPrivateData user = ClientAllData.Instance.getMyClient();

            if (user != null && user.m_loginSucccess)
            {
                MessageBox.Show("conected succesfully");
                WindowsMgr.Instance.addWindow(Constants.MAIN_WINDOW, new MainWin()).Show();
                WindowsMgr.Instance.CloseWindow(Constants.LOGIN_WINDOW);
            }
            else
            {
                MessageBox.Show("Wrong user name or password try again!");
                this.setEnable();
            }
        }
Ejemplo n.º 4
0
        private void register_worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            clientPrivateData user = ClientAllData.Instance.getMyClient();

            if (user != null)
            {
                MessageBox.Show("Registerd with user " + user.username);
                if (!logInWorker.IsBusy)
                {
                    logInWorker.RunWorkerAsync();
                }
            }

            else
            {
                MessageBox.Show("somthing went wrong, try Agian!");
                this.setEnable();
            }
        }
Ejemplo n.º 5
0
        private void getSessionKeyWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            string partnerUsernameInvoked = string.Empty;


            Dispatcher.BeginInvoke(new Action(delegate
            {
                partnerUsernameInvoked = connectedUserComboBox.Text;
            }));


            Thread.Sleep(100);

            clientPrivateData user       = ClientAllData.Instance.getMyClient();
            CSessionParams    sessionPrm = new CSessionParams();

            sessionPrm.client1UserName = user.username;
            sessionPrm.client2UserName = partnerUsernameInvoked;
            CSessionKeyResponse sessionRespons = kdcProxy.GetSessionKeyForChatConnection(sessionPrm); // blocking

            if (sessionRespons == null)
            {
                //report error
                return;
            }


            Thread.Sleep(200);


            setChatSessionKeyEvnt?.Invoke(this, sessionRespons);

            /*byte[] sessionKey = CAes.SimpleDecrypt(sessionRespons.m_sessionKeyA, user.m_kdcAsSessionKey, user.m_kdcAsSessionKey);
             * byte[] sessionPartnerData = CAes.SimpleDecrypt(sessionRespons.m_sessionKeyB, user.m_kdcAsSessionKey, user.m_kdcAsSessionKey);
             * session sessionData = ClientAllData.Instance.getSession(partnerUsernameInvoked);
             * sessionData.setSessionKey(sessionKey, sessionPartnerData);
             * sessionData.startSending();*/
        }
Ejemplo n.º 6
0
        private void login_worker_DoWork(object sender, DoWorkEventArgs e)
        {
            bool        looginSuccess   = false;
            IKdcService proxy           = KdcProxy.Instance.GetProxy();
            string      usernameInvoked = string.Empty;
            string      passwordInvoked = string.Empty;

            Dispatcher.BeginInvoke(new Action(delegate
            {
                usernameInvoked = txtUserName.Text;
                passwordInvoked = txtPassWord.Password.ToString();
            }));


            Thread.Sleep(100);
            // try to log in to the server
            ClientAllData.Instance.setMyUsername(usernameInvoked);
            CKdcToClientLogInData logginData = proxy.LogInApp(usernameInvoked);

            // parse the result
            if (logginData != null)
            {
                string passWordHash = string.Empty;
                using (MD5 md5Hash = MD5.Create())
                {
                    passWordHash = CMd5hash.GetMd5Hash(md5Hash, passwordInvoked);
                }

                string retDecUserName = CAes.SimpleDecryptWithPassword(logginData.m_username, passWordHash);
                byte[] retDecPassword = CAes.SimpleDecryptWithPassword(logginData.m_kdcAsSessionKey, passWordHash);
                byte[] localPortByte  = CAes.SimpleDecryptWithPassword(logginData.m_localPort, passWordHash);
                int    localPort      = BitConverter.ToInt32(localPortByte, 0);

                if (retDecUserName == usernameInvoked)
                {
                    string retChallenge = CAes.SimpleDecryptWithPassword(logginData.m_challenge, passWordHash);

                    CLogInStatus logginStatus = new CLogInStatus();
                    logginStatus.m_username  = retDecUserName;
                    logginStatus.m_logInFail = false;
                    logginStatus.m_challenge = CAes.SimpleEncrypt(retChallenge + retChallenge, retDecPassword, retDecPassword);
                    if (proxy.SetLoginStatus(logginStatus))
                    {
                        clientPrivateData myClient = ClientAllData.Instance.getMyClient();
                        myClient.username          = retDecUserName;
                        myClient.m_kdcAsSessionKey = retDecPassword;
                        myClient.m_loginSucccess   = true;
                        myClient.m_localPort       = localPort;
                        looginSuccess = true;
                    }
                }
            }

            if (!looginSuccess)
            {
                CLogInStatus logginStatus = new CLogInStatus();
                logginStatus.m_username  = usernameInvoked;
                logginStatus.m_logInFail = true;
                proxy.SetLoginStatus(logginStatus);
            }
        }
Ejemplo n.º 7
0
 internal void setMyClient(clientPrivateData user)
 {
     m_myUser = user;
 }
Ejemplo n.º 8
0
 private ClientAllData()
 {
     m_myUser         = new clientPrivateData();
     m_partnerUser    = new List <string>();
     m_partnerSession = new Dictionary <string, session>();
 }