Пример #1
0
        private static TLVList DeserList(List <TLVXML> serXML)
        {
            TLVList result = new TLVList();

            serXML.ForEach((x) =>
            {
                TLV tlvToAdd = TLV.Create(x.Tag);
                result.AddToList(tlvToAdd);
                if (x.Children.Count > 0)
                {
                    tlvToAdd.Children.AddListToList(DeserList(x.Children));
                }
                else
                if (x.Value != null)
                {
                    tlvToAdd.Value = x.Value;
                }
            });
            return(result);
        }
Пример #2
0
        public bool IsEmpty(string tag)
        {
            TLV result = Get(tag);

            if (result == null)
            {
                return(false);
            }
            else
            {
                if (result.Value.Length == 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Пример #3
0
        public static TLVasJSON Convert(TLV tlv)
        {
            TLVasJSON json = new TLVasJSON()
            {
                Tag  = tlv.Tag.TagLable,
                Name = TLVMetaDataSourceSingleton.Instance.DataSource.GetName(tlv.Tag.TagLable),
            };

            if (tlv.Tag.IsConstructed)
            {
                foreach (TLV tlvChild in tlv.Children)
                {
                    json.Children.Add(Convert(tlvChild));
                }
            }
            else
            {
                json.Value = FormattingUtils.Formatting.ByteArrayToHexString(tlv.Value);
            }
            return(json);
        }
Пример #4
0
        public override int Deserialize(byte[] rawTlv, int pos)
        {
            if (rawTlv.Length == 0)
            {
                return(0);
            }

            children = new TLVList();

            //some byte streams may have FF padding between tags ??
            while (rawTlv[pos] == 0xFF)
            {
                pos++;
            }

            Tag = new T();
            pos = Tag.Deserialize(rawTlv, pos);
            Val = new V(TLVMetaDataSourceSingleton.Instance.DataSource.GetFormatter(Tag.TagLable));
            pos = Val.Deserialize(rawTlv, pos);

            if (Tag.IsConstructed)
            {
                for (int i = 0; i < Value.Length;)
                {
                    TLV child = new TLV();
                    i = child.Deserialize(Value, i);
                    //TODO: Dont like this...had to change AddToList to allow duplicates, previously if a item in the list already existed its
                    //value was replaced, some cards may return blocks of 0x00 bytes
                    //in their read record byte streams, this is not valid TLV but we have to cater for it
                    //the TLV class sees a tag of 00 with length of 00 and so on, we add the 00 tags and allow duplicates so that when things
                    //like static data for authentication is calcaulted the dups are serialized back into the origional
                    //blocks of 0x00, since the card has included this invalid data in its signature!!
                    //this should change, probably include the 0x00 blocks as some sort of custom padding tag, and switch dups back off?
                    Children.AddToList(child, true);
                }
            }
            return(pos);
        }
Пример #5
0
 public static string ToJSON(TLV tlv)
 {
     return(JsonConvert.SerializeObject(Convert(tlv)));
 }
Пример #6
0
 public void AddToListIncludeDuplicates(TLV tlv)
 {
     listToManage.Add(tlv);
 }