public void CreateEncryptionKey_WithValidSpecifiedKeySize_DoesNotCreateNullKey(int keySize)
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey(keySize);
     Assert.NotNull(key);
     Assert.NotEmpty(key);
     Assert.False(Array.TrueForAll(key, k => k == 0));
 }
 public void CreateEncryptionKey_CreatesNonNullKey()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     Assert.NotNull(key);
     Assert.NotEmpty(key);
     Assert.False(Array.TrueForAll(key, k => k == 0));
 }
        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 void CreateEncryptionKey_CreatesDifferentKeysWithMultipleCalls()
 {
     byte[] key1 = EncryptionHelpers.CreateEncryptionKey();
     byte[] key2 = EncryptionHelpers.CreateEncryptionKey();
     Assert.NotNull(key1);
     Assert.NotEmpty(key1);
     Assert.NotEqual(key1, key2);
 }
        public async Task EncryptDataAsync_WithValidData_ReturnsEncryptedArray()
        {
            byte[] key  = EncryptionHelpers.CreateEncryptionKey();
            byte[] data = new byte[128];
            new Random().NextBytes(data);
            byte[] result = await EncryptionHelpers.EncryptDataAsync(data, key);

            Assert.NotEqual(data, result);
        }
        public async Task DecryptDataAsync_WithValidData_ReturnsEncryptedArray()
        {
            byte[] key       = EncryptionHelpers.CreateEncryptionKey();
            byte[] data      = new byte[128];
            byte[] encrypted = await EncryptionHelpers.EncryptDataAsync(data, key);

            byte[] result = await EncryptionHelpers.DecryptDataAsync(encrypted, key);

            Assert.Equal(data, result);
        }
Exemple #7
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 void EncryptDecrypt_NonAllocating_Works()
        {
            byte[] key  = EncryptionHelpers.CreateEncryptionKey(128);
            string data = "Hello, Encryption World!";

            byte[] plaintext = System.Text.Encoding.UTF8.GetBytes(data);
            using (IMemoryOwner <byte> encrypted = MemoryPool <byte> .Shared.Rent(128))
                using (IMemoryOwner <byte> decrypted = MemoryPool <byte> .Shared.Rent(128))
                {
                    int encryptedCount = EncryptionHelpers.EncryptData(plaintext.AsMemory(), encrypted.Memory, key);
                    int decryptedCount = EncryptionHelpers.DecryptData(encrypted.Memory.Slice(0, encryptedCount), decrypted.Memory, key);
                    Assert.Equal(plaintext.Length, decryptedCount);

                    string final = System.Text.Encoding.UTF8.GetString(decrypted.Memory.Span.Slice(0, decryptedCount));
                    Assert.Equal(data, final);
                }
        }
        public async Task EncryptingAndDecrypting_WithReadOnlyMemory_Works()
        {
            byte[] randBytes = new byte[512];
            Random rnd       = new Random();

            rnd.NextBytes(randBytes);
            ReadOnlyMemory <byte> data = new ReadOnlyMemory <byte>(randBytes);

            byte[] key       = EncryptionHelpers.CreateEncryptionKey();
            byte[] encrypted = await EncryptionHelpers.EncryptDataAsync(data, key);

            ReadOnlyMemory <byte> encryptedData = new ReadOnlyMemory <byte>(encrypted);

            byte[] decrypted = await EncryptionHelpers.DecryptDataAsync(encrypted, key);

            Assert.Equal(randBytes, decrypted);
        }
        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 EncryptDataAsync_WithEmptyEncryptionKey_Throws()
 {
     byte[] data = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.EncryptDataAsync(data, Array.Empty <byte>()));
 }
 public async Task EncryptDataAsync_WithNullEncryptionKey_Throws()
 {
     byte[] data = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.EncryptDataAsync(data, null));
 }
 public void CreateEncryptionKey_WithInvalidSpecifiedKeySize_Throws(int keySize)
 {
     Assert.Throws <CryptographicException>(() => EncryptionHelpers.CreateEncryptionKey(keySize));
 }
 public async Task DecryptDataAsync_WithNullData_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.DecryptDataAsync(null, key));
 }
 public async Task DecryptDataAsync_WithEmptyData_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.DecryptDataAsync(Array.Empty <byte>(), key));
 }
 public async Task GetDecryptionStreamAsync_WithNullStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(key, null));
 }
 public async Task GetDecryptionStreamAsync_WithNonReadableStream_Throws()
 {
     byte[] key = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.GetDecryptionStreamAsync(key, new NonReadableStream()));
 }