Exemplo n.º 1
0
        void backupKeysToServer()
        {
            // Creates key and encrypts w/ password
            PasswordBasedKeyHelper passHelper = new PasswordBasedKeyHelper("restoration" + mainUser.user_id);

            passHelper.CreateKey(suppliedRestorePassword, mainUser.email);
            suppliedRestorePassword = "";

            // Creates dict of chatname:symkey
            Dictionary <string, string> keysBackup = new Dictionary <string, string>();
            var chatKeyValue = myChats.Keys.ToArray <string>();

            for (int i = 0; i < chatKeyValue.Length; i++)
            {
                if (!myChats[chatKeyValue[i]].hasKey())
                {
                    continue;
                }
                keysBackup[chatKeyValue[i]] = myChats[chatKeyValue[i]].getSharableKey();
            }

            // Serializes the keys and encrypts them
            var serializedKeyPairs          = JsonConvert.SerializeObject(keysBackup);
            var encryptedSerializedKeyPairs = passHelper.EncryptDataToString(serializedKeyPairs);

            string message = "{\"access_id\": \"" + this.access_id + "\", \"username\": \"" + mainUser.username + "\", \"backupData\": \"" + encryptedSerializedKeyPairs + "\"}";

            serverConnection.WriteMessage("backupKeys", message);
        }
Exemplo n.º 2
0
        void restoreKeysResponse(object sender, EventArgs e)
        {
            int messageIndex = serverConnection.unreadMessages.Count - 1;

            if (messageIndex < 0)
            {
                return;
            }
            JObject message = JObject.Parse(serverConnection.unreadMessages[messageIndex]);
            string  type    = serverConnection.interpretMessageType(message);

            if (type == "restoreKeys")
            {
                // Gets data
                string encryptedSerializedKeys = message[type].ToString();

                // Creates password helper. suppliedRestorePassword must be supplied
                PasswordBasedKeyHelper passHelper = new PasswordBasedKeyHelper("restoration" + mainUser.user_id);
                passHelper.CreateKey(suppliedRestorePassword, mainUser.email);

                // Deletes from memory
                suppliedRestorePassword = "";

                // Deserialies and decryptes the keys
                string decryptedSerializedKeys            = passHelper.DecryptDataFromString(encryptedSerializedKeys);
                Dictionary <string, string> chatsKeysPair = JsonConvert.DeserializeObject <Dictionary <string, string> >(decryptedSerializedKeys);

                // Puts keys into chat objects
                var chatNames = chatsKeysPair.Keys.ToArray <string>();
                for (int i = 0; i < chatNames.Length; i++)
                {
                    var name   = chatNames[i];
                    var symKey = chatsKeysPair[name];
                    myChats[name].loadChatKey(symKey);
                }

                // Saves to storage
                saveChatsAndUsersToStorage();
            }
        }