summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crypto/test/src/crypto/test/AsconTest.cs39
-rw-r--r--crypto/test/src/crypto/test/SparkleTest.cs23
2 files changed, 53 insertions, 9 deletions
diff --git a/crypto/test/src/crypto/test/AsconTest.cs b/crypto/test/src/crypto/test/AsconTest.cs
index b649cfa86..835665ad0 100644
--- a/crypto/test/src/crypto/test/AsconTest.cs
+++ b/crypto/test/src/crypto/test/AsconTest.cs
@@ -586,6 +586,17 @@ namespace Org.BouncyCastle.Crypto.Tests
             {
                 //expected
             }
+            ascon.Init(true, param);
+            try
+            {
+                int need = ascon.GetUpdateOutputSize(64);
+                ascon.ProcessBytes(new byte[64], 0, 64, new byte[need], 1);
+                Assert.Fail("output for ProcessBytes is too short");
+            }
+            catch (OutputLengthException)
+            {
+                //expected
+            }
             try
             {
                 ascon.DoFinal(new byte[2], 2);
@@ -695,6 +706,7 @@ namespace Org.BouncyCastle.Crypto.Tests
             offset = ascon.ProcessBytes(m7, 0, split, c9, 0);
             offset += ascon.ProcessBytes(m7, split, m7.Length - split, c9, offset);
             offset += ascon.DoFinal(c9, offset);
+
             if (!Arrays.AreEqual(c7, c8) || !Arrays.AreEqual(c7, c9))
             {
                 Assert.Fail("Splitting input of plaintext should output the same ciphertext");
@@ -825,6 +837,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 
         private static void ImplTestVectorsDigest(AsconDigest.AsconParameters asconParameters, string filename)
         {
+            Random random = new Random();
             var ascon = CreateDigest(asconParameters);
             var map = new Dictionary<string, string>();
             using (var src = new StreamReader(
@@ -840,10 +853,20 @@ namespace Org.BouncyCastle.Crypto.Tests
                         byte[] expected = Hex.Decode(map["MD"]);
                         map.Clear();
 
-                        ascon.BlockUpdate(ptByte, 0, ptByte.Length);
                         byte[] hash = new byte[ascon.GetDigestSize()];
+
+                        ascon.BlockUpdate(ptByte, 0, ptByte.Length);
                         ascon.DoFinal(hash, 0);
                         Assert.True(Arrays.AreEqual(expected, hash));
+
+                        if (ptByte.Length > 1)
+                        {
+                            int split = random.Next(1, ptByte.Length);
+                            ascon.BlockUpdate(ptByte, 0, split);
+                            ascon.BlockUpdate(ptByte, split, ptByte.Length - split);
+                            ascon.DoFinal(hash, 0);
+                            Assert.IsTrue(Arrays.AreEqual(expected, hash));
+                        }
                     }
                     else
                     {
@@ -865,7 +888,6 @@ namespace Org.BouncyCastle.Crypto.Tests
             Random random = new Random();
             var asconEngine = CreateEngine(asconParameters);
             var buf = new Dictionary<string, string>();
-            //TestSampler sampler = new TestSampler();
             using (var src = new StreamReader(SimpleTest.GetTestDataAsStream("crypto.ascon.LWC_AEAD_KAT_" + filename + ".txt")))
             {
                 Dictionary<string, string> map = new Dictionary<string, string>();
@@ -929,6 +951,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 
         private static void ImplTestVectorsXof(AsconXof.AsconParameters asconParameters, string filename)
         {
+            Random random = new Random();
             var ascon = CreateXof(asconParameters);
             var buf = new Dictionary<string, string>();
             using (var src = new StreamReader(
@@ -945,10 +968,20 @@ namespace Org.BouncyCastle.Crypto.Tests
                         byte[] expected = Hex.Decode(map["MD"]);
                         map.Clear();
 
-                        ascon.BlockUpdate(ptByte, 0, ptByte.Length);
                         byte[] hash = new byte[ascon.GetDigestSize()];
+
+                        ascon.BlockUpdate(ptByte, 0, ptByte.Length);
                         ascon.DoFinal(hash, 0);
                         Assert.True(Arrays.AreEqual(expected, hash));
+
+                        if (ptByte.Length > 1)
+                        {
+                            int split = random.Next(1, ptByte.Length);
+                            ascon.BlockUpdate(ptByte, 0, split);
+                            ascon.BlockUpdate(ptByte, split, ptByte.Length - split);
+                            ascon.DoFinal(hash, 0);
+                            Assert.IsTrue(Arrays.AreEqual(expected, hash));
+                        }
                     }
                     else
                     {
diff --git a/crypto/test/src/crypto/test/SparkleTest.cs b/crypto/test/src/crypto/test/SparkleTest.cs
index 712223a86..425aee2c2 100644
--- a/crypto/test/src/crypto/test/SparkleTest.cs
+++ b/crypto/test/src/crypto/test/SparkleTest.cs
@@ -366,7 +366,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 
         private static void ImplTestExceptionsDigest(SparkleDigest.SparkleParameters sparkleParameters)
         {
-            var sparkle = new SparkleDigest(sparkleParameters);
+            var sparkle = CreateDigest(sparkleParameters);
 
             try
             {
@@ -383,7 +383,7 @@ namespace Org.BouncyCastle.Crypto.Tests
                 sparkle.DoFinal(new byte[sparkle.GetDigestSize() - 1], 2);
                 Assert.Fail(sparkle.AlgorithmName + ": output for Dofinal is too short");
             }
-            catch (DataLengthException)
+            catch (OutputLengthException)
             {
                 //expected
             }
@@ -391,7 +391,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 
         private void ImplTestExceptionsEngine(SparkleEngine.SparkleParameters sparkleParameters)
         {
-            var sparkle = new SparkleEngine(sparkleParameters);
+            var sparkle = CreateEngine(sparkleParameters);
 
             int keysize = sparkle.GetKeyBytesSize(), ivsize = sparkle.GetIVBytesSize();
             int offset;
@@ -548,6 +548,17 @@ namespace Org.BouncyCastle.Crypto.Tests
             {
                 //expected
             }
+            sparkle.Init(true, param);
+            try
+            {
+                int need = sparkle.GetUpdateOutputSize(64);
+                sparkle.ProcessBytes(new byte[64], 0, 64, new byte[need], 1);
+                Assert.Fail("output for ProcessBytes is too short");
+            }
+            catch (OutputLengthException)
+            {
+                //expected
+            }
             try
             {
                 sparkle.DoFinal(new byte[2], 2);
@@ -639,10 +650,9 @@ namespace Org.BouncyCastle.Crypto.Tests
             byte[] c7 = new byte[sparkle.GetOutputSize(m7.Length)];
             byte[] c8 = new byte[c7.Length];
             byte[] c9 = new byte[c7.Length];
-            sparkle.Init(true, param);
             sparkle.ProcessAadBytes(aad2, 0, aad2.Length);
             offset = sparkle.ProcessBytes(m7, 0, m7.Length, c7, 0);
-            sparkle.DoFinal(c7, offset);
+            offset += sparkle.DoFinal(c7, offset);
 
             // TODO Maybe use a different IV for this
             sparkle.Init(true, param);
@@ -658,6 +668,7 @@ namespace Org.BouncyCastle.Crypto.Tests
             offset = sparkle.ProcessBytes(m7, 0, split, c9, 0);
             offset += sparkle.ProcessBytes(m7, split, m7.Length - split, c9, offset);
             offset += sparkle.DoFinal(c9, offset);
+
             if (!Arrays.AreEqual(c7, c8) || !Arrays.AreEqual(c7, c9))
             {
                 Assert.Fail("Splitting input of plaintext should output the same ciphertext");
@@ -780,7 +791,7 @@ namespace Org.BouncyCastle.Crypto.Tests
 
                         if (ptByte.Length > 1)
                         {
-                            int split = random.Next(1, ptByte.Length - 1);
+                            int split = random.Next(1, ptByte.Length);
                             sparkle.BlockUpdate(ptByte, 0, split);
                             sparkle.BlockUpdate(ptByte, split, ptByte.Length - split);
                             sparkle.DoFinal(hash, 0);