Skip to content

Commit

Permalink
Update to .Net 8
Browse files Browse the repository at this point in the history
  • Loading branch information
sjh37 committed Apr 30, 2024
1 parent f2d7774 commit f196e81
Show file tree
Hide file tree
Showing 16 changed files with 1,419 additions and 1,479 deletions.
497 changes: 247 additions & 250 deletions Effortless.Net.Encryption.Tests.Unit/ByteTests.cs

Large diffs are not rendered by default.

84 changes: 42 additions & 42 deletions Effortless.Net.Encryption.Tests.Unit/DiffieHellmanTests.cs
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
using NUnit.Framework;
using NUnit.Framework.Legacy;

namespace Effortless.Net.Encryption.Tests.Unit
namespace Effortless.Net.Encryption.Tests.Unit;

[TestFixture]
public class DiffieHellmanTests
{
[TestFixture]
public class DiffieHellmanTests
[Test]
public void Encrypt_Decrypt()
{
[Test]
public void Encrypt_Decrypt()
{
const string text = "Hello World!";

var alice = new DiffieHellman();
var bob = new DiffieHellman();

// Bob uses Alice's public key to encrypt his message.
var secretMessage = bob.Encrypt(alice, text);

// Alice uses Bob's public key and IV to decrypt the secret message.
var decryptedMessage = alice.Decrypt(bob, secretMessage);
Assert.AreEqual(text, decryptedMessage);
}

[Test]
public void MultipleTests()
{
const string text = "Hello World!";

var alice = new DiffieHellman();
var bob = new DiffieHellman();

var secretMessageA = alice.Encrypt(bob, text);
var secretMessage1 = bob.Encrypt(alice, text);
var decryptedMessage = alice.Decrypt(bob, secretMessage1);
var secretMessageB = alice.Encrypt(bob, text);
Assert.AreEqual(text, decryptedMessage);
Assert.AreEqual(secretMessageA, secretMessageB);

// See if its repeatable due to IV being replaced by previous decryption
var secretMessage2 = bob.Encrypt(alice, text);
decryptedMessage = alice.Decrypt(bob, secretMessage2);
Assert.AreEqual(text, decryptedMessage);

// Should be the same if nothing has changed
Assert.AreEqual(secretMessage1, secretMessage2);
}
const string text = "Hello World!";

var alice = new DiffieHellman();
var bob = new DiffieHellman();

// Bob uses Alice's public key to encrypt his message.
var secretMessage = bob.Encrypt(alice, text);

// Alice uses Bob's public key and IV to decrypt the secret message.
var decryptedMessage = alice.Decrypt(bob, secretMessage);
ClassicAssert.AreEqual(text, decryptedMessage);
}

[Test]
public void MultipleTests()
{
const string text = "Hello World!";

var alice = new DiffieHellman();
var bob = new DiffieHellman();

var secretMessageA = alice.Encrypt(bob, text);
var secretMessage1 = bob.Encrypt(alice, text);
var decryptedMessage = alice.Decrypt(bob, secretMessage1);
var secretMessageB = alice.Encrypt(bob, text);
ClassicAssert.AreEqual(text, decryptedMessage);
ClassicAssert.AreEqual(secretMessageA, secretMessageB);

// See if its repeatable due to IV being replaced by previous decryption
var secretMessage2 = bob.Encrypt(alice, text);
decryptedMessage = alice.Decrypt(bob, secretMessage2);
ClassicAssert.AreEqual(text, decryptedMessage);

// Should be the same if nothing has changed
ClassicAssert.AreEqual(secretMessage1, secretMessage2);
}
}
54 changes: 27 additions & 27 deletions Effortless.Net.Encryption.Tests.Unit/DigestTests.cs
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
using NUnit.Framework;
using NUnit.Framework.Legacy;

namespace Effortless.Net.Encryption.Tests.Unit
namespace Effortless.Net.Encryption.Tests.Unit;

