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