Ejemplo n.º 1
0
        public static Asn1Node ReadNode(Stream stream)
        {
            var identifier = stream.ReadByte();
            var type       = (Asn1UniversalNodeType)(identifier & 0x1f);
            var tagClass   = (Asn1TagClass)(identifier >> 6);
            var tagForm    = (Asn1TagForm)((identifier >> 5) & 1);
            var length     = ReadTagLength(stream);

            if (length > stream.Length)
            {
                throw new Asn1ParsingException($"Try to read more bytes from stream than exists {length} > {stream.Length}");
            }
            var data = new byte[length];

            stream.Read(data, 0, length);
            stream = new MemoryStream(data);
            if (tagClass == Asn1TagClass.Universal)
            {
                var tag = ReadUniversalNode(type, tagForm, stream);
                tag.TagClass = tagClass;
                return(tag);
            }
            else
            {
                var tag = Asn1CustomNode.ReadFrom(type, tagForm, stream);
                tag.TagClass = tagClass;
                return(tag);
            }
        }
Ejemplo n.º 2
0
        public static Asn1Node ReadNode(Stream stream)
        {
            var identifier = stream.ReadByte();
            var type       = (Asn1UniversalNodeType)(identifier & 0x1f);
            var tagClass   = (Asn1TagClass)(identifier >> 6);
            var tagForm    = (Asn1TagForm)((identifier >> 5) & 1);
            var length     = ReadTagLength(stream);
            var data       = new byte[length];

            stream.Read(data, 0, length);
            stream = new MemoryStream(data);
            if (tagClass == Asn1TagClass.Universal)
            {
                var tag = ReadUniversalNode(type, tagForm, stream);
                tag.TagClass = tagClass;
                return(tag);
            }
            else
            {
                var tag = Asn1CustomNode.ReadFrom(type, tagForm, stream);
                tag.TagClass = tagClass;
                return(tag);
            }
        }