public class DigestTests
{
public class DigestTests
[Test]
[TestCase(HashType.MD5, "", "ED8DEEF5BA6E0731D0C01EE7C4BAFC36")]
[TestCase(HashType.SHA1, "", "D2EFCBBA102ED3339947E85F4141EB08926E40E9")]
[TestCase(HashType.SHA256, "", "A07E4F7343246C82B26F32E56F85418D518D8B2F2DAE77F1D56FE7AF50DB97AF")]
[TestCase(HashType.SHA384, "", "7428EA564921C0E1F5C927D4E72F0C4A01D9A7AC3D7A204C5A9D3040A88249953090D9763FEDA173FEE3FA71F75E27DD")]
[TestCase(HashType.SHA512, "", "2C5F15C7829564C32AF70D9AEE7389BDE5D0544534010C9058D0D7A0CC7DE49656E0674041A0907B80B1B05E18B459B5428AE8EE0F43A680F0922EE3D00E6A14")]
[TestCase(HashType.MD5, "key", "63602C271DFB9E8A2B16823A5DC5020E")]
[TestCase(HashType.SHA1, "key", "6FD75D8D3D3A7FB244F04178AA50C8AF2180BA72")]
[TestCase(HashType.SHA256, "key", "F7AAE2D999881387B8362976AD878D041527F78F7EFF7D1EAFA1A6212A2A4061")]
[TestCase(HashType.SHA384, "key", "B78E547A75A256B7902F05378D452AB6C8192D48232E312B466E40E5ED9BE1A5B77053251C5D0177EFF1DDC2A6DE9B1E")]
[TestCase(HashType.SHA512, "key", "A300C834A06AA8935B27991C2F3D044009AC1952E0B51845DD8AE2178F778C82F012C3A343266C41A493A8D16966C25A4F88E2A8FBEAE6AD8D5F0AA6FE29665A")]
public void CreateAndCreateFromString(HashType hashType, string secretKey, string hash)
{
[Test]
[TestCase(HashType.MD5, "", "ED8DEEF5BA6E0731D0C01EE7C4BAFC36")]
[TestCase(HashType.SHA1, "", "D2EFCBBA102ED3339947E85F4141EB08926E40E9")]
[TestCase(HashType.SHA256, "", "A07E4F7343246C82B26F32E56F85418D518D8B2F2DAE77F1D56FE7AF50DB97AF")]
[TestCase(HashType.SHA384, "", "7428EA564921C0E1F5C927D4E72F0C4A01D9A7AC3D7A204C5A9D3040A88249953090D9763FEDA173FEE3FA71F75E27DD")]
[TestCase(HashType.SHA512, "", "2C5F15C7829564C32AF70D9AEE7389BDE5D0544534010C9058D0D7A0CC7DE49656E0674041A0907B80B1B05E18B459B5428AE8EE0F43A680F0922EE3D00E6A14")]
[TestCase(HashType.MD5, "key", "63602C271DFB9E8A2B16823A5DC5020E")]
[TestCase(HashType.SHA1, "key", "6FD75D8D3D3A7FB244F04178AA50C8AF2180BA72")]
[TestCase(HashType.SHA256, "key", "F7AAE2D999881387B8362976AD878D041527F78F7EFF7D1EAFA1A6212A2A4061")]
[TestCase(HashType.SHA384, "key", "B78E547A75A256B7902F05378D452AB6C8192D48232E312B466E40E5ED9BE1A5B77053251C5D0177EFF1DDC2A6DE9B1E")]
[TestCase(HashType.SHA512, "key", "A300C834A06AA8935B27991C2F3D044009AC1952E0B51845DD8AE2178F778C82F012C3A343266C41A493A8D16966C25A4F88E2A8FBEAE6AD8D5F0AA6FE29665A")]
public void CreateAndCreateFromString(HashType hashType, string secretKey, string hash)
{
const string data = "Hello";
var digest1 = Digest.Create(hashType, data, secretKey);
Assert.AreEqual(hash, digest1.Hash);
Assert.AreEqual(data, digest1.Data);
Assert.AreEqual(hashType, digest1.HashType);
const string data = "Hello";
var digest1 = Digest.Create(hashType, data, secretKey);
ClassicAssert.AreEqual(hash, digest1.Hash);
ClassicAssert.AreEqual(data, digest1.Data);
ClassicAssert.AreEqual(hashType, digest1.HashType);

// Check its reversable
var digest1String = digest1.ToString();
var digest2 = Digest.CreateFromString(digest1String, secretKey);
Assert.AreEqual(digest1.Data, digest2.Data);
Assert.AreEqual(digest1.Hash, digest2.Hash);
Assert.AreEqual(hashType, digest2.HashType);
}
// Check its reversable
var digest1String = digest1.ToString();
var digest2 = Digest.CreateFromString(digest1String, secretKey);
ClassicAssert.AreEqual(digest1.Data, digest2.Data);
ClassicAssert.AreEqual(digest1.Hash, digest2.Hash);
ClassicAssert.AreEqual(hashType, digest2.HashType);
}
}
172 changes: 81 additions & 91 deletions Effortless.Net.Encryption.Tests.Unit/DigitalSignatureTests.cs
Original file line number Diff line number Diff line change
@@ -1,109 +1,99 @@
using System;
using NUnit.Framework;
using NUnit.Framework.Legacy;

