예제 #1
0
        public byte[] get()
        {
            if (rawData != null)
            {
                return(rawData);
            }
            int innerLength = this.getLength(false);

            byte[] len = ASNNode.getLengthBytes(innerLength);
            if (childs.Count > 0)
            {
                MemoryStream data2 = new MemoryStream();
                foreach (ASNNode child in childs)
                {
                    byte[] childBytes = child.get();
                    data2.Write(childBytes, 0, childBytes.Length);
                }

                MemoryStream ret = new MemoryStream();
                ret.WriteByte(Type);
                ret.Write(len, 0, len.Length);
                data           = new byte[data2.Length];
                data2.Position = 0;
                data2.Read(data, 0, (int)data2.Length);
                ret.Write(data, 0, (int)data2.Length);

                byte[] ret1 = new byte[ret.Length];
                ret.Position = 0;
                ret.Read(ret1, 0, (int)ret1.Length);

                return(ret1);
            }
            else
            {
                if (Type == AsnTag.UTF8_STRING)
                {
                    int xx = 1;
                }
                MemoryStream ret = new MemoryStream();
                ret.WriteByte(Type);
                ret.Write(len, 0, len.Length);
                if (data != null)
                {
                    ret.Write(data, 0, (int)data.Length);
                }

                byte[] ret1 = new byte[ret.Length];
                ret.Position = 0;
                ret.Read(ret1, 0, (int)ret1.Length);
                return(ret1);
            }
        }
예제 #2
0
        public int getLength(bool includeHeader)
        {
            if (rawData != null)
            {
                return(rawData.Length);
            }

            int innerLength = 0;
            int ret         = 0;

            if (data != null)
            {
                innerLength += data.Length;
            }
            foreach (ASNNode node in childs)
            {
                int l = node.getLength();
                innerLength += l;
                if (innerLength == 0x0000011d)
                {
                    int xx = 1;
                }
            }
            if (includeHeader)
            {
                ret += 1;
                byte[] len = ASNNode.getLengthBytes(innerLength);
                ret += len.Length;
            }
            ret += innerLength;
            if (ret == 199)
            {
                int zz = 1;
            }
            return(ret);
        }