private async Task AssertFileEncryption(int fileLength, bool async) { byte[] iv = CryptoRandom.NextBytesStatic(16); byte[] key = CryptoRandom.NextBytesStatic(32); string plainTextFile = WriteToTempFile(fileLength); string encryptedFile = Path.GetRandomFileName(); string decryptedFile = Path.GetRandomFileName(); if (async) { await AesFileEncrytion.EncryptAsync(plainTextFile, encryptedFile, key, iv, true); await AesFileEncrytion.DecryptAsync(encryptedFile, decryptedFile, key, iv, true); } else { AesFileEncrytion.Encrypt(plainTextFile, encryptedFile, key, iv, true); AesFileEncrytion.Decrypt(encryptedFile, decryptedFile, key, iv, true); } try { AssertFileContent(plainTextFile, decryptedFile); } finally { File.Delete(plainTextFile); File.Delete(encryptedFile); File.Delete(decryptedFile); } }
//[Fact] //public async Task GigabyteEncryptedFileWithPasswordCanBeDecrypted() //{ // string file = $"D:\\testtime - {Guid.NewGuid()}.txt"; // File.Create(file); // Stopwatch sw = new Stopwatch(); // sw.Start(); // await AssertFileEncryptionWithPassword(370 * 1024 * 1024, true); // sw.Stop(); // File.AppendAllText(file, $"elapsed {sw.Elapsed.TotalMinutes}:{sw.Elapsed.Seconds}"); // sw.Restart(); // await AssertFileEncryptionWithPassword(370 * 1024 * 1024, false); // Console.WriteLine($"not async gigabyte write {sw.Elapsed}"); // sw.Stop(); //} private async Task AssertFileEncryptionWithPassword(int fileLength, bool async) { string pass = PasswordGenerator.GenerateStatic(); string plainTextFile = WriteToTempFile(fileLength); string encryptedFile = Path.GetRandomFileName(); string decryptedFile = Path.GetRandomFileName(); if (async) { await AesFileEncrytion.EncryptWithPasswordAsync(plainTextFile, encryptedFile, pass, true); await AesFileEncrytion.DecryptWithPasswordAsync(encryptedFile, decryptedFile, pass, true); } else { AesFileEncrytion.EncryptWithPassword(plainTextFile, encryptedFile, pass, true); AesFileEncrytion.DecryptWithPassword(encryptedFile, decryptedFile, pass, true); } try { AssertFileContent(plainTextFile, decryptedFile); } finally { File.Delete(plainTextFile); File.Delete(encryptedFile); File.Delete(decryptedFile); } }