Skip to content

Commit ea6836b

Browse files
authored
Merge pull request #52 from Eastrall/bugfix/nul-empty-string-encryption
Fix null or empty string encryption
2 parents 6dc25da + 9e15a88 commit ea6836b

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/EntityFrameworkCore.DataEncryption/EntityFrameworkCore.DataEncryption.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<AssemblyName>EntityFrameworkCore.DataEncryption</AssemblyName>
88
<RootNamespace>Microsoft.EntityFrameworkCore.DataEncryption</RootNamespace>
99
<IsPackable>true</IsPackable>
10-
<Version>4.0.0</Version>
10+
<Version>4.0.1</Version>
1111
<Authors>Filipe GOMES PEIXOTO</Authors>
1212
<PackageId>EntityFrameworkCore.DataEncryption</PackageId>
1313
<PackageProjectUrl>https://github.com/Eastrall/EntityFrameworkCore.DataEncryption</PackageProjectUrl>
@@ -20,7 +20,7 @@
2020
<Copyright>Filipe GOMES PEIXOTO © 2019 - 2023</Copyright>
2121
<Description>A plugin for Microsoft.EntityFrameworkCore to add support of encrypted fields using built-in or custom encryption providers.</Description>
2222
<PackageLicenseFile>LICENSE</PackageLicenseFile>
23-
<PackageReleaseNotes>https://github.com/Eastrall/EntityFrameworkCore.DataEncryption/releases/tag/v4.0.0</PackageReleaseNotes>
23+
<PackageReleaseNotes>https://github.com/Eastrall/EntityFrameworkCore.DataEncryption/releases/tag/v4.0.1</PackageReleaseNotes>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>
2525
</PropertyGroup>
2626

src/EntityFrameworkCore.DataEncryption/Internal/EncryptionConverter.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,18 @@ private static TOutput Encrypt<TInput, TOutput>(TInput input, IEncryptionProvide
3030
{
3131
byte[] inputData = input switch
3232
{
33-
string => Encoding.UTF8.GetBytes(input.ToString()),
33+
string => !string.IsNullOrEmpty(input.ToString()) ? Encoding.UTF8.GetBytes(input.ToString()) : null,
3434
byte[] => input as byte[],
3535
_ => null,
3636
};
3737

3838
byte[] encryptedRawBytes = encryptionProvider.Encrypt(inputData);
3939

40+
if (encryptedRawBytes is null)
41+
{
42+
return default;
43+
}
44+
4045
object encryptedData = storageFormat switch
4146
{
4247
StorageFormat.Default or StorageFormat.Base64 => Convert.ToBase64String(encryptedRawBytes),

test/EntityFrameworkCore.DataEncryption.Test/PropertyBuilderExtensionsTest.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public void PropertyShouldHaveEncryptionAnnotationsTest()
3636
Name = name,
3737
NameAsBytes = name,
3838
ExtraData = bytes,
39-
ExtraDataAsBytes = bytes
39+
ExtraDataAsBytes = bytes,
40+
EmptyString = ""
4041
};
4142

4243
using var contextFactory = new DatabaseContextFactory();
@@ -52,6 +53,7 @@ public void PropertyShouldHaveEncryptionAnnotationsTest()
5253
AssertPropertyAnnotations(entityType.GetProperty(nameof(UserEntity.ExtraData)), true, StorageFormat.Base64);
5354
AssertPropertyAnnotations(entityType.GetProperty(nameof(UserEntity.ExtraDataAsBytes)), true, StorageFormat.Binary);
5455
AssertPropertyAnnotations(entityType.GetProperty(nameof(UserEntity.Id)), false, StorageFormat.Default);
56+
AssertPropertyAnnotations(entityType.GetProperty(nameof(UserEntity.EmptyString)), true, StorageFormat.Base64);
5557

5658
context.Users.Add(user);
5759
context.SaveChanges();
@@ -66,6 +68,7 @@ public void PropertyShouldHaveEncryptionAnnotationsTest()
6668
Assert.Equal(name, u.NameAsBytes);
6769
Assert.Equal(bytes, u.ExtraData);
6870
Assert.Equal(bytes, u.ExtraDataAsBytes);
71+
Assert.Null(u.EmptyString);
6972
}
7073
}
7174

@@ -106,6 +109,9 @@ private class UserEntity
106109

107110
// Encrypted as raw byte array.
108111
public byte[] ExtraDataAsBytes { get; set; }
112+
113+
// Encrypt as Base64 string, but will be empty.
114+
public string EmptyString { get; set; }
109115
}
110116

111117
private class FluentDbContext : DbContext
@@ -134,6 +140,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
134140
userEntityBuilder.Property(x => x.NameAsBytes).IsRequired().HasColumnType("BLOB").IsEncrypted(StorageFormat.Binary);
135141
userEntityBuilder.Property(x => x.ExtraData).IsRequired().HasColumnType("TEXT").IsEncrypted(StorageFormat.Base64);
136142
userEntityBuilder.Property(x => x.ExtraDataAsBytes).IsRequired().HasColumnType("BLOB").IsEncrypted(StorageFormat.Binary);
143+
userEntityBuilder.Property(x => x.EmptyString).IsRequired(false).HasColumnType("TEXT").IsEncrypted(StorageFormat.Base64);
137144

138145
modelBuilder.UseEncryption(_encryptionProvider);
139146
}

0 commit comments

Comments
 (0)