public ChatManager(Networker networker, CryptoManager cryptoManager) { m_networker = networker; m_cryptoManager = cryptoManager; m_cryptoManager.Id = 0; m_personalCryptoManagers = new Dictionary <string, CryptoManager>(); m_serverCheckThread = new Thread(ServerMessagesThread); m_serverCheckThread.Start(); }
// static functions //This function contains server-specific strings public static ChatManager TryRegister(Networker networker, string login, string password, out chatManagerError error) { error = chatManagerError.userAlreadyExists; ChatManager chatManager = TryStartChatManager(networker, String.Format("{0}&login={1}&password={2}", ServerSpecificStrings.MesageTypeRegister, login, password)); if (chatManager != null) { error = chatManagerError.noError; } return(chatManager); }
//This function contains server-specific strings public static ChatManager TryAuth(Networker networker, string login, string password, out chatManagerError error) { error = chatManagerError.failedToAuth; ChatManager chatManager = TryStartChatManager(networker, String.Format("{0}&login={1}&password={2}", ServerSpecificStrings.MesageTypeAuth, login, password)); if (chatManager != null) { chatManager.AddUserCredintals(login, password); error = chatManagerError.noError; } return(chatManager); }
//Estabilish crypto tunnel and save session keys to CryptoManager object static CryptoManager Handshake(Networker networker) { CryptoManager cryptoManager = null; string AESKey = CryptoManager.GetAESKeyB64(); string response = networker.SendMessageAndWaitResponse( CryptoManager.EncryptRSA2B64("message=handshake&key=" + AESKey) ); if (!String.IsNullOrEmpty(response)) { CryptoManager cryptoManagerTest = new CryptoManager(AESKey, response); string responseConnected = ChatManager.SendMessageAndWaitResponseCrypted(ServerSpecificStrings.MesageOk, networker, cryptoManagerTest); if (responseConnected.Equals(ServerSpecificStrings.MesageOk)) { cryptoManager = cryptoManagerTest; } } return(cryptoManager); }
private void bgWrkr_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; object tbToFound = null; object tblToFound = null; object tbpToFound = null; this.Dispatcher.Invoke(new Action(() => { tbToFound = FindName("ServerAddressTextBox"); tblToFound = FindName("LoginTexBox"); tbpToFound = FindName("PasswordBox"); })); if (tbToFound is TextBox && tblToFound is TextBox && tbpToFound is PasswordBox) { TextBox serverAddresTextBox = tbToFound as TextBox; TextBox loginTexBox = tblToFound as TextBox; PasswordBox passwordBox = tbpToFound as PasswordBox; string[] serverAddress = null; string login = ""; string password = ""; this.Dispatcher.Invoke(new Action(() => { serverAddress = serverAddresTextBox.Text.Split(':'); login = loginTexBox.Text; password = passwordBox.Password; })); if (Networker.TryConnect(serverAddress[0], Convert.ToInt32(serverAddress[1]))) { chatManagerError cmError; ChatManager cm = ServerConnectionHelper.TryAuth( new Networker(serverAddress[0], Convert.ToInt32(serverAddress[1])), login, password, out cmError); if (cm != null) { e.Result = cm; } } ; } }
//Trying to get positive response from server, if all OK, then create ChatManager //This function contains server-specific strings public static ChatManager TryStartChatManager(Networker networker, string serverRequest) { CryptoManager cryptoManager = Handshake(networker); if (cryptoManager != null) { //message = serverRequest string response = ChatManager.SendMessageAndWaitResponseCrypted(serverRequest, networker, cryptoManager); if (response.Equals(ServerSpecificStrings.MesageOk)) { return(new ChatManager(networker, cryptoManager)); } else { return(null); } } else { return(null); } }
public static string SendMessageAndWaitResponseCrypted(string message, Networker networker, CryptoManager cryptoManager) { string encryptedResponseB64 = networker.SendMessageAndWaitResponse(cryptoManager.EncryptWithSessionB64(message)); return(cryptoManager.DecryptWithSessionB64(encryptedResponseB64)); }