summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2023-04-27 22:58:54 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2023-04-27 22:58:54 +0700
commitdf822be413672da4ddc204b7e8d9d6ab04a13186 (patch)
tree61a4efef735a26e4c416a37748077593fd0a47e4
parentSparkle: Add buffering tests (diff)
downloadBouncyCastle.NET-ed25519-df822be413672da4ddc204b7e8d9d6ab04a13186.tar.xz
Sparkle: Fix GetUpdateOutputSize(0) behaviour
-rw-r--r--crypto/src/crypto/engines/SparkleEngine.cs2
-rw-r--r--crypto/test/src/crypto/test/AsconTest.cs6
-rw-r--r--crypto/test/src/crypto/test/SparkleTest.cs6
3 files changed, 13 insertions, 1 deletions
diff --git a/crypto/src/crypto/engines/SparkleEngine.cs b/crypto/src/crypto/engines/SparkleEngine.cs
index 4c558b70f..053ca3bb5 100644
--- a/crypto/src/crypto/engines/SparkleEngine.cs
+++ b/crypto/src/crypto/engines/SparkleEngine.cs
@@ -623,7 +623,7 @@ namespace Org.BouncyCastle.Crypto.Engines
         public int GetUpdateOutputSize(int len)
         {
             // The -1 is to account for the lazy processing of a full buffer
-            int total = System.Math.Max(0, len - 1);
+            int total = System.Math.Max(0, len) - 1;
 
             switch (m_state)
             {
diff --git a/crypto/test/src/crypto/test/AsconTest.cs b/crypto/test/src/crypto/test/AsconTest.cs
index 400767df0..8edaf9182 100644
--- a/crypto/test/src/crypto/test/AsconTest.cs
+++ b/crypto/test/src/crypto/test/AsconTest.cs
@@ -373,6 +373,9 @@ namespace Org.BouncyCastle.Crypto.Tests
                 random.NextBytes(output);
 
                 int length = ascon.ProcessBytes(plaintext, 0, split, output, 0);
+
+                Assert.AreEqual(0, ascon.GetUpdateOutputSize(0));
+
                 length += ascon.ProcessBytes(plaintext, split, plaintextLength - split, output, length);
                 length += ascon.DoFinal(output, length);
 
@@ -389,6 +392,9 @@ namespace Org.BouncyCastle.Crypto.Tests
                 random.NextBytes(output);
 
                 int length = ascon.ProcessBytes(ciphertext, 0, split, output, 0);
+
+                Assert.AreEqual(0, ascon.GetUpdateOutputSize(0));
+
                 length += ascon.ProcessBytes(ciphertext, split, ciphertextLength - split, output, length);
                 length += ascon.DoFinal(output, length);
 
diff --git a/crypto/test/src/crypto/test/SparkleTest.cs b/crypto/test/src/crypto/test/SparkleTest.cs
index ca6e7aa8b..712223a86 100644
--- a/crypto/test/src/crypto/test/SparkleTest.cs
+++ b/crypto/test/src/crypto/test/SparkleTest.cs
@@ -334,6 +334,9 @@ namespace Org.BouncyCastle.Crypto.Tests
                 random.NextBytes(output);
 
                 int length = sparkle.ProcessBytes(plaintext, 0, split, output, 0);
+
+                Assert.AreEqual(0, sparkle.GetUpdateOutputSize(0));
+
                 length += sparkle.ProcessBytes(plaintext, split, plaintextLength - split, output, length);
                 length += sparkle.DoFinal(output, length);
 
@@ -350,6 +353,9 @@ namespace Org.BouncyCastle.Crypto.Tests
                 random.NextBytes(output);
 
                 int length = sparkle.ProcessBytes(ciphertext, 0, split, output, 0);
+
+                Assert.AreEqual(0, sparkle.GetUpdateOutputSize(0));
+
                 length += sparkle.ProcessBytes(ciphertext, split, ciphertextLength - split, output, length);
                 length += sparkle.DoFinal(output, length);