public bool SendChatMessage(ChatMessage message, string target) { if (m_personalCryptoManagers.ContainsKey(target)) { } else { string keyBased = CryptoManager.GetAESKeyB64(); string response = SendMessageAndWaitResponseCrypted(ServerSpecificStrings.SendSessionKeyToUser(m_userName, target, keyBased)); if (response.Equals(ServerSpecificStrings.MesageOk)) { return(StartNewChatSession(target, keyBased)); } } return(false); }
bool StartNewChatSession(string username, string aesKey = "") { string keyBased = String.IsNullOrEmpty(aesKey) ? CryptoManager.GetAESKeyB64() : aesKey; CryptoManager cm = new CryptoManager(keyBased); if (m_personalCryptoManagers.ContainsKey(username)) { m_personalCryptoManagers[username] = cm; } else { m_personalCryptoManagers.Add(username, cm); } return(true); }
//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); }
public bool AddChat(string chatname, string password) { if (String.IsNullOrEmpty(password)) { string keyBased = CryptoManager.GetAESKeyB64(); string response = SendMessageAndWaitResponseCrypted(ServerSpecificStrings.SendSessionKeyToUser(m_userName, chatname, keyBased)); if (response.Equals(ServerSpecificStrings.MesageOk)) { return(StartNewChatSession(chatname, keyBased)); } } else { string response = SendMessageAndWaitResponseCrypted(ServerSpecificStrings.SendMessageToEnterGroup(m_userName, chatname, password)); if (response.Equals(ServerSpecificStrings.MesageOk)) { return(true); } } return(false); }
//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)); }
string SendMessageAndWaitResponseCrypted(string message, CryptoManager cryptoManager) { return(ChatManager.SendMessageAndWaitResponseCrypted(message, m_networker, cryptoManager)); }