78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
using System;
|
|
using System.Text;
|
|
using NUnit.Framework;
|
|
using Sarand.Net.Standard.Base.Helpers;
|
|
|
|
namespace Sacs.UnitTests.Net.Standard.Base.Helpers
|
|
{
|
|
[TestFixture]
|
|
public class SacsEncryptionHelper_Tester
|
|
{
|
|
// --- Base64 and Key Encoding ---
|
|
|
|
[TestCase("AQID", 3, true)]
|
|
[TestCase("AQID", 4, false)]
|
|
[TestCase("not base64", 0, false)]
|
|
[TestCase("", 0, true)]
|
|
[TestCase(null, 0, false)]
|
|
public void IsBase64_ValidatesContentAndDecodedLength(String value, Int32 expectedLength, Boolean expected)
|
|
{
|
|
Assert.That(SacsEncryptionHelper.IsBase64(value, expectedLength), Is.EqualTo(expected));
|
|
}
|
|
|
|
[Test]
|
|
public void EncodePlainKey_RepeatsAndTruncatesToRequestedLength()
|
|
{
|
|
String encoded = SacsEncryptionHelper.EncodePlainKey("abc", 8, Encoding.UTF8);
|
|
|
|
Assert.That(Convert.FromBase64String(encoded), Is.EqualTo(Encoding.UTF8.GetBytes("abcabcab")));
|
|
}
|
|
|
|
[TestCase(null)]
|
|
[TestCase("")]
|
|
[TestCase(" ")]
|
|
public void EncodePlainKey_RejectsMissingKey(String value)
|
|
{
|
|
Assert.That(() => SacsEncryptionHelper.EncodePlainKey(value), Throws.TypeOf<NotSupportedException>());
|
|
}
|
|
|
|
// --- Key and IV Generation ---
|
|
|
|
[Test]
|
|
public void InitSymmetricEncryptionKeyIV_ReturnsAes256KeyAndBlockSizedIv()
|
|
{
|
|
(String key, String iv) = SacsEncryptionHelper.InitSymmetricEncryptionKeyIV();
|
|
|
|
Assert.That(Convert.FromBase64String(key), Has.Length.EqualTo(32));
|
|
Assert.That(Convert.FromBase64String(iv), Has.Length.EqualTo(16));
|
|
}
|
|
|
|
[Test]
|
|
public void InitSymmetricEncryptionKey_ReturnsDifferentKeys()
|
|
{
|
|
String first = SacsEncryptionHelper.InitSymmetricEncryptionKey();
|
|
String second = SacsEncryptionHelper.InitSymmetricEncryptionKey();
|
|
|
|
Assert.That(second, Is.Not.EqualTo(first));
|
|
}
|
|
|
|
// --- Encryption ---
|
|
|
|
[TestCase("")]
|
|
[TestCase("Plain ASCII text")]
|
|
[TestCase("Unicode £ € 漢字 and emoji 😀")]
|
|
public void EncryptDecrypt_RoundTripsText(String value)
|
|
{
|
|
(String key, String iv) = SacsEncryptionHelper.InitSymmetricEncryptionKeyIV();
|
|
|
|
String encrypted = SacsEncryptionHelper.Encrypt(value, iv, key);
|
|
String decrypted = SacsEncryptionHelper.Decrypt(encrypted, iv, key);
|
|
|
|
Assert.That(encrypted, Is.Not.EqualTo(value));
|
|
Assert.That(decrypted, Is.EqualTo(value));
|
|
}
|
|
|
|
// --- The End ---
|
|
}
|
|
}
|