示例#1
0
 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);
 }
示例#2
0
        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);
        }
示例#3
0
        //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);
        }
示例#4
0
 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);
 }
示例#5
0
        //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);
            }
        }
示例#6
0
        public static string SendMessageAndWaitResponseCrypted(string message, Networker networker, CryptoManager cryptoManager)
        {
            string encryptedResponseB64 = networker.SendMessageAndWaitResponse(cryptoManager.EncryptWithSessionB64(message));

            return(cryptoManager.DecryptWithSessionB64(encryptedResponseB64));
        }
示例#7
0
 string SendMessageAndWaitResponseCrypted(string message, CryptoManager cryptoManager)
 {
     return(ChatManager.SendMessageAndWaitResponseCrypted(message, m_networker, cryptoManager));
 }