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(); } }