public void GenerateAesKeyTest(AesKeySize keySize) { AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(keySize); Assert.NotNull(encryptionKeyInfo.Key); Assert.NotNull(encryptionKeyInfo.IV); Assert.Equal((int)keySize / 8, encryptionKeyInfo.Key.Length); }
private void ExecuteAesEncryptionTest <TContext>(AesKeySize aesKeyType) where TContext : DatabaseContext { AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(aesKeyType); var provider = new AesProvider(encryptionKeyInfo.Key, encryptionKeyInfo.IV, CipherMode.CBC, PaddingMode.Zeros); var author = new AuthorEntity("John", "Doe", 42) { Books = new List <BookEntity>() { new BookEntity("Lorem Ipsum", 300), new BookEntity("Dolor sit amet", 390) } }; string authorEncryptedFirstName = provider.Encrypt(author.FirstName); string authorEncryptedLastName = provider.Encrypt(author.LastName); string firstBookEncryptedName = provider.Encrypt(author.Books.First().Name); string lastBookEncryptedName = provider.Encrypt(author.Books.Last().Name); using (var contextFactory = new DatabaseContextFactory()) { // Save data to an encrypted database context using (var dbContext = contextFactory.CreateContext <TContext>(provider)) { dbContext.Authors.Add(author); dbContext.SaveChanges(); } // Read encrypted data from normal context and compare with encrypted data. using (var dbContext = contextFactory.CreateContext <DatabaseContext>()) { var authorFromDb = dbContext.Authors.Include(x => x.Books).FirstOrDefault(); Assert.NotNull(authorFromDb); Assert.Equal(authorEncryptedFirstName, authorFromDb.FirstName); Assert.Equal(authorEncryptedLastName, authorFromDb.LastName); Assert.NotNull(authorFromDb.Books); Assert.NotEmpty(authorFromDb.Books); Assert.Equal(2, authorFromDb.Books.Count); Assert.Equal(firstBookEncryptedName, authorFromDb.Books.First().Name); Assert.Equal(lastBookEncryptedName, authorFromDb.Books.Last().Name); } // Read decrypted data and compare with original data using (var dbContext = contextFactory.CreateContext <TContext>(provider)) { var authorFromDb = dbContext.Authors.Include(x => x.Books).FirstOrDefault(); Assert.NotNull(authorFromDb); Assert.Equal(author.FirstName, authorFromDb.FirstName); Assert.Equal(author.LastName, authorFromDb.LastName); Assert.NotNull(authorFromDb.Books); Assert.NotEmpty(authorFromDb.Books); Assert.Equal(2, authorFromDb.Books.Count); Assert.Equal(author.Books.First().Name, authorFromDb.Books.First().Name); Assert.Equal(author.Books.Last().Name, authorFromDb.Books.Last().Name); } } }
public void EncryptDecryptByteArrayTest(AesKeySize keySize) { byte[] input = DataHelper.RandomBytes(20); AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(keySize); var provider = new AesProvider(encryptionKeyInfo.Key); byte[] encryptedData = provider.Encrypt(input, b => b, StandardConverters.StreamToBytes); Assert.NotNull(encryptedData); byte[] decryptedData = provider.Decrypt(encryptedData, b => b, StandardConverters.StreamToBytes); Assert.NotNull(decryptedData); Assert.Equal(input, decryptedData); }
public void CompareTwoAesKeysInstancesTest(AesKeySize keySize) { AesKeyInfo encryptionKeyInfo1 = AesProvider.GenerateKey(keySize); AesKeyInfo encryptionKeyInfo2 = AesProvider.GenerateKey(keySize); AesKeyInfo encryptionKeyInfoCopy = encryptionKeyInfo1; Assert.NotNull(encryptionKeyInfo1.Key); Assert.NotNull(encryptionKeyInfo1.IV); Assert.NotNull(encryptionKeyInfo2.Key); Assert.NotNull(encryptionKeyInfo2.IV); Assert.True(encryptionKeyInfo1 == encryptionKeyInfoCopy); Assert.True(encryptionKeyInfo1.Equals(encryptionKeyInfoCopy)); Assert.True(encryptionKeyInfo1 != encryptionKeyInfo2); Assert.True(encryptionKeyInfo1.GetHashCode() != encryptionKeyInfo2.GetHashCode()); Assert.False(encryptionKeyInfo1.Equals(0)); }
public void EncryptDecryptStringTest(AesKeySize keySize) { string input = StringHelper.RandomString(20); AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(keySize); var provider = new AesProvider(encryptionKeyInfo.Key); string encryptedData = provider.Encrypt(input); Assert.NotNull(encryptedData); string decryptedData = provider.Decrypt(encryptedData); Assert.NotNull(decryptedData); Assert.Equal(input, decryptedData); }
public void EncryptDecryptStringTest(AesKeySize keySize) { string input = DataHelper.RandomString(20); AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(keySize); var provider = new AesProvider(encryptionKeyInfo.Key); string encryptedData = provider.Encrypt(input, Encoding.UTF8.GetBytes, StandardConverters.StreamToBase64String); Assert.NotNull(encryptedData); string decryptedData = provider.Decrypt(encryptedData, Convert.FromBase64String, StandardConverters.StreamToString); Assert.NotNull(decryptedData); Assert.Equal(input, decryptedData); }
private static void ExecuteAesEncryptionTest <TContext>(AesKeySize aesKeyType) where TContext : DatabaseContext { AesKeyInfo encryptionKeyInfo = AesProvider.GenerateKey(aesKeyType); var provider = new AesProvider(encryptionKeyInfo.Key, CipherMode.CBC, PaddingMode.Zeros); var author = new AuthorEntity("John", "Doe", 42) { Password = DataHelper.RandomSecureString(10), Books = new List <BookEntity> { new("Lorem Ipsum", 300), new("Dolor sit amet", 390) } }; using var contextFactory = new DatabaseContextFactory(); // Save data to an encrypted database context using (var dbContext = contextFactory.CreateContext <TContext>(provider)) { dbContext.Authors.Add(author); dbContext.SaveChanges(); } // Read decrypted data and compare with original data using (var dbContext = contextFactory.CreateContext <TContext>(provider)) { var authorFromDb = dbContext.Authors.Include(x => x.Books).FirstOrDefault(); Assert.NotNull(authorFromDb); Assert.Equal(author.FirstName, authorFromDb.FirstName); Assert.Equal(author.LastName, authorFromDb.LastName); Assert.NotNull(authorFromDb.Books); Assert.NotEmpty(authorFromDb.Books); Assert.Equal(2, authorFromDb.Books.Count); Assert.Equal(author.Books.First().Name, authorFromDb.Books.First().Name); Assert.Equal(author.Books.Last().Name, authorFromDb.Books.Last().Name); } }
public UserDbContext(DbContextOptions options) : base(options) { _encryptionInfo = AesProvider.GenerateKey(AesKeySize.AES128Bits); _provider = new AesProvider(_encryptionInfo.Key, _encryptionInfo.IV); }