summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crypto/src/asn1/Asn1InputStream.cs4
-rw-r--r--crypto/src/asn1/LazyASN1InputStream.cs62
2 files changed, 40 insertions, 26 deletions
diff --git a/crypto/src/asn1/Asn1InputStream.cs b/crypto/src/asn1/Asn1InputStream.cs
index 76bc3076d..b56d890fa 100644
--- a/crypto/src/asn1/Asn1InputStream.cs
+++ b/crypto/src/asn1/Asn1InputStream.cs
@@ -18,7 +18,7 @@ namespace Org.BouncyCastle.Asn1
     {
         private readonly int limit;
 
-        private readonly byte[][] tmpBuffers;
+        internal readonly byte[][] tmpBuffers;
 
         internal static int FindLimit(Stream input)
         {
@@ -64,7 +64,7 @@ namespace Org.BouncyCastle.Asn1
         {
         }
 
-        private Asn1InputStream(Stream input, int limit, byte[][] tmpBuffers)
+        internal Asn1InputStream(Stream input, int limit, byte[][] tmpBuffers)
             : base(input)
         {
             this.limit = limit;
diff --git a/crypto/src/asn1/LazyASN1InputStream.cs b/crypto/src/asn1/LazyASN1InputStream.cs
index 4cf2305fd..1a85e455a 100644
--- a/crypto/src/asn1/LazyASN1InputStream.cs
+++ b/crypto/src/asn1/LazyASN1InputStream.cs
@@ -3,31 +3,45 @@ using System.IO;
 
 namespace Org.BouncyCastle.Asn1
 {
-	public class LazyAsn1InputStream
-		: Asn1InputStream
-	{
-		public LazyAsn1InputStream(
-			byte[] input)
-			: base(input)
-		{
-		}
+    public class LazyAsn1InputStream
+        : Asn1InputStream
+    {
+        public LazyAsn1InputStream(
+            byte[] input)
+            : base(input)
+        {
+        }
 
-		public LazyAsn1InputStream(
-			Stream inputStream)
-			: base(inputStream)
-		{
-		}
+        public LazyAsn1InputStream(
+            Stream inputStream)
+            : base(inputStream)
+        {
+        }
 
-		internal override DerSequence CreateDerSequence(
-			DefiniteLengthInputStream dIn)
-		{
-			return new LazyDerSequence(dIn.ToArray());
-		}
+        internal LazyAsn1InputStream(Stream input, int limit, byte[][] tmpBuffers)
+            : base(input, limit, tmpBuffers)
+        {
+        }
 
-		internal override DerSet CreateDerSet(
-			DefiniteLengthInputStream dIn)
-		{
-			return new LazyDerSet(dIn.ToArray());
-		}
-	}
+        internal override DerSequence CreateDerSequence(
+            DefiniteLengthInputStream dIn)
+        {
+            return new LazyDerSequence(dIn.ToArray());
+        }
+
+        internal override DerSet CreateDerSet(
+            DefiniteLengthInputStream dIn)
+        {
+            return new LazyDerSet(dIn.ToArray());
+        }
+
+        internal override Asn1EncodableVector ReadVector(DefiniteLengthInputStream defIn)
+        {
+            int remaining = defIn.Remaining;
+            if (remaining < 1)
+                return new Asn1EncodableVector(0);
+
+            return new LazyAsn1InputStream(defIn, remaining, tmpBuffers).ReadVector();
+        }
+    }
 }