Skip to content

Commit e4d073e

Browse files
authored
Merge pull request #56 from selfmadecode/dev
Test: Add unit tests for AES encryption and decryption
2 parents 15cba00 + 104ac6b commit e4d073e

6 files changed

Lines changed: 132 additions & 12 deletions

File tree

SafeCrypt.sln

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SafeCrypt", "src\SafeCrypt.
1313
EndProject
1414
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SafeCrypt.App", "src\SafeCrypt.Test\SafeCrypt.App.csproj", "{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}"
1515
EndProject
16+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SafeCrypt.UnitTests", "SafeCrypt.UnitTests", "{5FC8B106-513E-4B2D-A2C0-2D5B5B76947C}"
17+
EndProject
18+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeCrypt.UnitTests", "src\SafeCrypt.UnitTests\SafeCrypt.UnitTests.csproj", "{5A43627C-68E1-44E3-9866-DE15FE976392}"
19+
EndProject
1620
Global
1721
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1822
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +31,10 @@ Global
2731
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
2832
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
2933
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Release|Any CPU.Build.0 = Release|Any CPU
34+
{5A43627C-68E1-44E3-9866-DE15FE976392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35+
{5A43627C-68E1-44E3-9866-DE15FE976392}.Debug|Any CPU.Build.0 = Debug|Any CPU
36+
{5A43627C-68E1-44E3-9866-DE15FE976392}.Release|Any CPU.ActiveCfg = Release|Any CPU
37+
{5A43627C-68E1-44E3-9866-DE15FE976392}.Release|Any CPU.Build.0 = Release|Any CPU
3038
EndGlobalSection
3139
GlobalSection(SolutionProperties) = preSolution
3240
HideSolutionNode = FALSE
@@ -36,6 +44,8 @@ Global
3644
{1D91E775-F63F-4537-B81E-B8F9A6480D6D} = {0B7C0C60-9850-4554-AF85-86C0378B6B16}
3745
{AE9FAE54-9854-4F98-A60F-19125CEAA3A8} = {8507D130-9F07-426C-8EE6-0AC714CF72E5}
3846
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6} = {1D91E775-F63F-4537-B81E-B8F9A6480D6D}
47+
{5FC8B106-513E-4B2D-A2C0-2D5B5B76947C} = {0B7C0C60-9850-4554-AF85-86C0378B6B16}
48+
{5A43627C-68E1-44E3-9866-DE15FE976392} = {5FC8B106-513E-4B2D-A2C0-2D5B5B76947C}
3949
EndGlobalSection
4050
GlobalSection(ExtensibilityGlobals) = postSolution
4151
SolutionGuid = {639A4359-2BA4-4F71-9EBF-D6EAB68C84CB}

src/SafeCrypt.Test/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// See https://aka.ms/new-console-template for more information
22
using SafeCrypt.App.Usage;
33

4-
RsaUsage.Execute();
4+
await RsaUsage.Execute();
55

6-
AesUsage.Execute();
6+
await AesUsage.Execute();
77

8-
Console.ReadLine();
8+
Console.ReadLine();

src/SafeCrypt.Test/Usage/AesUsage.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ namespace SafeCrypt.App.Usage;
66