namespace Effortless.Net.Encryption.Tests.Unit
namespace Effortless.Net.Encryption.Tests.Unit;

[TestFixture]
public class DigitalSignatureTests
{
[TestFixture]
public class DigitalSignatureTests
[OneTimeSetUp]
public void OneTimeSetUp()
{
private byte[] _hash;
_hash = Hash.Create(HashType.SHA256, "Hello world", string.Empty);
}

[OneTimeSetUp]
public void OneTimeSetUp()
{
_hash = Hash.Create(HashType.SHA256, "Hello world", string.Empty);
}

[Test]
[TestCase(512)]
[TestCase(1024)]
[TestCase(2048)]
[TestCase(4096)]
//[TestCase(8192)] // Slow
//[TestCase(16384)] // Very slow
public void KeySizeTests(int keySize)
{
var ds = new DigitalSignature(keySize, "SHA256");
ds.AssignNewKey();

var signature = ds.SignData(_hash);
var result = ds.VerifySignature(_hash, signature);
Assert.IsTrue(result);
}

[Test]
[TestCase(1024, "SHA1")]
[TestCase(1024, "SHA256")]
[TestCase(1024, "SHA384")]
[TestCase(1024, "SHA512")]
[TestCase(2048, "SHA1")]
[TestCase(2048, "SHA256")]
[TestCase(2048, "SHA384")]
[TestCase(2048, "SHA512")]
public void HashAlgorithmTests(int keySize, string hashAlgorithm)
{
var ds = new DigitalSignature(keySize, hashAlgorithm);
ds.AssignNewKey();

byte[] hash;
switch (hashAlgorithm)
{
case "SHA1":
hash = Hash.Create(HashType.SHA1, "Hello world", string.Empty);
break;
case "SHA256":
hash = Hash.Create(HashType.SHA256, "Hello world", string.Empty);
break;
case "SHA384":
hash = Hash.Create(HashType.SHA384, "Hello world", string.Empty);
break;
case "SHA512":
hash = Hash.Create(HashType.SHA512, "Hello world", string.Empty);
break;
default:
throw new ArgumentException("hashAlgorithm");
}
var signature = ds.SignData(hash);
var result = ds.VerifySignature(hash, signature);
Assert.IsTrue(result);
}

[Test]
public void SavedPublicAndPrivateKeysMatch()
{
var ds = new DigitalSignature();
ds.AssignNewKey();
private byte[] _hash;

[Test]
[TestCase(512)]
[TestCase(1024)]
[TestCase(2048)]
[TestCase(4096)]
//[TestCase(8192)] // Slow
//[TestCase(16384)] // Very slow
public void KeySizeTests(int keySize)
{
var ds = new DigitalSignature(keySize, "SHA256");
ds.AssignNewKey();

ds.SavePublicKey(out var exponent1, out var modulus1);
ds.SavePrivateKey(out var exponent2, out var modulus2, out var p, out var q, out var dp, out var dq, out var inverseQ, out var d);
var signature = ds.SignData(_hash);
var result = ds.VerifySignature(_hash, signature);
ClassicAssert.IsTrue(result);
}

Assert.AreEqual(exponent1, exponent2);
Assert.AreEqual(modulus1, modulus2);
}
[Test]
[TestCase(1024, "SHA1")]
[TestCase(1024, "SHA256")]
[TestCase(1024, "SHA384")]
[TestCase(1024, "SHA512")]
[TestCase(2048, "SHA1")]
[TestCase(2048, "SHA256")]
[TestCase(2048, "SHA384")]
[TestCase(2048, "SHA512")]
public void HashAlgorithmTests(int keySize, string hashAlgorithm)
{
var ds = new DigitalSignature(keySize, hashAlgorithm);
ds.AssignNewKey();

[Test]
public void SaveAndLoadKeys()
var hash = hashAlgorithm switch
{
var ds = new DigitalSignature();
ds.AssignNewKey();
"SHA1" => Hash.Create(HashType.SHA1, "Hello world", string.Empty),
"SHA256" => Hash.Create(HashType.SHA256, "Hello world", string.Empty),
"SHA384" => Hash.Create(HashType.SHA384, "Hello world", string.Empty),
"SHA512" => Hash.Create(HashType.SHA512, "Hello world", string.Empty),
_ => throw new ArgumentException("hashAlgorithm")
};
var signature = ds.SignData(hash);
var result = ds.VerifySignature(hash, signature);
ClassicAssert.IsTrue(result);
}

[Test]
public void SavedPublicAndPrivateKeysMatch()
{
var ds = new DigitalSignature();
ds.AssignNewKey();

ds.SavePublicKey(out var exponent1, out var modulus1);
ds.SavePrivateKey(out var exponent2, out var modulus2, out _, out _, out _, out _, out _, out _);

ClassicAssert.AreEqual(exponent1, exponent2);
ClassicAssert.AreEqual(modulus1, modulus2);
}

[Test]
public void SaveAndLoadKeys()
{
var ds = new DigitalSignature();
ds.AssignNewKey();

ds.SavePublicKey(out var exponent1, out var modulus1);
ds.SavePrivateKey(out var exponent2, out var modulus2, out var p, out var q, out var dp, out var dq, out var inverseQ, out var d);
ds.SavePublicKey(out var exponent1, out var modulus1);
ds.SavePrivateKey(out var exponent2, out var modulus2, out var p, out var q, out var dp, out var dq, out var inverseQ, out var d);

var signature1 = ds.SignData(_hash);
var result1 = ds.VerifySignature(_hash, signature1);
Assert.IsTrue(result1);
var signature1 = ds.SignData(_hash);
var result1 = ds.VerifySignature(_hash, signature1);
ClassicAssert.IsTrue(result1);


var sut = new DigitalSignature();
sut.LoadPublicKey(exponent1, modulus1);
sut.LoadPrivateKey(exponent2, modulus2, p, q, dp, dq, inverseQ, d);
var sut = new DigitalSignature();
sut.LoadPublicKey(exponent1, modulus1);
sut.LoadPrivateKey(exponent2, modulus2, p, q, dp, dq, inverseQ, d);

var signature2 = ds.SignData(_hash);
var result2 = ds.VerifySignature(_hash, signature2);
Assert.IsTrue(result2);
var signature2 = ds.SignData(_hash);
var result2 = ds.VerifySignature(_hash, signature2);
ClassicAssert.IsTrue(result2);

Assert.AreEqual(signature1, signature2);
}
ClassicAssert.AreEqual(signature1, signature2);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">Latest</s:String></wpf:ResourceDictionary>
Loading

0 comments on commit f196e81

Please sign in to comment.