Skip to content
Merged
10 changes: 10 additions & 0 deletions SafeCrypt.sln
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SafeCrypt", "src\SafeCrypt.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SafeCrypt.App", "src\SafeCrypt.Test\SafeCrypt.App.csproj", "{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SafeCrypt.UnitTests", "SafeCrypt.UnitTests", "{5FC8B106-513E-4B2D-A2C0-2D5B5B76947C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeCrypt.UnitTests", "src\SafeCrypt.UnitTests\SafeCrypt.UnitTests.csproj", "{5A43627C-68E1-44E3-9866-DE15FE976392}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -27,6 +31,10 @@ Global
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6}.Release|Any CPU.Build.0 = Release|Any CPU
{5A43627C-68E1-44E3-9866-DE15FE976392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A43627C-68E1-44E3-9866-DE15FE976392}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A43627C-68E1-44E3-9866-DE15FE976392}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A43627C-68E1-44E3-9866-DE15FE976392}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -36,6 +44,8 @@ Global
{1D91E775-F63F-4537-B81E-B8F9A6480D6D} = {0B7C0C60-9850-4554-AF85-86C0378B6B16}
{AE9FAE54-9854-4F98-A60F-19125CEAA3A8} = {8507D130-9F07-426C-8EE6-0AC714CF72E5}
{DAD7FFA3-AABC-47FF-BA79-0C9531BFBBE6} = {1D91E775-F63F-4537-B81E-B8F9A6480D6D}
{5FC8B106-513E-4B2D-A2C0-2D5B5B76947C} = {0B7C0C60-9850-4554-AF85-86C0378B6B16}
{5A43627C-68E1-44E3-9866-DE15FE976392} = {5FC8B106-513E-4B2D-A2C0-2D5B5B76947C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {639A4359-2BA4-4F71-9EBF-D6EAB68C84CB}
Expand Down
6 changes: 3 additions & 3 deletions src/SafeCrypt.Test/Program.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// See https://aka.ms/new-console-template for more information
using SafeCrypt.App.Usage;

RsaUsage.Execute();
await RsaUsage.Execute();

AesUsage.Execute();
await AesUsage.Execute();

Console.ReadLine();
Console.ReadLine();
19 changes: 11 additions & 8 deletions src/SafeCrypt.Test/Usage/AesUsage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ namespace SafeCrypt.App.Usage;

internal static class AesUsage
{
internal static async void Execute()
internal static async Task Execute()
{
//Console.WriteLine("------- AES Test Started -------");
Console.WriteLine("------- AES Test Started -------");

var aesIv = KeyGenerators.GenerateHexadecimalIVKey();
var secret = KeyGenerators.GenerateAesSecretKey(256);
Expand All @@ -21,7 +21,7 @@ internal static async void Execute()
SecretKey = secret
};

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

Console.WriteLine();
Console.WriteLine();
Console.WriteLine($"Hex Decryption Started");

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

Console.WriteLine();
Console.WriteLine();
Console.WriteLine($"Base64 Encryption Started");
Console.WriteLine($"AES Base64 Encryption Started");
Console.WriteLine();
Console.WriteLine();

var encryptedResult = await Aes.EncryptToBase64StringAsync(base64dataToEncrypt);

Console.WriteLine($"Base64 Encrypted data: {encryptedResult.EncryptedData}");

Console.WriteLine($"IV key: {encryptedResult.Iv}");
Console.WriteLine($"Secret key: {encryptedResult.SecretKey}");
Console.WriteLine();
Console.WriteLine();

Console.WriteLine($"Base64 Decryption Started");
Console.WriteLine($"AES Base64 Decryption Started");


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

//Console.WriteLine("------- AES Test Ended -------");

Console.WriteLine("------- AES Test Ended -------");
}
}
2 changes: 1 addition & 1 deletion src/SafeCrypt.Test/Usage/RsaUsage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace SafeCrypt.App.Usage;

internal static class RsaUsage
{
internal static async void Execute()
internal static async Task Execute()
{
Console.WriteLine("------- RSA Test Started -------");

Expand Down
80 changes: 80 additions & 0 deletions src/SafeCrypt.UnitTests/AesTests/EncryptionDecryption.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using SafeCrypt.Helpers;
using SafeCrypt.Models;
using SafeCrypt.AES;
using SafeCrypt.RsaEncryption.Models;

namespace SafeCrypt.UnitTests.AesTests;

public class EncryptionDecryption
{
public const string Data = "Hello, World!";

[Fact]
public async Task EncryptToHexStringAsync_And_DecryptFromHexStringAsync_ValidParameters_ReturnsOriginalData()
{
// Arrange
var aesIv = KeyGenerators.GenerateHexadecimalIVKey();
var secret = KeyGenerators.GenerateAesSecretKey(256);

var encryptionParameters = new EncryptionParameters
{
Data = Data,
IV = aesIv,
SecretKey = secret
};

// Act
var encryptionResult = await Aes.EncryptToHexStringAsync(encryptionParameters);
Assert.False(encryptionResult.HasError);

var decryptionResult = await Aes.DecryptFromHexStringAsync(new DecryptionParameters
{
Data = encryptionResult.EncryptedData,
IV = aesIv,
SecretKey = secret
});

// Assert
Assert.NotNull(encryptionResult.EncryptedData);
Assert.Equal(Data, decryptionResult.DecryptedData);

Assert.False(encryptionResult.HasError);
Assert.False(decryptionResult.HasError);

Assert.Empty(encryptionResult.Errors);
Assert.Empty(decryptionResult.Errors);
}

[Theory]
[InlineData(Data)]
public async Task EncryptToBase64StringAndDecryptAsync_DecryptedDataMatchesOriginalData(string originalData)
{
// Arrange
var aesIv = KeyGenerators.GenerateBase64IVKey();
var secret = KeyGenerators.GenerateAesSecretKey(256);

var encryptionParameters = new EncryptionParameters
{
Data = originalData,
IV = aesIv,
SecretKey = secret
};

// Act
var encryptionResult = await Aes.EncryptToBase64StringAsync(encryptionParameters);
Assert.False(encryptionResult.HasError);

var decryptionParameters = new DecryptionParameters
{
Data = encryptionResult.EncryptedData,
IV = aesIv,
SecretKey = secret
};

var decryptionResult = await Aes.DecryptFromBase64StringAsync(decryptionParameters);
Assert.False(decryptionResult.HasError);

// Assert
Assert.Equal(originalData, decryptionResult.DecryptedData);
}
}
27 changes: 27 additions & 0 deletions src/SafeCrypt.UnitTests/SafeCrypt.UnitTests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="3.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\SafeCrypt.Lib\SafeCrypt.csproj" />
</ItemGroup>

<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>

</Project>