public async Task GetDecryptionStreamAsync_WithNullEncryptionKey_Throws()
 {
     using (MemoryStream ms = new MemoryStream())
     {
         await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(null, ms));
     }
 }
        /// <summary>
        /// Opens a read-only stream to the given blob path.
        /// </summary>
        public override async Task <Stream?> GetBlobReadStreamAsync(string path)
        {
            Stream?underlying = await base.GetBlobReadStreamAsync(path);

            if (underlying == null)
            {
                return(null);
            }
            else
            {
                Stream seekable = new MemoryStream();
                using (CryptographicStream s = await EncryptionHelpers.GetDecryptionStreamAsync(_encryptionKey, underlying))
                {
                    await s.CopyToAsync(seekable);

                    seekable.Seek(0, SeekOrigin.Begin);
                }
                return(seekable);
            }
        }
        public async Task GetDecryptionStreamAsync_WithValidData_WritesDecryptedData()
        {
            byte[] key      = EncryptionHelpers.CreateEncryptionKey();
            byte[] original = new byte[128];
            new Random().NextBytes(original);
            byte[] encrypted = await EncryptionHelpers.EncryptDataAsync(original, key);

            byte[] result;
            using (MemoryStream ms = new MemoryStream(encrypted))
                using (MemoryStream output = new MemoryStream())
                {
                    using (Stream stream = await EncryptionHelpers.GetDecryptionStreamAsync(key, ms))
                    {
                        await stream.CopyToAsync(output);
                    }

                    result = output.ToArray();
                }

            Assert.NotNull(result);
            Assert.NotEmpty(result);
            Assert.Equal(original, result);
        }
 public async Task GetDecryptionStreamAsync_WithNonReadableStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(key, new NonReadableStream()));
 }
 public async Task GetDecryptionStreamAsync_WithEmptyEncryptionKey_Throws()
 {
     using (MemoryStream ms = new MemoryStream())
     {
         await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(Array.Empty <byte>(), ms));
     }
 }
 public async Task GetDecryptionStreamAsync_WithNullStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(key, null));
 }