-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
16 changed files
with
1,419 additions
and
1,479 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
84 changes: 42 additions & 42 deletions
84
Effortless.Net.Encryption.Tests.Unit/DiffieHellmanTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
172
Effortless.Net.Encryption.Tests.Unit/DigitalSignatureTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
8 changes: 4 additions & 4 deletions
8
Effortless.Net.Encryption.Tests.Unit/Effortless.Net.Encryption.Tests.Unit.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 2 additions & 0 deletions
2
Effortless.Net.Encryption.Tests.Unit/Effortless.Net.Encryption.Tests.Unit.csproj.DotSettings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
Oops, something went wrong.