Skip to content

Commit

Permalink
Feature/alme/small improvements (#47)
Browse files Browse the repository at this point in the history
* Bump up lang version and treat warnings as errors
* Use file scoped namespace
---------

Co-authored-by: Memhave <alme@consensus.dk>
Co-authored-by: Maytham Fahmi <maythamfahmi@nextbix.dk>
  • Loading branch information
3 people committed Sep 20, 2023
1 parent 65e48de commit a28b438
Show file tree
Hide file tree
Showing 14 changed files with 972 additions and 992 deletions.
2 changes: 1 addition & 1 deletion CryptoNet.Cli/CryptoNet.Cli.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

<ItemGroup>
Expand All @@ -25,5 +26,4 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
176 changes: 86 additions & 90 deletions CryptoNet.Cli/ExampleAes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,125 +11,121 @@
using CryptoNet.Models;
using CryptoNet.Utils;

namespace CryptoNet.Cli
namespace CryptoNet.Cli;

public static class ExampleAes
{
private const string ConfidentialDummyData = @"Some Secret Data";

private static readonly string BaseFolder = AppDomain.CurrentDomain.BaseDirectory;
private readonly static string SymmetricKeyFile = Path.Combine(BaseFolder, $"{KeyType.SymmetricKey}.xml");

public class ExampleAes
public static void Example_1_Encrypt_Decrypt_Content_With_SelfGenerated_SymmetricKey()
{
protected ExampleAes() { }
ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();

private const string ConfidentialDummyData = @"Some Secret Data";
ICryptoNet encryptClient = new CryptoNetAes(key);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);

private static readonly string BaseFolder = AppDomain.CurrentDomain.BaseDirectory;
private readonly static string SymmetricKeyFile = Path.Combine(BaseFolder, $"{KeyType.SymmetricKey}.xml");
ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToString(encrypt);

public static void Example_1_Encrypt_Decrypt_Content_With_SelfGenerated_SymmetricKey()
{
ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();
Debug.Assert(ConfidentialDummyData == decrypt);
}

public static void Example_2_SelfGenerated_And_Save_SymmetricKey()
{
ICryptoNet cryptoNet = new CryptoNetAes();
var file = new FileInfo(SymmetricKeyFile);
cryptoNet.ExportKeyAndSave(file);

Debug.Assert(File.Exists(file.FullName));

ICryptoNet encryptClient = new CryptoNetAes(key);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);
var encrypt = cryptoNet.EncryptFromString(ConfidentialDummyData);

ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToString(encrypt);
ICryptoNet cryptoNetKeyImport = new CryptoNetAes(file);
var decrypt = cryptoNetKeyImport.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);
Debug.Assert(ConfidentialDummyData == decrypt);
}

public static void Example_3_Encrypt_Decrypt_Content_With_Own_SymmetricKey()
{
var symmetricKey = "12345678901234567890123456789012";
if (symmetricKey.Length != 32)
{
Console.WriteLine("key should be 32 character long");
Environment.Exit(0);
}

public static void Example_2_SelfGenerated_And_Save_SymmetricKey()
var secret = "1234567890123456";
if (secret.Length != 16)
{
ICryptoNet cryptoNet = new CryptoNetAes();
var file = new FileInfo(SymmetricKeyFile);
cryptoNet.ExportKeyAndSave(file);
Console.WriteLine("key should be 16 character long");
Environment.Exit(1);
}

Debug.Assert(File.Exists(file.FullName));
var key = Encoding.UTF8.GetBytes(symmetricKey);
var iv = Encoding.UTF8.GetBytes(secret);

var encrypt = cryptoNet.EncryptFromString(ConfidentialDummyData);
ICryptoNet encryptClient = new CryptoNetAes(key, iv);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);

ICryptoNet cryptoNetKeyImport = new CryptoNetAes(file);
var decrypt = cryptoNetKeyImport.DecryptToString(encrypt);
ICryptoNet decryptClient = new CryptoNetAes(key, iv);
var decrypt = decryptClient.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);
}
Debug.Assert(ConfidentialDummyData == decrypt);
}

