diff options
Diffstat (limited to 'crypto/src')
-rw-r--r-- | crypto/src/asn1/Asn1InputStream.cs | 4 | ||||
-rw-r--r-- | crypto/src/asn1/LazyASN1InputStream.cs | 62 |
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(); + } + } } |