From cc700d5de7b4391362242dfb3030723dfd6d7cec Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Tue, 20 Feb 2024 00:26:39 +0100 Subject: [PATCH 1/9] featL turned BaseAesEncryption class to static --- src/SafeCrypt.Lib/Encryption/AesEncryption/BaseAesEncryption.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SafeCrypt.Lib/Encryption/AesEncryption/BaseAesEncryption.cs b/src/SafeCrypt.Lib/Encryption/AesEncryption/BaseAesEncryption.cs index e4d1da7..46ff7d7 100644 --- a/src/SafeCrypt.Lib/Encryption/AesEncryption/BaseAesEncryption.cs +++ b/src/SafeCrypt.Lib/Encryption/AesEncryption/BaseAesEncryption.cs @@ -6,7 +6,7 @@ namespace SafeCrypt.AesEncryption { - public class BaseAesEncryption + public static class BaseAesEncryption { /// /// Encrypts the provided data using the Advanced Encryption Standard (AES) algorithm. From 3b2c538569d194741141fc9ee987ed0513feb3c0 Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Tue, 20 Feb 2024 00:27:06 +0100 Subject: [PATCH 2/9] featL turned Decrypting class and methods to static --- .../Encryption/AesEncryption/Decrypting.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs b/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs index ae42d21..73884a2 100644 --- a/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs +++ b/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs @@ -7,7 +7,7 @@ namespace SafeCrypt.AESDecryption { - public class AesDecryption : BaseAesEncryption + public static class AesDecryption { /// /// Asynchronously decrypts data from a hexadecimal string using the specified decryption parameters and cipher mode. @@ -19,7 +19,7 @@ public class AesDecryption : BaseAesEncryption /// The task result is a object containing the decrypted data, IV, and secret key. /// If decryption fails, the object will contain error information. /// - public async Task DecryptFromHexStringAsync(DecryptionParameters param, CipherMode mode = CipherMode.CBC) + public static async Task DecryptFromHexStringAsync(DecryptionParameters param, CipherMode mode = CipherMode.CBC) { var responseData = new DecryptionData(); @@ -55,7 +55,7 @@ public async Task DecryptFromHexStringAsync(DecryptionParameters Data = param.DataToDecrypt.HexadecimalStringToByteArray() }; - var response = await DecryptAsync(byteEncryptionParameters, mode); + var response = await BaseAesEncryption.DecryptAsync(byteEncryptionParameters, mode); return new DecryptionData { @@ -75,7 +75,7 @@ public async Task DecryptFromHexStringAsync(DecryptionParameters /// The task result is a object containing the decrypted data, IV, and secret key. /// If decryption fails, the object will contain error information. /// - public async Task DecryptFromBase64StringAsync(DecryptionParameters param, CipherMode mode = CipherMode.CBC) + public static async Task DecryptFromBase64StringAsync(DecryptionParameters param, CipherMode mode = CipherMode.CBC) { var responseData = new DecryptionData(); @@ -103,7 +103,7 @@ public async Task DecryptFromBase64StringAsync(DecryptionParamet Data = Convert.FromBase64String(param.DataToDecrypt) }; - var response = await DecryptAsync(byteDecryptionParameters, mode); + var response = await BaseAesEncryption.DecryptAsync(byteDecryptionParameters, mode); return new DecryptionData { @@ -121,7 +121,7 @@ public async Task DecryptFromBase64StringAsync(DecryptionParamet } - private void NullChecks(string data, string secretKey, string iv) + private static void NullChecks(string data, string secretKey, string iv) { if (data == null || data.Length <= 0) throw new ArgumentNullException(nameof(data)); @@ -133,13 +133,13 @@ private void NullChecks(string data, string secretKey, string iv) throw new ArgumentNullException(nameof(iv)); } - private (byte[], byte[]) ConvertKeysToBytesAndGetKeys(string secretKey, string iv) + private static (byte[], byte[]) ConvertKeysToBytesAndGetKeys(string secretKey, string iv) { return (secretKey.ConvertKeysToBytes(), iv.ConvertKeysToBytes()); } - private void AddError(DecryptionData responseData, string error) + private static void AddError(DecryptionData responseData, string error) { responseData.HasError = true; responseData.Errors.Add(error); From 965234d2ddf1fbb7919fd145b62277340e06b07e Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Tue, 20 Feb 2024 00:27:42 +0100 Subject: [PATCH 3/9] featL turned Encrypting class and methods to static --- .../Encryption/AesEncryption/Encrypting.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs b/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs index ca76d78..ebbc839 100644 --- a/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs +++ b/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs @@ -7,7 +7,7 @@ namespace SafeCrypt.AESEncryption { - public class AesEncryption : BaseAesEncryption + public static class AesEncryption { /// /// Asynchronously encrypts the provided data using the specified secret key and initialization vector (IV). @@ -23,7 +23,7 @@ public class AesEncryption : BaseAesEncryption /// The secret key used for encryption. /// The initialization vector used for encryption. /// The encrypted data as a byte array. - public async Task EncryptToHexStringAsync(EncryptionParameters param, CipherMode mode = CipherMode.CBC) + public static async Task EncryptToHexStringAsync(EncryptionParameters param, CipherMode mode = CipherMode.CBC) { var responseData = new EncryptionData(); @@ -52,7 +52,7 @@ public async Task EncryptToHexStringAsync(EncryptionParameters p Data = param.DataToEncrypt.ConvertToHexString().HexadecimalStringToByteArray() }; - var response = await EncryptAsync(byteEncryptionParameters, mode); + var response = await BaseAesEncryption.EncryptAsync(byteEncryptionParameters, mode); return new EncryptionData { @@ -84,7 +84,7 @@ public async Task EncryptToHexStringAsync(EncryptionParameters p /// /// Thrown if the base64secretKey is not a valid Base64-encoded string. /// - public async Task EncryptToBase64StringAsync(string dataToBeEncrypted, string base64secretKey, CipherMode mode = CipherMode.CBC) + public static async Task EncryptToBase64StringAsync(string dataToBeEncrypted, string base64secretKey, CipherMode mode = CipherMode.CBC) { // validate is base64 if (!Validators.IsBase64String(base64secretKey)) @@ -104,7 +104,7 @@ public async Task EncryptToBase64StringAsync(string dataToBeEncr Data = dataToBeEncrypted.ConvertToHexString().HexadecimalStringToByteArray() }; - var response = await EncryptAsync(byteEncryptionParameters, mode); + var response = await BaseAesEncryption.EncryptAsync(byteEncryptionParameters, mode); return new EncryptionData { @@ -114,7 +114,7 @@ public async Task EncryptToBase64StringAsync(string dataToBeEncr }; } - private EncryptionData ValidateEncryptionParameters(EncryptionParameters param) + private static EncryptionData ValidateEncryptionParameters(EncryptionParameters param) { var responseData = new EncryptionData(); @@ -134,7 +134,7 @@ private EncryptionData ValidateEncryptionParameters(EncryptionParameters param) return responseData; } - private void NullChecks(string data, string secretKey) + private static void NullChecks(string data, string secretKey) { if (data == null || data.Length <= 0) throw new ArgumentNullException(nameof(data)); @@ -143,7 +143,7 @@ private void NullChecks(string data, string secretKey) throw new ArgumentNullException(nameof(secretKey)); } - private void AddError(EncryptionData responseData, string error) + private static void AddError(EncryptionData responseData, string error) { responseData.HasError = true; responseData.Errors.Add(error); From 8411c9003fe1c84131affe16e3dd1149d4239f2a Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Tue, 20 Feb 2024 14:02:40 +0100 Subject: [PATCH 4/9] update program class to use static AES methods --- src/SafeCrypt.Test/Program.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/SafeCrypt.Test/Program.cs b/src/SafeCrypt.Test/Program.cs index 79b733e..b971c9c 100644 --- a/src/SafeCrypt.Test/Program.cs +++ b/src/SafeCrypt.Test/Program.cs @@ -8,10 +8,9 @@ var secret = "hghjuytsdfraestwsgtere=="; // Encryption process -var encryptor = new AesEncryption(); // this method generates a random IV key for the encryption process // the IV is returned in the response with other properties -var response = await encryptor.EncryptToBase64StringAsync(dataToEncrypt, secret); +var response = await AesEncryption.EncryptToBase64StringAsync(dataToEncrypt, secret); Console.WriteLine("............Encryption Started............"); @@ -28,8 +27,7 @@ DataToDecrypt = response.EncryptedData }; -var decryptor = new AesDecryption(); -var decryptionData = await decryptor.DecryptFromBase64StringAsync(decryptorParam); +var decryptionData = await AesDecryption.DecryptFromBase64StringAsync(decryptorParam); Console.WriteLine("............Decryption Started............"); Console.WriteLine($"Decrypted data: { decryptionData.DecryptedData }"); From 5cf8ad8c85421478f67e1f5a593d8ae815b13eea Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Tue, 20 Feb 2024 14:05:00 +0100 Subject: [PATCH 5/9] update readme doc to reflect static method change --- README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 6965cd2..c70a4ef 100644 --- a/README.md +++ b/README.md @@ -47,15 +47,12 @@ class Program { static async Task Main() { - var aesEncryptor = new AesEncryption(); - var encryptedData = await aesEncryptor.EncryptToBase64StringAsync("Hello, World!", "gdjdtsraewsuteastwerse==" + var encryptedData = await AesEncryption.EncryptToBase64StringAsync("Hello, World!", "gdjdtsraewsuteastwerse==" Console.WriteLine($"Encrypted Data: {encryptedData.EncryptedData}"); Console.WriteLine($"Initialization Vector: {encryptedData.Iv}"); - - var aesDecryptor = new AesDecryption(); - + var parameterToDecrypt = new DecryptionParameters { DataToDecrypt = encryptedData.EncryptedData, @@ -64,7 +61,7 @@ class Program }; - var data = await aesDecryptor.DecryptFromBase64StringAsync(parameterToDecrypt) + var data = await AesDecryption.DecryptFromBase64StringAsync(parameterToDecrypt) Console.WriteLine($"Decrypted Data: {data.DecryptedData}"); Console.WriteLine($"Initialization Vector: {data.Iv}"); @@ -94,9 +91,8 @@ class Program SecretKey = secret }; - var encryptor = new AesEncryption(); - var response = await encryptor.EncryptToBase64StringAsync(encryptionParam.DataToEncrypt, secret); + var response = await AesEncryption.EncryptToBase64StringAsync(encryptionParam.DataToEncrypt, secret); Console.WriteLine(response.EncryptedData); Console.WriteLine(response.Iv); @@ -112,8 +108,7 @@ class Program }; - var decryptor = new AesDecryption(); - var decryptionData = await decryptor.DecryptFromBase64StringAsync(decryptorParam); + var decryptionData = await AesDecryption.DecryptFromBase64StringAsync(decryptorParam); Console.WriteLine(decryptionData.DecryptedData); Console.WriteLine(decryptionData.Iv); From 575b2ff5def88f3ab5d1e773ea9168e2322270c4 Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Thu, 22 Feb 2024 11:09:23 +0100 Subject: [PATCH 6/9] feat: change aes encryption and decryption class into partial class feat: modified namespace to be AES for encryption and decryption --- src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs | 4 ++-- src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs b/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs index 73884a2..82164e4 100644 --- a/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs +++ b/src/SafeCrypt.Lib/Encryption/AesEncryption/Decrypting.cs @@ -5,9 +5,9 @@ using System.Security.Cryptography; using System.Threading.Tasks; -namespace SafeCrypt.AESDecryption +namespace SafeCrypt.AES { - public static class AesDecryption + public static partial class Aes { /// /// Asynchronously decrypts data from a hexadecimal string using the specified decryption parameters and cipher mode. diff --git a/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs b/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs index ebbc839..293af57 100644 --- a/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs +++ b/src/SafeCrypt.Lib/Encryption/AesEncryption/Encrypting.cs @@ -5,9 +5,9 @@ using SafeCrypt.Helpers; using SafeCrypt.Models; -namespace SafeCrypt.AESEncryption +namespace SafeCrypt.AES { - public static class AesEncryption + public static partial class Aes { /// /// Asynchronously encrypts the provided data using the specified secret key and initialization vector (IV). From a3630c9840a28fbb6ebd4a4faa49e09dfb4efee2 Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Thu, 22 Feb 2024 11:10:06 +0100 Subject: [PATCH 7/9] feat: update readme doc to use newly created AES class and namespace for encryption and decryption --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c70a4ef..01d45f1 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,7 @@ Now, you can reference the SafeCrypt library in your C# project. To use the library in your C# application, instantiate the `AesEncryption` or `AesDecryption` class and call the provided methods. Here's a simple example: ```csharp -using SafeCrypt.AESDecryption; -using SafeCrypt.AESEncryption; +using SafeCrypt.AES; using SafeCrypt.Models; class Program @@ -61,7 +60,7 @@ class Program }; - var data = await AesDecryption.DecryptFromBase64StringAsync(parameterToDecrypt) + var data = await Aes.DecryptFromBase64StringAsync(parameterToDecrypt) Console.WriteLine($"Decrypted Data: {data.DecryptedData}"); Console.WriteLine($"Initialization Vector: {data.Iv}"); @@ -71,8 +70,7 @@ class Program ------------------------------------------------------------------------------------------------------- -using SafeCrypt.AESDecryption; -using SafeCrypt.AESEncryption; +using SafeCrypt.AES; using SafeCrypt.Models; class Program @@ -92,7 +90,7 @@ class Program }; - var response = await AesEncryption.EncryptToBase64StringAsync(encryptionParam.DataToEncrypt, secret); + var response = await Aes.EncryptToBase64StringAsync(encryptionParam.DataToEncrypt, secret); Console.WriteLine(response.EncryptedData); Console.WriteLine(response.Iv); From d6d4e35bf0ba1e13a84c3cb774b2bfeeb3714017 Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Thu, 22 Feb 2024 11:10:44 +0100 Subject: [PATCH 8/9] feat: update program class with namespace and class name change for aes class --- src/SafeCrypt.Test/Program.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/SafeCrypt.Test/Program.cs b/src/SafeCrypt.Test/Program.cs index b971c9c..b50bb32 100644 --- a/src/SafeCrypt.Test/Program.cs +++ b/src/SafeCrypt.Test/Program.cs @@ -1,7 +1,6 @@ // See https://aka.ms/new-console-template for more information -using SafeCrypt.AESDecryption; -using SafeCrypt.AESEncryption; +using SafeCrypt.AES; using SafeCrypt.Models; var dataToEncrypt = "Data to Encrypt"; @@ -10,7 +9,7 @@ // Encryption process // this method generates a random IV key for the encryption process // the IV is returned in the response with other properties -var response = await AesEncryption.EncryptToBase64StringAsync(dataToEncrypt, secret); +var response = await Aes.EncryptToBase64StringAsync(dataToEncrypt, secret); Console.WriteLine("............Encryption Started............"); @@ -27,7 +26,7 @@ DataToDecrypt = response.EncryptedData }; -var decryptionData = await AesDecryption.DecryptFromBase64StringAsync(decryptorParam); +var decryptionData = await Aes.DecryptFromBase64StringAsync(decryptorParam); Console.WriteLine("............Decryption Started............"); Console.WriteLine($"Decrypted data: { decryptionData.DecryptedData }"); From eb6bd33d2ef4edd983739ad5630df3a720cd954c Mon Sep 17 00:00:00 2001 From: Raphael Anyanwu Date: Thu, 22 Feb 2024 11:12:22 +0100 Subject: [PATCH 9/9] update readme doc --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 01d45f1..bbd703c 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ class Program static async Task Main() { - var encryptedData = await AesEncryption.EncryptToBase64StringAsync("Hello, World!", "gdjdtsraewsuteastwerse==" + var encryptedData = await Aes.EncryptToBase64StringAsync("Hello, World!", "gdjdtsraewsuteastwerse==" Console.WriteLine($"Encrypted Data: {encryptedData.EncryptedData}"); Console.WriteLine($"Initialization Vector: {encryptedData.Iv}"); @@ -106,7 +106,7 @@ class Program }; - var decryptionData = await AesDecryption.DecryptFromBase64StringAsync(decryptorParam); + var decryptionData = await Aes.DecryptFromBase64StringAsync(decryptorParam); Console.WriteLine(decryptionData.DecryptedData); Console.WriteLine(decryptionData.Iv);