summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2022-12-05 15:43:04 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2022-12-05 15:43:04 +0700
commit1d10c41689109e9aadc0d5e5b458cc943fd702a0 (patch)
tree5f500430de8de5f558043e031479d2bad1be498b
parentFix rounding issue with FF1 (diff)
downloadBouncyCastle.NET-ed25519-1d10c41689109e9aadc0d5e5b458cc943fd702a0.tar.xz
Rfc3394WrapEngine: check input length in Unwrap
-rw-r--r--crypto/src/crypto/engines/RFC3394WrapEngine.cs4
-rw-r--r--crypto/test/src/crypto/test/AESWrapTest.cs22
2 files changed, 21 insertions, 5 deletions
diff --git a/crypto/src/crypto/engines/RFC3394WrapEngine.cs b/crypto/src/crypto/engines/RFC3394WrapEngine.cs
index e68e45365..ff3a4e0a0 100644
--- a/crypto/src/crypto/engines/RFC3394WrapEngine.cs
+++ b/crypto/src/crypto/engines/RFC3394WrapEngine.cs
@@ -128,6 +128,10 @@ namespace Org.BouncyCastle.Crypto.Engines
 			{
 				throw new InvalidOperationException("not set for unwrapping");
 			}
+            if (inLen < iv.Length)
+            {
+                throw new InvalidCipherTextException("unwrap data too short");
+            }
 
 			int n = inLen / 8;
 
diff --git a/crypto/test/src/crypto/test/AESWrapTest.cs b/crypto/test/src/crypto/test/AESWrapTest.cs
index beaa3d3cd..7d9bcd497 100644
--- a/crypto/test/src/crypto/test/AESWrapTest.cs
+++ b/crypto/test/src/crypto/test/AESWrapTest.cs
@@ -163,23 +163,35 @@ namespace Org.BouncyCastle.Crypto.Tests
 			}
 
 			//
-			// short test
+			// short tests
 			//
 			try
 			{
 				wrapper.Init(false, key);
 
-				wrapper.Unwrap(buf, 0, buf.Length / 2);
+				wrapper.Unwrap(buf, 0, 0);
 
-				return new SimpleTestResult(false, Name + ": failed unwrap short test.");
+				return new SimpleTestResult(false, Name + ": failed unwrap short test 1.");
 			}
 			catch (InvalidCipherTextException)
 			{
 				// expected
 			}
+            try
+            {
+                wrapper.Init(false, key);
 
-			try
-			{
+                wrapper.Unwrap(buf, 0, buf.Length / 2);
+
+                return new SimpleTestResult(false, Name + ": failed unwrap short test 2.");
+            }
+            catch (InvalidCipherTextException)
+            {
+                // expected
+            }
+
+            try
+            {
 				wrapper.Init(true, key);
 
 				wrapper.Wrap(buf, 0, 15);