77
internal static class AesUsage
88
{
9-
internal static async void Execute()
9+
internal static async Task Execute()
1010
{
11-
//Console.WriteLine("------- AES Test Started -------");
11+
Console.WriteLine("------- AES Test Started -------");
1212

1313
var aesIv = KeyGenerators.GenerateHexadecimalIVKey();
1414
var secret = KeyGenerators.GenerateAesSecretKey(256);
@@ -21,7 +21,7 @@ internal static async void Execute()
2121
SecretKey = secret
2222
};
2323

24-
Console.WriteLine($"Hex Encryption Started");
24+
Console.WriteLine($"AES Hex Encryption Started");
2525
Console.WriteLine();
2626
Console.WriteLine();
2727
var encryptionResult = await Aes.EncryptToHexStringAsync(data);
@@ -37,7 +37,8 @@ internal static async void Execute()
3737

3838
Console.WriteLine();
3939
Console.WriteLine();
40-
Console.WriteLine($"Hex Decryption Started");
40+
41+
Console.WriteLine($"AES Hex Decryption Started");
4142
// Perform decryption using the same IV and secret
4243
var decryptionResult = await Aes.DecryptFromHexStringAsync(new DecryptionParameters
4344
{
@@ -63,17 +64,20 @@ internal static async void Execute()
6364

6465
Console.WriteLine();
6566
Console.WriteLine();
66-
Console.WriteLine($"Base64 Encryption Started");
67+
Console.WriteLine($"AES Base64 Encryption Started");
6768
Console.WriteLine();
6869
Console.WriteLine();
70+
6971
var encryptedResult = await Aes.EncryptToBase64StringAsync(base64dataToEncrypt);
72+
7073
Console.WriteLine($"Base64 Encrypted data: {encryptedResult.EncryptedData}");
74+
7175
Console.WriteLine($"IV key: {encryptedResult.Iv}");
7276
Console.WriteLine($"Secret key: {encryptedResult.SecretKey}");
7377
Console.WriteLine();
7478
Console.WriteLine();
7579

76-
Console.WriteLine($"Base64 Decryption Started");
80+
Console.WriteLine($"AES Base64 Decryption Started");
7781

7882

7983
var decryptionResponse = await Aes.DecryptFromBase64StringAsync(new DecryptionParameters
@@ -87,7 +91,6 @@ internal static async void Execute()
8791
Console.WriteLine($"IV key: {decryptionResponse.Iv}");
8892
Console.WriteLine($"Secret key: {decryptionResponse.SecretKey}");
8993

90-
//Console.WriteLine("------- AES Test Ended -------");
91-
94+
Console.WriteLine("------- AES Test Ended -------");
9295
}
9396
}

src/SafeCrypt.Test/Usage/RsaUsage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace SafeCrypt.App.Usage;
66

77
internal static class RsaUsage
88
{
9-
internal static async void Execute()
9+
internal static async Task Execute()
1010
{
1111
Console.WriteLine("------- RSA Test Started -------");
1212

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using SafeCrypt.Helpers;
2+
using SafeCrypt.Models;
3+
using SafeCrypt.AES;
4+
using SafeCrypt.RsaEncryption.Models;
5+
6+
namespace SafeCrypt.UnitTests.AesTests;
7+
8+
public class EncryptionDecryption
9+
{
10+
public const string Data = "Hello, World!";
11+
12+
[Fact]
13+
public async Task EncryptToHexStringAsync_And_DecryptFromHexStringAsync_ValidParameters_ReturnsOriginalData()
14+
{
15+
// Arrange
16+
var aesIv = KeyGenerators.GenerateHexadecimalIVKey();
17+
var secret = KeyGenerators.GenerateAesSecretKey(256);
18+
19+
var encryptionParameters = new EncryptionParameters
20+
{
21+
Data = Data,
22+
IV = aesIv,
23+
SecretKey = secret
24+
};
25+
26+
// Act
27+
var encryptionResult = await Aes.EncryptToHexStringAsync(encryptionParameters);
28+
Assert.False(encryptionResult.HasError);
29+
30+
var decryptionResult = await Aes.DecryptFromHexStringAsync(new DecryptionParameters
31+
{
32+
Data = encryptionResult.EncryptedData,
33+
IV = aesIv,
34+
SecretKey = secret
35+
});
36+
37+
// Assert
38+
Assert.NotNull(encryptionResult.EncryptedData);
39+
Assert.Equal(Data, decryptionResult.DecryptedData);
40+
41+
Assert.False(encryptionResult.HasError);
42+
Assert.False(decryptionResult.HasError);
43+
44+
Assert.Empty(encryptionResult.Errors);
45+
Assert.Empty(decryptionResult.Errors);
46+
}
47+
48+
[Theory]
49+
[InlineData(Data)]
50+
public async Task EncryptToBase64StringAndDecryptAsync_DecryptedDataMatchesOriginalData(string originalData)
51+
{
52+
// Arrange
53+
var aesIv = KeyGenerators.GenerateBase64IVKey();
54+
var secret = KeyGenerators.GenerateAesSecretKey(256);
55+
56+
var encryptionParameters = new EncryptionParameters
57+
{
58+
Data = originalData,
59+
IV = aesIv,
60+
SecretKey = secret
61+
};
62+
63+
// Act
64+
var encryptionResult = await Aes.EncryptToBase64StringAsync(encryptionParameters);
65+
Assert.False(encryptionResult.HasError);
66+
67+
var decryptionParameters = new DecryptionParameters
68+
{
69+
Data = encryptionResult.EncryptedData,
70+
IV = aesIv,
71+
SecretKey = secret
72+
};
73+
74+
var decryptionResult = await Aes.DecryptFromBase64StringAsync(decryptionParameters);
75+
Assert.False(decryptionResult.HasError);
76+
77+
// Assert
78+
Assert.Equal(originalData, decryptionResult.DecryptedData);
79+
}
80+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="coverlet.collector" Version="3.2.0" />
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
15+
<PackageReference Include="xunit" Version="2.4.2" />
16+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" />
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<ProjectReference Include="..\SafeCrypt.Lib\SafeCrypt.csproj" />
21+
</ItemGroup>
22+
23+
<ItemGroup>
24+
<Using Include="Xunit" />
25+
</ItemGroup>
26+
27+
</Project>

0 commit comments

Comments
 (0)