public static void Example_3_Encrypt_Decrypt_Content_With_Own_SymmetricKey()
{
var symmetricKey = "12345678901234567890123456789012";
if (symmetricKey.Length != 32)
{
Console.WriteLine("key should be 32 character long");
Environment.Exit(0);
}

var secret = "1234567890123456";
if (secret.Length != 16)
{
Console.WriteLine("key should be 16 character long");
Environment.Exit(1);
}

var key = Encoding.UTF8.GetBytes(symmetricKey);
var iv = Encoding.UTF8.GetBytes(secret);

ICryptoNet encryptClient = new CryptoNetAes(key, iv);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);

ICryptoNet decryptClient = new CryptoNetAes(key, iv);
var decrypt = decryptClient.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);
}
public static void Example_4_Encrypt_Decrypt_Content_With_Human_Readable_Key_Secret_SymmetricKey()
{
var symmetricKey = UniqueKeyGenerator("symmetricKey");
var secret = new string(UniqueKeyGenerator("password").Take(16).ToArray());

public static void Example_4_Encrypt_Decrypt_Content_With_Human_Readable_Key_Secret_SymmetricKey()
{
var symmetricKey = UniqueKeyGenerator("symmetricKey");
var secret = new string(UniqueKeyGenerator("password").Take(16).ToArray());
var key = Encoding.UTF8.GetBytes(symmetricKey);
var iv = Encoding.UTF8.GetBytes(secret);

var key = Encoding.UTF8.GetBytes(symmetricKey);
var iv = Encoding.UTF8.GetBytes(secret);
ICryptoNet encryptClient = new CryptoNetAes(key, iv);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);

ICryptoNet encryptClient = new CryptoNetAes(key, iv);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);
ICryptoNet decryptClient = new CryptoNetAes(key, iv);
var decrypt = decryptClient.DecryptToString(encrypt);

ICryptoNet decryptClient = new CryptoNetAes(key, iv);
var decrypt = decryptClient.DecryptToString(encrypt);
Debug.Assert(ConfidentialDummyData == decrypt);
}

Debug.Assert(ConfidentialDummyData == decrypt);
}
public static void Example_5_Encrypt_And_Decrypt_PdfFile_With_SymmetricKey_Test(string filename)
{
ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();

public static void Example_5_Encrypt_And_Decrypt_PdfFile_With_SymmetricKey_Test(string filename)
{
ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();
FileInfo fi = new FileInfo(filename);

FileInfo fi = new FileInfo(filename);
ICryptoNet encryptClient = new CryptoNetAes(key);
string pdfFilePath = Path.Combine(BaseFolder, filename);
byte[] pdfFileBytes = File.ReadAllBytes(pdfFilePath);
var encrypt = encryptClient.EncryptFromBytes(pdfFileBytes);

ICryptoNet encryptClient = new CryptoNetAes(key);
string pdfFilePath = Path.Combine(BaseFolder, filename);
byte[] pdfFileBytes = File.ReadAllBytes(pdfFilePath);
var encrypt = encryptClient.EncryptFromBytes(pdfFileBytes);
ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToBytes(encrypt);
string pdfDecryptedFilePath = $"TestFiles\\{Path.GetFileNameWithoutExtension(fi.Name)}-decrypted.{fi.Extension}";
File.WriteAllBytes(pdfDecryptedFilePath, decrypt);

ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToBytes(encrypt);
string pdfDecryptedFilePath = $"TestFiles\\{Path.GetFileNameWithoutExtension(fi.Name)}-decrypted.{fi.Extension}";
File.WriteAllBytes(pdfDecryptedFilePath, decrypt);
var isIdenticalFile = CryptoNetUtils.ByteArrayCompare(pdfFileBytes, decrypt);
Debug.Assert(isIdenticalFile);
}

var isIdenticalFile = CryptoNetUtils.ByteArrayCompare(pdfFileBytes, decrypt);
Debug.Assert(isIdenticalFile);
}
public static string UniqueKeyGenerator(string input)
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hash = MD5.HashData(inputBytes);

public static string UniqueKeyGenerator(string input)
StringBuilder sb = new StringBuilder();
foreach (var t in hash)
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hash = MD5.HashData(inputBytes);

StringBuilder sb = new StringBuilder();
foreach (var t in hash)
{
sb.Append(t.ToString("X2"));
}
return sb.ToString();
sb.Append(t.ToString("X2"));
}
return sb.ToString();
}
}

0 comments on commit a28b438

Please sign in to comment.