Exemplo n.º 1
0
        /**
         * dump a Der object as a formatted string with indentation
         *
         * @param obj the Asn1Object to be dumped out.
         */
        private static void AsString(
            string indent,
            bool verbose,
            Asn1Object obj,
            StringBuilder buf)
        {
            if (obj is Asn1Sequence)
            {
                string tab = indent + Tab;
                buf.Append(indent);
                if (obj is BerSequence)
                {
                    buf.Append("BER Sequence");
                }
                else if (obj is DerSequence)
                {
                    buf.Append("DER Sequence");
                }
                else
                {
                    buf.Append("Sequence");
                }

                buf.Append(NewLine);

                foreach (Asn1Encodable o in ((Asn1Sequence)obj))
                {
                    if (o == null || o is Asn1Null)
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(NewLine);
                    }
                    else
                    {
                        AsString(tab, verbose, o.ToAsn1Object(), buf);
                    }
                }
            }
            else if (obj is DerTaggedObject)
            {
                string tab = indent + Tab;
                buf.Append(indent);
                if (obj is BerTaggedObject)
                {
                    buf.Append("BER Tagged [");
                }
                else
                {
                    buf.Append("Tagged [");
                }

                DerTaggedObject o = (DerTaggedObject)obj;

                buf.Append(((int)o.TagNo).ToString());
                buf.Append(']');

                if (!o.IsExplicit())
                {
                    buf.Append(" IMPLICIT ");
                }

                buf.Append(NewLine);

                if (o.IsEmpty())
                {
                    buf.Append(tab);
                    buf.Append("EMPTY");
                    buf.Append(NewLine);
                }
                else
                {
                    AsString(tab, verbose, o.GetObject(), buf);
                }
            }
            else if (obj is BerSet)
            {
                string tab = indent + Tab;

                buf.Append(indent);
                buf.Append("BER Set");
                buf.Append(NewLine);

                foreach (Asn1Encodable o in ((Asn1Set)obj))
                {
                    if (o == null)
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(NewLine);
                    }
                    else
                    {
                        AsString(tab, verbose, o.ToAsn1Object(), buf);
                    }
                }
            }
            else if (obj is DerSet)
            {
                string tab = indent + Tab;

                buf.Append(indent);
                buf.Append("DER Set");
                buf.Append(NewLine);

                foreach (Asn1Encodable o in ((Asn1Set)obj))
                {
                    if (o == null)
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(NewLine);
                    }
                    else
                    {
                        AsString(tab, verbose, o.ToAsn1Object(), buf);
                    }
                }
            }
            else if (obj is DerObjectIdentifier)
            {
                buf.Append(indent + "ObjectIdentifier(" + ((DerObjectIdentifier)obj).Id + ")" + NewLine);
            }
            else if (obj is DerBoolean)
            {
                buf.Append(indent + "Boolean(" + ((DerBoolean)obj).IsTrue + ")" + NewLine);
            }
            else if (obj is DerInteger)
            {
                buf.Append(indent + "Integer(" + ((DerInteger)obj).Value + ")" + NewLine);
            }
            else if (obj is BerOctetString)
            {
                byte[] octets = ((Asn1OctetString)obj).GetOctets();
                string extra  = verbose ? dumpBinaryDataAsString(indent, octets) : "";
                buf.Append(indent + "BER Octet String" + "[" + octets.Length + "] " + extra + NewLine);
            }
            else if (obj is DerOctetString)
            {
                byte[] octets = ((Asn1OctetString)obj).GetOctets();
                string extra  = verbose ? dumpBinaryDataAsString(indent, octets) : "";
                buf.Append(indent + "DER Octet String" + "[" + octets.Length + "] " + extra + NewLine);
            }
            else if (obj is DerBitString)
            {
                DerBitString bt    = (DerBitString)obj;
                byte[]       bytes = bt.GetBytes();
                string       extra = verbose ? dumpBinaryDataAsString(indent, bytes) : "";
                buf.Append(indent + "DER Bit String" + "[" + bytes.Length + ", " + bt.PadBits + "] " + extra + NewLine);
            }
            else if (obj is DerIA5String)
            {
                buf.Append(indent + "IA5String(" + ((DerIA5String)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerUtf8String)
            {
                buf.Append(indent + "UTF8String(" + ((DerUtf8String)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerPrintableString)
            {
                buf.Append(indent + "PrintableString(" + ((DerPrintableString)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerVisibleString)
            {
                buf.Append(indent + "VisibleString(" + ((DerVisibleString)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerBmpString)
            {
                buf.Append(indent + "BMPString(" + ((DerBmpString)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerT61String)
            {
                buf.Append(indent + "T61String(" + ((DerT61String)obj).GetString() + ") " + NewLine);
            }
            else if (obj is DerUtcTime)
            {
                buf.Append(indent + "UTCTime(" + ((DerUtcTime)obj).TimeString + ") " + NewLine);
            }
            else if (obj is DerGeneralizedTime)
            {
                buf.Append(indent + "GeneralizedTime(" + ((DerGeneralizedTime)obj).GetTime() + ") " + NewLine);
            }
            else if (obj is DerUnknownTag)
            {
                string hex = Hex.ToHexString(((DerUnknownTag)obj).GetData());
                buf.Append(indent + "Unknown " + ((int)((DerUnknownTag)obj).Tag).ToString("X") + " " + hex + NewLine);
            }
            else if (obj is BerApplicationSpecific)
            {
                buf.Append(outputApplicationSpecific("BER", indent, verbose, (BerApplicationSpecific)obj));
            }
            else if (obj is DerApplicationSpecific)
            {
                buf.Append(outputApplicationSpecific("DER", indent, verbose, (DerApplicationSpecific)obj));
            }
            else if (obj is DerEnumerated)
            {
                DerEnumerated en = (DerEnumerated)obj;
                buf.Append(indent + "DER Enumerated(" + en.Value + ")" + NewLine);
            }
            else if (obj is DerExternal)
            {
                DerExternal ext = (DerExternal)obj;
                buf.Append(indent + "External " + NewLine);
                string tab = indent + Tab;

                if (ext.DirectReference != null)
                {
                    buf.Append(tab + "Direct Reference: " + ext.DirectReference.Id + NewLine);
                }
                if (ext.IndirectReference != null)
                {
                    buf.Append(tab + "Indirect Reference: " + ext.IndirectReference.ToString() + NewLine);
                }
                if (ext.DataValueDescriptor != null)
                {
                    AsString(tab, verbose, ext.DataValueDescriptor, buf);
                }
                buf.Append(tab + "Encoding: " + ext.Encoding + NewLine);
                AsString(tab, verbose, ext.ExternalContent, buf);
            }
            else
            {
                buf.Append(indent + obj.ToString() + NewLine);
            }
        }
Exemplo n.º 2
0
 private static void AsString(string indent, bool verbose, Asn1Object obj, StringBuilder buf)
 {
     if (obj is Asn1Sequence)
     {
         string text = indent + "    ";
         buf.Append(indent);
         if (obj is BerSequence)
         {
             buf.Append("BER Sequence");
         }
         else if (obj is DerSequence)
         {
             buf.Append("DER Sequence");
         }
         else
         {
             buf.Append("Sequence");
         }
         buf.Append(Asn1Dump.NewLine);
         using (IEnumerator enumerator = ((Asn1Sequence)obj).GetEnumerator())
         {
             while (enumerator.MoveNext())
             {
                 Asn1Encodable asn1Encodable = (Asn1Encodable)enumerator.Current;
                 if (asn1Encodable == null || asn1Encodable is Asn1Null)
                 {
                     buf.Append(text);
                     buf.Append("NULL");
                     buf.Append(Asn1Dump.NewLine);
                 }
                 else
                 {
                     Asn1Dump.AsString(text, verbose, asn1Encodable.ToAsn1Object(), buf);
                 }
             }
             return;
         }
     }
     if (obj is DerTaggedObject)
     {
         string text2 = indent + "    ";
         buf.Append(indent);
         if (obj is BerTaggedObject)
         {
             buf.Append("BER Tagged [");
         }
         else
         {
             buf.Append("Tagged [");
         }
         DerTaggedObject derTaggedObject = (DerTaggedObject)obj;
         buf.Append(derTaggedObject.TagNo.ToString());
         buf.Append(']');
         if (!derTaggedObject.IsExplicit())
         {
             buf.Append(" IMPLICIT ");
         }
         buf.Append(Asn1Dump.NewLine);
         if (derTaggedObject.IsEmpty())
         {
             buf.Append(text2);
             buf.Append("EMPTY");
             buf.Append(Asn1Dump.NewLine);
             return;
         }
         Asn1Dump.AsString(text2, verbose, derTaggedObject.GetObject(), buf);
         return;
     }
     else
     {
         if (obj is BerSet)
         {
             string text3 = indent + "    ";
             buf.Append(indent);
             buf.Append("BER Set");
             buf.Append(Asn1Dump.NewLine);
             using (IEnumerator enumerator2 = ((Asn1Set)obj).GetEnumerator())
             {
                 while (enumerator2.MoveNext())
                 {
                     Asn1Encodable asn1Encodable2 = (Asn1Encodable)enumerator2.Current;
                     if (asn1Encodable2 == null)
                     {
                         buf.Append(text3);
                         buf.Append("NULL");
                         buf.Append(Asn1Dump.NewLine);
                     }
                     else
                     {
                         Asn1Dump.AsString(text3, verbose, asn1Encodable2.ToAsn1Object(), buf);
                     }
                 }
                 return;
             }
         }
         if (obj is DerSet)
         {
             string text4 = indent + "    ";
             buf.Append(indent);
             buf.Append("DER Set");
             buf.Append(Asn1Dump.NewLine);
             using (IEnumerator enumerator3 = ((Asn1Set)obj).GetEnumerator())
             {
                 while (enumerator3.MoveNext())
                 {
                     Asn1Encodable asn1Encodable3 = (Asn1Encodable)enumerator3.Current;
                     if (asn1Encodable3 == null)
                     {
                         buf.Append(text4);
                         buf.Append("NULL");
                         buf.Append(Asn1Dump.NewLine);
                     }
                     else
                     {
                         Asn1Dump.AsString(text4, verbose, asn1Encodable3.ToAsn1Object(), buf);
                     }
                 }
                 return;
             }
         }
         if (obj is DerObjectIdentifier)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "ObjectIdentifier(",
                 ((DerObjectIdentifier)obj).Id,
                 ")",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerBoolean)
         {
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "Boolean(",
                 ((DerBoolean)obj).IsTrue,
                 ")",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerInteger)
         {
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "Integer(",
                 ((DerInteger)obj).Value,
                 ")",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is BerOctetString)
         {
             byte[] octets = ((Asn1OctetString)obj).GetOctets();
             string text5  = verbose ? Asn1Dump.dumpBinaryDataAsString(indent, octets) : "";
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "BER Octet String[",
                 octets.Length,
                 "] ",
                 text5,
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerOctetString)
         {
             byte[] octets2 = ((Asn1OctetString)obj).GetOctets();
             string text6   = verbose ? Asn1Dump.dumpBinaryDataAsString(indent, octets2) : "";
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "DER Octet String[",
                 octets2.Length,
                 "] ",
                 text6,
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerBitString)
         {
             DerBitString derBitString = (DerBitString)obj;
             byte[]       bytes        = derBitString.GetBytes();
             string       text7        = verbose ? Asn1Dump.dumpBinaryDataAsString(indent, bytes) : "";
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "DER Bit String[",
                 bytes.Length,
                 ", ",
                 derBitString.PadBits,
                 "] ",
                 text7,
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerIA5String)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "IA5String(",
                 ((DerIA5String)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerUtf8String)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "UTF8String(",
                 ((DerUtf8String)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerPrintableString)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "PrintableString(",
                 ((DerPrintableString)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerVisibleString)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "VisibleString(",
                 ((DerVisibleString)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerBmpString)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "BMPString(",
                 ((DerBmpString)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerT61String)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "T61String(",
                 ((DerT61String)obj).GetString(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerUtcTime)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "UTCTime(",
                 ((DerUtcTime)obj).TimeString,
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerGeneralizedTime)
         {
             buf.Append(string.Concat(new string[]
             {
                 indent,
                 "GeneralizedTime(",
                 ((DerGeneralizedTime)obj).GetTime(),
                 ") ",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is BerApplicationSpecific)
         {
             buf.Append(Asn1Dump.outputApplicationSpecific("BER", indent, verbose, (BerApplicationSpecific)obj));
             return;
         }
         if (obj is DerApplicationSpecific)
         {
             buf.Append(Asn1Dump.outputApplicationSpecific("DER", indent, verbose, (DerApplicationSpecific)obj));
             return;
         }
         if (obj is DerEnumerated)
         {
             DerEnumerated derEnumerated = (DerEnumerated)obj;
             buf.Append(string.Concat(new object[]
             {
                 indent,
                 "DER Enumerated(",
                 derEnumerated.Value,
                 ")",
                 Asn1Dump.NewLine
             }));
             return;
         }
         if (obj is DerExternal)
         {
             DerExternal derExternal = (DerExternal)obj;
             buf.Append(indent + "External " + Asn1Dump.NewLine);
             string text8 = indent + "    ";
             if (derExternal.DirectReference != null)
             {
                 buf.Append(text8 + "Direct Reference: " + derExternal.DirectReference.Id + Asn1Dump.NewLine);
             }
             if (derExternal.IndirectReference != null)
             {
                 buf.Append(text8 + "Indirect Reference: " + derExternal.IndirectReference.ToString() + Asn1Dump.NewLine);
             }
             if (derExternal.DataValueDescriptor != null)
             {
                 Asn1Dump.AsString(text8, verbose, derExternal.DataValueDescriptor, buf);
             }
             buf.Append(string.Concat(new object[]
             {
                 text8,
                 "Encoding: ",
                 derExternal.Encoding,
                 Asn1Dump.NewLine
             }));
             Asn1Dump.AsString(text8, verbose, derExternal.ExternalContent, buf);
             return;
         }
         buf.Append(indent + obj.ToString() + Asn1Dump.NewLine);
     }
 }
Exemplo n.º 3
0
 private static void AsString(string indent, bool verbose, Asn1Object obj, StringBuilder buf)
 {
     if (obj is Asn1Sequence)
     {
         string text = indent + "    ";
         buf.Append(indent);
         if (obj is BerSequence)
         {
             buf.Append("BER Sequence");
         }
         else if (obj is DerSequence)
         {
             buf.Append("DER Sequence");
         }
         else
         {
             buf.Append("Sequence");
         }
         buf.Append(NewLine);
         foreach (Asn1Encodable item in (Asn1Sequence)obj)
         {
             if (item == null || item is Asn1Null)
             {
                 buf.Append(text);
                 buf.Append("NULL");
                 buf.Append(NewLine);
             }
             else
             {
                 AsString(text, verbose, item.ToAsn1Object(), buf);
             }
         }
     }
     else if (obj is DerTaggedObject)
     {
         string text2 = indent + "    ";
         buf.Append(indent);
         if (obj is BerTaggedObject)
         {
             buf.Append("BER Tagged [");
         }
         else
         {
             buf.Append("Tagged [");
         }
         DerTaggedObject derTaggedObject = (DerTaggedObject)obj;
         buf.Append(derTaggedObject.TagNo.ToString());
         buf.Append(']');
         if (!derTaggedObject.IsExplicit())
         {
             buf.Append(" IMPLICIT ");
         }
         buf.Append(NewLine);
         if (derTaggedObject.IsEmpty())
         {
             buf.Append(text2);
             buf.Append("EMPTY");
             buf.Append(NewLine);
         }
         else
         {
             AsString(text2, verbose, derTaggedObject.GetObject(), buf);
         }
     }
     else if (obj is BerSet)
     {
         string text3 = indent + "    ";
         buf.Append(indent);
         buf.Append("BER Set");
         buf.Append(NewLine);
         foreach (Asn1Encodable item2 in (Asn1Set)obj)
         {
             if (item2 == null)
             {
                 buf.Append(text3);
                 buf.Append("NULL");
                 buf.Append(NewLine);
             }
             else
             {
                 AsString(text3, verbose, item2.ToAsn1Object(), buf);
             }
         }
     }
     else if (obj is DerSet)
     {
         string text4 = indent + "    ";
         buf.Append(indent);
         buf.Append("DER Set");
         buf.Append(NewLine);
         foreach (Asn1Encodable item3 in (Asn1Set)obj)
         {
             if (item3 == null)
             {
                 buf.Append(text4);
                 buf.Append("NULL");
                 buf.Append(NewLine);
             }
             else
             {
                 AsString(text4, verbose, item3.ToAsn1Object(), buf);
             }
         }
     }
     else if (obj is DerObjectIdentifier)
     {
         buf.Append(indent + "ObjectIdentifier(" + ((DerObjectIdentifier)obj).Id + ")" + NewLine);
     }
     else if (obj is DerBoolean)
     {
         buf.Append(indent + "Boolean(" + ((DerBoolean)obj).IsTrue + ")" + NewLine);
     }
     else if (obj is DerInteger)
     {
         buf.Append(indent + "Integer(" + ((DerInteger)obj).Value + ")" + NewLine);
     }
     else if (obj is BerOctetString)
     {
         byte[] octets = ((Asn1OctetString)obj).GetOctets();
         string text5  = verbose ? dumpBinaryDataAsString(indent, octets) : "";
         buf.Append(indent + "BER Octet String[" + octets.Length + "] " + text5 + NewLine);
     }
     else if (obj is DerOctetString)
     {
         byte[] octets2 = ((Asn1OctetString)obj).GetOctets();
         string text6   = verbose ? dumpBinaryDataAsString(indent, octets2) : "";
         buf.Append(indent + "DER Octet String[" + octets2.Length + "] " + text6 + NewLine);
     }
     else if (obj is DerBitString)
     {
         DerBitString derBitString = (DerBitString)obj;
         byte[]       bytes        = derBitString.GetBytes();
         string       text7        = verbose ? dumpBinaryDataAsString(indent, bytes) : "";
         buf.Append(indent + "DER Bit String[" + bytes.Length + ", " + derBitString.PadBits + "] " + text7 + NewLine);
     }
     else if (obj is DerIA5String)
     {
         buf.Append(indent + "IA5String(" + ((DerIA5String)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerUtf8String)
     {
         buf.Append(indent + "UTF8String(" + ((DerUtf8String)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerPrintableString)
     {
         buf.Append(indent + "PrintableString(" + ((DerPrintableString)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerVisibleString)
     {
         buf.Append(indent + "VisibleString(" + ((DerVisibleString)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerBmpString)
     {
         buf.Append(indent + "BMPString(" + ((DerBmpString)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerT61String)
     {
         buf.Append(indent + "T61String(" + ((DerT61String)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerGraphicString)
     {
         buf.Append(indent + "GraphicString(" + ((DerGraphicString)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerVideotexString)
     {
         buf.Append(indent + "VideotexString(" + ((DerVideotexString)obj).GetString() + ") " + NewLine);
     }
     else if (obj is DerUtcTime)
     {
         buf.Append(indent + "UTCTime(" + ((DerUtcTime)obj).TimeString + ") " + NewLine);
     }
     else if (obj is DerGeneralizedTime)
     {
         buf.Append(indent + "GeneralizedTime(" + ((DerGeneralizedTime)obj).GetTime() + ") " + NewLine);
     }
     else if (obj is BerApplicationSpecific)
     {
         buf.Append(outputApplicationSpecific("BER", indent, verbose, (BerApplicationSpecific)obj));
     }
     else if (obj is DerApplicationSpecific)
     {
         buf.Append(outputApplicationSpecific("DER", indent, verbose, (DerApplicationSpecific)obj));
     }
     else if (obj is DerEnumerated)
     {
         DerEnumerated derEnumerated = (DerEnumerated)obj;
         buf.Append(indent + "DER Enumerated(" + derEnumerated.Value + ")" + NewLine);
     }
     else if (obj is DerExternal)
     {
         DerExternal derExternal = (DerExternal)obj;
         buf.Append(indent + "External " + NewLine);
         string text8 = indent + "    ";
         if (derExternal.DirectReference != null)
         {
             buf.Append(text8 + "Direct Reference: " + derExternal.DirectReference.Id + NewLine);
         }
         if (derExternal.IndirectReference != null)
         {
             buf.Append(text8 + "Indirect Reference: " + derExternal.IndirectReference.ToString() + NewLine);
         }
         if (derExternal.DataValueDescriptor != null)
         {
             AsString(text8, verbose, derExternal.DataValueDescriptor, buf);
         }
         buf.Append(text8 + "Encoding: " + derExternal.Encoding + NewLine);
         AsString(text8, verbose, derExternal.ExternalContent, buf);
     }
     else
     {
         buf.Append(indent + obj.ToString() + NewLine);
     }
 }
Exemplo n.º 4
0
        private static void AsString(string indent, bool verbose, Asn1Object obj, StringBuilder buf)
        {
            switch (obj)
            {
            case (Asn1Sequence _):
            {
                string str = indent + "    ";
                buf.Append(indent);
                if (obj is BerSequence)
                {
                    buf.Append("BER Sequence");
                }
                else if (obj is DerSequence)
                {
                    buf.Append("DER Sequence");
                }
                else
                {
                    buf.Append("Sequence");
                }
                buf.Append(NewLine);
                IEnumerator enumerator = ((Asn1Sequence)obj).GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        Asn1Encodable current = (Asn1Encodable)enumerator.Current;
                        if ((current == null) || (current is Asn1Null))
                        {
                            buf.Append(str);
                            buf.Append("NULL");
                            buf.Append(NewLine);
                        }
                        else
                        {
                            AsString(str, verbose, current.ToAsn1Object(), buf);
                        }
                    }
                }
                finally
                {
                    if (enumerator is IDisposable disposable)
                    {
                        IDisposable disposable;
                        disposable.Dispose();
                    }
                }
                break;
            }

            default:
                if (obj is DerTaggedObject)
                {
                    string str2 = indent + "    ";
                    buf.Append(indent);
                    if (obj is BerTaggedObject)
                    {
                        buf.Append("BER Tagged [");
                    }
                    else
                    {
                        buf.Append("Tagged [");
                    }
                    DerTaggedObject obj2 = (DerTaggedObject)obj;
                    buf.Append(obj2.TagNo.ToString());
                    buf.Append(']');
                    if (!obj2.IsExplicit())
                    {
                        buf.Append(" IMPLICIT ");
                    }
                    buf.Append(NewLine);
                    if (obj2.IsEmpty())
                    {
                        buf.Append(str2);
                        buf.Append("EMPTY");
                        buf.Append(NewLine);
                    }
                    else
                    {
                        AsString(str2, verbose, obj2.GetObject(), buf);
                    }
                }
                else
                {
                    switch (obj)
                    {
                    case (BerSet _):
                    {
                        string str3 = indent + "    ";
                        buf.Append(indent);
                        buf.Append("BER Set");
                        buf.Append(NewLine);
                        IEnumerator enumerator2 = ((Asn1Set)obj).GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                Asn1Encodable current = (Asn1Encodable)enumerator2.Current;
                                if (current == null)
                                {
                                    buf.Append(str3);
                                    buf.Append("NULL");
                                    buf.Append(NewLine);
                                }
                                else
                                {
                                    AsString(str3, verbose, current.ToAsn1Object(), buf);
                                }
                            }
                        }
                        finally
                        {
                            if (enumerator2 is IDisposable disposable2)
                            {
                                IDisposable disposable2;
                                disposable2.Dispose();
                            }
                        }
                        break;
                    }

                    default:
                        if (obj is DerSet)
                        {
                            string str4 = indent + "    ";
                            buf.Append(indent);
                            buf.Append("DER Set");
                            buf.Append(NewLine);
                            IEnumerator enumerator3 = ((Asn1Set)obj).GetEnumerator();
                            try
                            {
                                while (enumerator3.MoveNext())
                                {
                                    Asn1Encodable current = (Asn1Encodable)enumerator3.Current;
                                    if (current == null)
                                    {
                                        buf.Append(str4);
                                        buf.Append("NULL");
                                        buf.Append(NewLine);
                                    }
                                    else
                                    {
                                        AsString(str4, verbose, current.ToAsn1Object(), buf);
                                    }
                                }
                            }
                            finally
                            {
                                if (enumerator3 is IDisposable disposable3)
                                {
                                    IDisposable disposable3;
                                    disposable3.Dispose();
                                }
                            }
                        }
                        else if (obj is DerObjectIdentifier)
                        {
                            buf.Append(indent + "ObjectIdentifier(" + ((DerObjectIdentifier)obj).Id + ")" + NewLine);
                        }
                        else if (obj is DerBoolean)
                        {
                            buf.Append(string.Concat(new object[] { indent, "Boolean(", ((DerBoolean)obj).IsTrue, ")", NewLine }));
                        }
                        else if (obj is DerInteger)
                        {
                            buf.Append(string.Concat(new object[] { indent, "Integer(", ((DerInteger)obj).Value, ")", NewLine }));
                        }
                        else if (obj is BerOctetString)
                        {
                            byte[] octets = ((Asn1OctetString)obj).GetOctets();
                            string str5   = !verbose ? string.Empty : dumpBinaryDataAsString(indent, octets);
                            buf.Append(string.Concat(new object[] { indent, "BER Octet String[", octets.Length, "] ", str5, NewLine }));
                        }
                        else if (obj is DerOctetString)
                        {
                            byte[] octets = ((Asn1OctetString)obj).GetOctets();
                            string str6   = !verbose ? string.Empty : dumpBinaryDataAsString(indent, octets);
                            buf.Append(string.Concat(new object[] { indent, "DER Octet String[", octets.Length, "] ", str6, NewLine }));
                        }
                        else if (obj is DerBitString)
                        {
                            DerBitString str7  = (DerBitString)obj;
                            byte[]       bytes = str7.GetBytes();
                            string       str8  = !verbose ? string.Empty : dumpBinaryDataAsString(indent, bytes);
                            buf.Append(string.Concat(new object[] { indent, "DER Bit String[", bytes.Length, ", ", str7.PadBits, "] ", str8, NewLine }));
                        }
                        else if (obj is DerIA5String)
                        {
                            buf.Append(indent + "IA5String(" + ((DerIA5String)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerUtf8String)
                        {
                            buf.Append(indent + "UTF8String(" + ((DerUtf8String)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerPrintableString)
                        {
                            buf.Append(indent + "PrintableString(" + ((DerPrintableString)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerVisibleString)
                        {
                            buf.Append(indent + "VisibleString(" + ((DerVisibleString)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerBmpString)
                        {
                            buf.Append(indent + "BMPString(" + ((DerBmpString)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerT61String)
                        {
                            buf.Append(indent + "T61String(" + ((DerT61String)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerGraphicString)
                        {
                            buf.Append(indent + "GraphicString(" + ((DerGraphicString)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerVideotexString)
                        {
                            buf.Append(indent + "VideotexString(" + ((DerVideotexString)obj).GetString() + ") " + NewLine);
                        }
                        else if (obj is DerUtcTime)
                        {
                            buf.Append(indent + "UTCTime(" + ((DerUtcTime)obj).TimeString + ") " + NewLine);
                        }
                        else if (obj is DerGeneralizedTime)
                        {
                            buf.Append(indent + "GeneralizedTime(" + ((DerGeneralizedTime)obj).GetTime() + ") " + NewLine);
                        }
                        else if (obj is BerApplicationSpecific)
                        {
                            buf.Append(outputApplicationSpecific("BER", indent, verbose, (BerApplicationSpecific)obj));
                        }
                        else if (obj is DerApplicationSpecific)
                        {
                            buf.Append(outputApplicationSpecific("DER", indent, verbose, (DerApplicationSpecific)obj));
                        }
                        else if (obj is DerEnumerated)
                        {
                            DerEnumerated enumerated = (DerEnumerated)obj;
                            buf.Append(string.Concat(new object[] { indent, "DER Enumerated(", enumerated.Value, ")", NewLine }));
                        }
                        else if (obj is DerExternal)
                        {
                            DerExternal external = (DerExternal)obj;
                            buf.Append(indent + "External " + NewLine);
                            string str9 = indent + "    ";
                            if (external.DirectReference != null)
                            {
                                buf.Append(str9 + "Direct Reference: " + external.DirectReference.Id + NewLine);
                            }
                            if (external.IndirectReference != null)
                            {
                                buf.Append(str9 + "Indirect Reference: " + external.IndirectReference.ToString() + NewLine);
                            }
                            if (external.DataValueDescriptor != null)
                            {
                                AsString(str9, verbose, external.DataValueDescriptor, buf);
                            }
                            buf.Append(string.Concat(new object[] { str9, "Encoding: ", external.Encoding, NewLine }));
                            AsString(str9, verbose, external.ExternalContent, buf);
                        }
                        else
                        {
                            buf.Append(indent + obj.ToString() + NewLine);
                        }
                        break;
                    }
                }
                break;
            }
        }