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); } }
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); } }