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(); } }
// 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 }
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(); } }
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(); } }
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();*/ }
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); } }
internal void setMyClient(clientPrivateData user) { m_myUser = user; }
private ClientAllData() { m_myUser = new clientPrivateData(); m_partnerUser = new List <string>(); m_partnerSession = new Dictionary <string, session>(); }