public void EncryptedDataWithPasswordBytes() { var encryptedData = new EncryptedDataWithPassword(Encoding.UTF8.GetBytes(TestString), TestPassword); var encryptedDataString = encryptedData.ToString(); var decryptedTestBytes = EncryptedDataWithPassword.DecryptDataAsBytes(encryptedDataString, TestPassword); Assert.AreEqual(TestString, Encoding.UTF8.GetString(decryptedTestBytes)); }
private bool RecoverDeviceData(int serverAccountId, string recoveryKeyHash) { var model = AccountModel.GetModel(serverAccountId); var apiClient = GetApiClientForAccount(serverAccountId); GetUserResponse userInfo; try { userInfo = apiClient.GetUser(new GetUserRequest()); } catch (RequestException) { return(false); } foreach (var serverDatabase in userInfo.Links) { var localDatabase = model.Links.Query().FirstOrDefault(r => r.Identifier == serverDatabase.Identifier); if (localDatabase == null) { // Create the database locally var newLocalDatabaseId = model.Links.Create(new Link { Identifier = serverDatabase.Identifier }); localDatabase = model.Links.Query().First(r => r.Id == newLocalDatabaseId); } var entriesRequest = new ServerAPIRequests.GetDatabaseEntries { LinkIdentifier = serverDatabase.Identifier }; ServerAPIRequests.GetDatabaseEntries.ResponseParams entriesResponse; try { entriesResponse = entriesRequest.GetResponse(apiClient); } catch (RequestException) { return(false); } foreach (var serverEntry in entriesResponse.Entries) { var localEntry = model.Entries.Query().FirstOrDefault( r => r.LinkId == localDatabase.Id && r.Identifier == serverEntry.EntryIdentifier); if (localEntry == null) { var newLocalEntryId = model.Entries.Create(new Entry { LinkId = localDatabase.Id, Identifier = serverEntry.EntryIdentifier }); localEntry = model.Entries.Query().First(r => r.Id == newLocalEntryId); } var secretsRequest = new ServerAPIRequests.GetDatabaseEntryDeviceSecrets { LinkIdentifier = serverDatabase.Identifier, EntryIdentifier = serverEntry.EntryIdentifier }; ServerAPIRequests.GetDatabaseEntryDeviceSecrets.ResponseParams secretsResponse; try { secretsResponse = secretsRequest.GetResponse(apiClient); } catch (RequestException) { return(false); } foreach (var serverSecret in secretsResponse.Secrets) { var localSecret = model.EntriesSharedSecrets.Query().FirstOrDefault( r => r.EntryId == localEntry.Id && r.SecretIdentifier == serverSecret.SecretIdentifier); if (localSecret != null) { continue; } var decryptedData = EncryptedDataWithPassword.DecryptDataAsBytes( serverSecret.Data, recoveryKeyHash); var dataJson = AllAuth.Lib.Utils.Compression.Decompress(decryptedData); var data = Newtonsoft.Json.JsonConvert.DeserializeObject <EntrySharedSecretData>(dataJson); data.RemoveId(); var newSecretDataId = model.EntriesSharedSecretsData.Create(data); model.EntriesSharedSecrets.Create(new EntrySharedSecret { EntryId = localEntry.Id, SecretIdentifier = serverSecret.SecretIdentifier, EntrySecretDataId = newSecretDataId }); } } } return(true); }