summary refs log tree commit diff
path: root/crypto/src/asn1/Asn1InputStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/Asn1InputStream.cs')
-rw-r--r--crypto/src/asn1/Asn1InputStream.cs40
1 files changed, 18 insertions, 22 deletions
diff --git a/crypto/src/asn1/Asn1InputStream.cs b/crypto/src/asn1/Asn1InputStream.cs
index 3f7a65cc9..d03c7a6b5 100644
--- a/crypto/src/asn1/Asn1InputStream.cs
+++ b/crypto/src/asn1/Asn1InputStream.cs
@@ -401,11 +401,12 @@ namespace Org.BouncyCastle.Asn1
             switch (tagNo)
             {
             case Asn1Tags.BmpString:
-                return new DerBmpString(GetBmpCharBuffer(defIn));
+                return DerBmpString.CreatePrimitive(GetBmpCharBuffer(defIn));
             case Asn1Tags.Boolean:
-                return DerBoolean.FromOctetString(GetBuffer(defIn, tmpBuffers));
+                return DerBoolean.CreatePrimitive(GetBuffer(defIn, tmpBuffers));
             case Asn1Tags.Enumerated:
-                return DerEnumerated.FromOctetString(GetBuffer(defIn, tmpBuffers));
+                // TODO Ideally only clone if we used a buffer
+                return DerEnumerated.CreatePrimitive(GetBuffer(defIn, tmpBuffers), true);
             case Asn1Tags.ObjectIdentifier:
                 // TODO Ideally only clone if we used a buffer
                 return DerObjectIdentifier.CreatePrimitive(GetBuffer(defIn, tmpBuffers), true);
@@ -418,44 +419,39 @@ namespace Org.BouncyCastle.Asn1
             case Asn1Tags.BitString:
                 return DerBitString.CreatePrimitive(bytes);
             case Asn1Tags.GeneralizedTime:
-                return new DerGeneralizedTime(bytes);
+                return DerGeneralizedTime.CreatePrimitive(bytes);
             case Asn1Tags.GeneralString:
-                return new DerGeneralString(bytes);
+                return DerGeneralString.CreatePrimitive(bytes);
             case Asn1Tags.GraphicString:
                 return DerGraphicString.CreatePrimitive(bytes);
             case Asn1Tags.IA5String:
-                return new DerIA5String(bytes);
+                return DerIA5String.CreatePrimitive(bytes);
             case Asn1Tags.Integer:
-                return new DerInteger(bytes, false);
+                return DerInteger.CreatePrimitive(bytes);
             case Asn1Tags.Null:
-            {
-                if (0 != bytes.Length)
-                    throw new InvalidOperationException("malformed NULL encoding encountered");
-
-                return DerNull.Instance;
-            }
+                return Asn1Null.CreatePrimitive(bytes);
             case Asn1Tags.NumericString:
-                return new DerNumericString(bytes);
+                return DerNumericString.CreatePrimitive(bytes);
             case Asn1Tags.ObjectDescriptor:
                 return Asn1ObjectDescriptor.CreatePrimitive(bytes);
             case Asn1Tags.OctetString:
-                return new DerOctetString(bytes);
+                return Asn1OctetString.CreatePrimitive(bytes);
             case Asn1Tags.PrintableString:
-                return new DerPrintableString(bytes);
+                return DerPrintableString.CreatePrimitive(bytes);
             case Asn1Tags.RelativeOid:
                 return Asn1RelativeOid.CreatePrimitive(bytes, false);
             case Asn1Tags.T61String:
-                return new DerT61String(bytes);
+                return DerT61String.CreatePrimitive(bytes);
             case Asn1Tags.UniversalString:
-                return new DerUniversalString(bytes);
+                return DerUniversalString.CreatePrimitive(bytes);
             case Asn1Tags.UtcTime:
-                return new DerUtcTime(bytes);
+                return DerUtcTime.CreatePrimitive(bytes);
             case Asn1Tags.Utf8String:
-                return new DerUtf8String(bytes);
+                return DerUtf8String.CreatePrimitive(bytes);
             case Asn1Tags.VideotexString:
-                return new DerVideotexString(bytes);
+                return DerVideotexString.CreatePrimitive(bytes);
             case Asn1Tags.VisibleString:
-                return new DerVisibleString(bytes);
+                return DerVisibleString.CreatePrimitive(bytes);
             default:
                 throw new IOException("unknown tag " + tagNo + " encountered");
             }