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()); } // --- Key Generation --- [Test] public void InitSymmetricEncryptionKey_ReturnsAes256Key() { String key = SacsEncryptionHelper.InitSymmetricEncryptionKey(); Assert.That(Convert.FromBase64String(key), Has.Length.EqualTo(32)); } [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 = SacsEncryptionHelper.InitSymmetricEncryptionKey(); String encrypted = SacsEncryptionHelper.EncryptAuthenticated(value, key, "Tests:SacsEncryptionHelper"); String decrypted = SacsEncryptionHelper.DecryptAuthenticated(encrypted, key, "Tests:SacsEncryptionHelper"); Assert.That(encrypted, Is.Not.EqualTo(value)); Assert.That(encrypted, Does.StartWith(SacsAuthenticatedEncryption.EnvelopePrefix)); Assert.That(decrypted, Is.EqualTo(value)); } // --- The End --- } }