Example #1
0
        public virtual void Parse(IAsn1TaggedEventHandler handler)
        {
            if (_parserCaptureBuffer == null)
            {
                RemoveCaptureBuffer(_parserCaptureBuffer);
            }

            if (_parserCaptureBuffer == null)
            {
                _parserCaptureBuffer = new MemoryStream(0x100);
                AddCaptureBuffer(_parserCaptureBuffer);
            }
            else
            {
                _parserCaptureBuffer.Seek(0L, SeekOrigin.Begin);
                _parserCaptureBuffer.SetLength(0L);
            }

            ParseElement(handler, _tagHolder, _lenHolder);
        }
 private void ParsePrim(IAsn1TaggedEventHandler handler, int len)
 {
     var buffer = new byte[len];
     Read(buffer);
     handler.Contents(buffer);
 }
        private void ParseCons(IAsn1TaggedEventHandler handler, int len)
        {
            var tag2 = new Asn1Tag();
            var holder = new IntHolder();
            var byteCount = base.ByteCount;

            while (true)
            {
                ParseElement(handler, tag2, holder);

                if (len == Asn1Status.IndefiniteLength)
                {
                    if (tag2.IsEoc() && (holder.Value == 0))
                    {
                        return;
                    }

                    continue;
                }

                if ((base.ByteCount - byteCount) >= len)
                {
                    return;
                }
            }
        }
        private void ParseElement(IAsn1TaggedEventHandler handler, Asn1Tag tag, IntHolder len)
        {
            _parserCaptureBuffer.Seek(0L, SeekOrigin.Begin);
            _parserCaptureBuffer.SetLength(0L);

            len.Value = DecodeTagAndLength(tag);

            if (!tag.IsEoc() || (len.Value != 0))
            {
                handler.StartElement(tag, len.Value, _parserCaptureBuffer.ToArray());

                _parserCaptureBuffer.Seek(0L, SeekOrigin.Begin);
                _parserCaptureBuffer.SetLength(0L);

                if ((len.Value > 0) || (len.Value == Asn1Status.IndefiniteLength))
                {
                    if (tag.Constructed)
                    {
                        ParseCons(handler, len.Value);
                    }
                    else
                    {
                        ParsePrim(handler, len.Value);
                    }
                }

                handler.EndElement(tag);
            }
        }
        public virtual void Parse(IAsn1TaggedEventHandler handler)
        {
            if (_parserCaptureBuffer == null)
            {
                RemoveCaptureBuffer(_parserCaptureBuffer);
            }

            if (_parserCaptureBuffer == null)
            {
                _parserCaptureBuffer = new MemoryStream(0x100);
                AddCaptureBuffer(_parserCaptureBuffer);
            }
            else
            {
                _parserCaptureBuffer.Seek(0L, SeekOrigin.Begin);
                _parserCaptureBuffer.SetLength(0L);
            }

            ParseElement(handler, _tagHolder, _lenHolder);
        }