Exemplo n.º 1
0
Arquivo: ASN1.cs Projeto: xrl/scamp
        // Note: Recursive
        protected void Decode(byte[] asn1, ref int anPos, int anLength)
        {
            byte nTag;
            int  nLength;

            byte[] aValue;

            // minimum is 2 bytes (tag + length of 0)
            while (anPos < anLength - 1)
            {
                DecodeTLV(asn1, ref anPos, out nTag, out nLength, out aValue);
                // sometimes we get trailing 0
                if (nTag == 0)
                {
                    continue;
                }

                ASN1 elm = Add(new ASN1(nTag, aValue));

                if ((nTag & 0x20) == 0x20)
                {
                    int nConstructedPos = anPos;
                    elm.Decode(asn1, ref nConstructedPos, nConstructedPos + nLength);
                }
                anPos += nLength;                 // value length
            }
        }