public virtual void EncryptionAlgorithm_InputStreamThenOuputStreamProducesEquivalentData(Stream testData)
        {
            var originalDataStream = new MemoryStream();

            testData.CopyTo(originalDataStream);
            originalDataStream.Position = 0;

            var options = GenerateEncryptionOptions(EncryptionType);
            EncryptionAlgorithm algorithm = GetAlgorithm(options, "~password!!");

            var encryptedMemoryStream = new MemoryStream();

            using (Stream encryptorStream = algorithm.CreateOutputStream(encryptedMemoryStream, true, 4096))
            {
                originalDataStream.CopyTo(encryptorStream);
            }

            var decryptedData = new MemoryStream();

            encryptedMemoryStream.Position = 0;
            using (Stream decrytorStream = algorithm.CreateInputStream(encryptedMemoryStream, true))
            {
                decrytorStream.CopyTo(decryptedData);
            }

            Assert.AreEqual(originalDataStream.Length, decryptedData.Length);
            CollectionAssert.AreEqual(originalDataStream.ToArray(), decryptedData.ToArray());
        }