diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2021-07-08 17:05:55 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2021-07-08 17:05:55 +0700 |
commit | 4206023cd1ba392562ecc3d9b3f37f7e1b456d76 (patch) | |
tree | 12b659481c05c9e93ff7dfd863e2b996cf793b52 /crypto/src/asn1/Asn1InputStream.cs | |
parent | Check key sizes strictly (diff) | |
download | BouncyCastle.NET-ed25519-4206023cd1ba392562ecc3d9b3f37f7e1b456d76.tar.xz |
ASN.1 updates from bc-java
Diffstat (limited to 'crypto/src/asn1/Asn1InputStream.cs')
-rw-r--r-- | crypto/src/asn1/Asn1InputStream.cs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/crypto/src/asn1/Asn1InputStream.cs b/crypto/src/asn1/Asn1InputStream.cs index 4f99301b3..d7edae9e0 100644 --- a/crypto/src/asn1/Asn1InputStream.cs +++ b/crypto/src/asn1/Asn1InputStream.cs @@ -133,22 +133,29 @@ namespace Org.BouncyCastle.Asn1 return CreatePrimitiveDerObject(tagNo, defIn, tmpBuffers); } - internal virtual Asn1EncodableVector ReadVector(DefiniteLengthInputStream dIn) + internal virtual Asn1EncodableVector ReadVector() { - if (dIn.Remaining < 1) + Asn1Object o = ReadObject(); + if (null == o) return new Asn1EncodableVector(0); - Asn1InputStream subStream = new Asn1InputStream(dIn); Asn1EncodableVector v = new Asn1EncodableVector(); - Asn1Object o; - while ((o = subStream.ReadObject()) != null) + do { v.Add(o); } - + while ((o = ReadObject()) != null); return v; } + internal virtual Asn1EncodableVector ReadVector(DefiniteLengthInputStream dIn) + { + if (dIn.Remaining < 1) + return new Asn1EncodableVector(0); + + return new Asn1InputStream(dIn).ReadVector(); + } + internal virtual DerSequence CreateDerSequence( DefiniteLengthInputStream dIn) { @@ -405,7 +412,12 @@ namespace Org.BouncyCastle.Asn1 case Asn1Tags.Integer: return new DerInteger(bytes, false); case Asn1Tags.Null: - return DerNull.Instance; // actual content is ignored (enforce 0 length?) + { + if (0 != bytes.Length) + throw new InvalidOperationException("malformed NULL encoding encountered"); + + return DerNull.Instance; + } case Asn1Tags.NumericString: return new DerNumericString(bytes); case Asn1Tags.OctetString: |