summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2021-10-15 17:47:24 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2021-10-15 17:47:24 +0700
commit3b5db17f9742229ccde2c96704610c2679c500ea (patch)
tree5cd2401791c7fb89ebf8183649696592e527079a
parentUse primitive encoding for short octet strings (diff)
downloadBouncyCastle.NET-ed25519-3b5db17f9742229ccde2c96704610c2679c500ea.tar.xz
Preserve laziness in substreams
-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(); + } + } }