public async Task GetEncryptionStreamAsync_WithValidData_WritesEncryptedData()
        {
            byte[] original = new byte[128];
            byte[] result;
            byte[] key = EncryptionHelpers.CreateEncryptionKey();
            new Random().NextBytes(original);
            using (MemoryStream ms = new MemoryStream())
            {
                using (Stream stream = await EncryptionHelpers.GetEncryptionStreamAsync(key, ms))
                {
                    await stream.WriteAsync(original, 0, original.Length);
                }

                result = ms.ToArray();
            }

            Assert.NotNull(result);
            Assert.NotEmpty(result);
            Assert.NotEqual(original, result);

            byte[] iv = new byte[16];
            Array.Copy(result, iv, 16);
            byte[] encrypted = new byte[result.Length - iv.Length];
            Array.Copy(result, encrypted, encrypted.Length);
            Assert.NotEqual(original, encrypted);
            Assert.Equal(result.Length, iv.Length + encrypted.Length);
        }
 public async Task GetEncryptionStreamAsync_WithNullEncryptionKey_Throws()
 {
     using (MemoryStream ms = new MemoryStream())
     {
         await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.GetEncryptionStreamAsync(null, ms));
     }
 }
        /// <summary>
        /// Opens a write-only stream to the given blob path.
        /// </summary>
        public override async Task <Stream?> GetBlobWriteStreamAsync(string path, bool createNewBlob = false)
        {
            Stream?underlying = await base.GetBlobWriteStreamAsync(path, createNewBlob);

            if (underlying == null)
            {
                return(null);
            }
            else
            {
                return(await EncryptionHelpers.GetEncryptionStreamAsync(_encryptionKey, underlying));
            }
        }
Ejemplo n.º 4
0
        public async Task EnsureDisposeWorks()
        {
            FieldInfo f;

            byte[] key = EncryptionHelpers.CreateEncryptionKey();
            using (MemoryStream ms = new MemoryStream())
            {
                CryptographicStream s = await EncryptionHelpers.GetEncryptionStreamAsync(key, ms);

                f = s.GetType().GetField("_underlyingStream", BindingFlags.NonPublic | BindingFlags.Instance);
                Assert.NotNull(f.GetValue(s));
                s.Dispose();
                Assert.Null(f.GetValue(s));
            }
        }
 public async Task GetEncryptionStreamAsync_WithNonWritableStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.GetEncryptionStreamAsync(key, new NonWritableStream()));
 }
 public async Task GetEncryptionStreamAsync_WithEmptyEncryptionKey_Throws()
 {
     using (MemoryStream ms = new MemoryStream())
     {
         await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.GetEncryptionStreamAsync(Array.Empty <byte>(), ms));
     }
 }
 public async Task GetEncryptionStreamAsync_WithNullStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.GetEncryptionStreamAsync(key, null));
 }