public Asn1UtcTime(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     var ascii = Encoding.ASCII.GetString(content.Workload);
     dateTime = DateTime.ParseExact(ascii,
         UtcFormats, CultureInfo.InvariantCulture, DateTimeStyles.None);
 }
        public Asn1Object CreateAsn1Object(
            Asn1Document document, 
            TaggedObject content, 
            Asn1Object parent)
        {
            Asn1Object result = null;
            try
            {
                if (document.ShowInvalidTaggedObjects && IsInvalidTaggedObject(content))
                    return new Asn1InvalidObject(document, (InvalidTaggedObject)content, parent);

                var tagValue = content.Tag.Value;
                if (!tagValue.IsUniversalClass())
                {
                    var specific = CreateSpecificTaggedObject(document, content, parent);
                    return specific ?? CreateUnsupportedTaggedObject(document, content, parent);
                }

                var asn1TagValue = tagValue.GetAsn1TagValue();
                switch (asn1TagValue)
                {
                    case (int)Asn1Tags.Boolean:
                        return new Asn1Boolean(document, content, parent);
                    case (int)Asn1Tags.Integer:
                        return new Asn1Integer(document, content, parent);
                    case (int)Asn1Tags.BitString:
                        return new Asn1BitString(document, content, parent);
                    case (int)Asn1Tags.OctetString:
                        return new Asn1OctetString(document, content, parent);
                    case (int)Asn1Tags.Null:
                        return new Asn1Null(document, content, parent);
                    case (int)Asn1Tags.ObjectIdentifier:
                        return new Asn1Oid(document, content, parent);
                    case (int)Asn1Tags.Utf8String:
                        return new Asn1Utf8String(document, content, parent);
                    case (int)Asn1Tags.Sequence:
                        return new Asn1Sequence(document, content, parent);
                    case (int)Asn1Tags.Set:
                        return new Asn1Set(document, content, parent);
                    case (int)Asn1Tags.NumericString:
                        return new Asn1NumericString(document, content, parent);
                    case (int)Asn1Tags.PrintableString:
                        return new Asn1PrintableString(document, content, parent);
                    case (int)Asn1Tags.UtcTime:
                        return new Asn1UtcTime(document, content, parent);
                    default:
                        var specific = CreateSpecificTaggedObject(document, content, parent);                        
                        return specific ?? CreateUnsupportedTaggedObject(document, content, parent);
                }
            }
            catch (Exception ex)
            {
                // Could not create a "real" ASN1 object --> return the special "Unsupported" object.
                log.Error(ex);
                result = CreateUnsupportedTaggedObject(document, content, parent, ex);
            }

            return result;
        }
        internal Asn1Object(Asn1Document document, TaggedObject content, Asn1Object parentObject)
        {
            if (content == null) throw new ArgumentNullException("content");
            TaggedObject = content;

            Document = document;
            Parent = parentObject;
        }
Example #4
0
        public Asn1UtcTime(Asn1Document document, TaggedObject content, Asn1Object parentObject)
            : base(document, content, parentObject)
        {
            var ascii = Encoding.ASCII.GetString(content.Workload);

            dateTime = DateTime.ParseExact(ascii,
                                           UtcFormats, CultureInfo.InvariantCulture, DateTimeStyles.None);
        }
Example #5
0
        internal Asn1Object(Asn1Document document, TaggedObject content, Asn1Object parentObject)
        {
            if (content == null)
            {
                throw new ArgumentNullException("content");
            }
            TaggedObject = content;

            Document = document;
            Parent   = parentObject;
        }
        private Asn1Object CreateUnsupportedTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent, Exception exception = null)
        {
            if (exception != null)
                return new Asn1Unsupported(document, content, parent, exception);

            var tagValue = content.Tag.Value;
            if (tagValue.IsContextSpecificClass())
                return new Asn1ContextSpecific(document, content, parent);

            return new Asn1Unsupported(document, content, parent);
        }
        public Asn1Integer(Asn1Document document, TaggedObject content, Asn1Object parentObject)
            : base(document, content, parentObject)
        {
            long value = 0L;
            foreach (byte element in content.Workload)
            {
                value <<= 8;
                value += element;
            }

            Value = value;
        }
            protected override Asn1Object CreateSpecificTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent)
            {
                var result = base.CreateSpecificTaggedObject(document, content, parent);
                if (result != null)
                    return result;

                var tag = content.Tag.Value;
                if (tag == (ushort)Tags.Icao.Mrz)
                    return new Asn1Mrz(document, content, parent);

                return null;
            }
        public Asn1Integer(Asn1Document document, TaggedObject content, Asn1Object parentObject)
            : base(document, content, parentObject)
        {
            long value = 0L;

            foreach (byte element in content.Workload)
            {
                value <<= 8;
                value  += element;
            }

            Value = value;
        }
        public TreeNodeEx CreateDocumentNodes(Asn1Document document, string rootNodeText)
        {
            var rootNode = new TreeNodeEx(rootNodeText);
            rootNode.SelectedImageIndex = documentImageIndex;
            rootNode.ImageIndex = documentImageIndex;

            rootNode.Tag = document;

            foreach (var node in document.Nodes)
                AddAsnNode(node, rootNode);

            Nodes.Add(rootNode);

            return rootNode;
        }
        private Asn1Object CreateUnsupportedTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent, Exception exception = null)
        {
            if (exception != null)
            {
                return(new Asn1Unsupported(document, content, parent, exception));
            }

            var tagValue = content.Tag.Value;

            if (tagValue.IsContextSpecificClass())
            {
                return(new Asn1ContextSpecific(document, content, parent));
            }

            return(new Asn1Unsupported(document, content, parent));
        }
            protected override Asn1Object CreateSpecificTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent)
            {
                var asn1 = base.CreateSpecificTaggedObject(document, content, parent);
                if (asn1 != null)
                    return asn1;

                var tagValue = content.Tag.Value;
                var ef = Tags.FindEF(tagValue);
                if (!ef.HasValue)
                    return null;

                switch (ef.Value)
                {
                    case Tags.EF.DG1:
                        return new Asn1DG1Data(document, content, parent);
                }

                return null;
            }
 /// <summary>
 /// Initializes a new instance of the <see cref="Asn1Unsupported"/> class.
 /// </summary>
 /// <param name="document">The document.</param>
 /// <param name="content">The content.</param>
 /// <param name="parentObject">The parent object.</param>
 public Asn1Unsupported(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : this(document, content, parentObject, null)
 {
 }
 public Asn1Object CreateAsn1Object(Asn1Document document, TaggedObject content, Asn1Object parent)
 {
     return(ObjectFactory.CreateAsn1Object(document, content, parent));
 }
 internal Asn1InvalidObject(
     Asn1Document document, InvalidTaggedObject content, Asn1Object parentObject) :
     base(document, content, parentObject)
 {
     InvalidTaggedObject = content;
 }
 public Asn1Sequence(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
 }
 public Asn1StructuredObject(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     ParseContent();
 }
 public Asn1OctetString(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
 }
 protected virtual Asn1Object CreateSpecificTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent)
 {
     return(null);
 }
 public Asn1DG1Data(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject) { }
Example #21
0
 public Asn1Null(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     warning = content.WorkloadLength != 0;
 }
 public Asn1NumericString(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject) { }
 public Asn1Utf8String(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     utf8 = Encoding.UTF8.GetString(content.Workload);
 }
 public Asn1Utf8String(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     utf8 = Encoding.UTF8.GetString(content.Workload); 
 }
 public Asn1StructuredObject(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject) 
 {
     ParseContent();
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="Asn1Unsupported"/> class.
 /// </summary>
 /// <param name="document">The document.</param>
 /// <param name="content">The content.</param>
 /// <param name="parentObject">The parent object.</param>
 /// <param name="exception">The exception.</param>
 internal Asn1Unsupported(Asn1Document document, TaggedObject content, Asn1Object parentObject, Exception exception)
     : base(document, content, parentObject)
 {
     Exception = exception;
 }
        public void ParseData()
        {
            try
            {
                asnTreeView.Nodes.Clear();
                hexViewer.Select(0, 0);
                asciiTextBox.Clear();
                bytesTextBox.Clear();

                if(IsIcaoMrtd)
                {
                    var doc = new Asn1IcaoDocument(content, ParseOctetStrings, ShowInvalidTaggedObjects);
                    asnTreeView.CreateDocumentNodes(doc, "ICAO Document");
                }
                else
                {
                    var doc = new Asn1Document(content, ParseOctetStrings, ShowInvalidTaggedObjects);
                    asnTreeView.CreateDocumentNodes(doc, "Document");
                }
                
                asnTreeView.ExpandAll();
            }
            catch (Exception ex)
            {
                HandleException("Unable to decode content: {0}.", ex);
            }
        }
 protected virtual Asn1Object CreateSpecificTaggedObject(Asn1Document document, TaggedObject content, Asn1Object parent)
 {
     return null;
 }
 public Asn1Object CreateAsn1Object(Asn1Document document,  TaggedObject content,  Asn1Object parent)
 {
     return ObjectFactory.CreateAsn1Object(document, content, parent);
 }
 internal Asn1ContextSpecific(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject) { }
 internal Asn1InvalidObject(
     Asn1Document document, InvalidTaggedObject content, Asn1Object parentObject) :
     base(document, content, parentObject)
 {
     InvalidTaggedObject = content;
 }
 public Asn1BitString(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     unusedBytes = content.Workload[0];
     bitString = content.Workload.Skip(1).ToArray();
 }
 public Asn1Boolean(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     boolean = content.Workload[0] == 0xFF;
 }
Example #34
0
 public Asn1BitString(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     unusedBytes = content.Workload[0];
     bitString   = content.Workload.Skip(1).ToArray();
 }
 public Asn1Boolean(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     boolean = content.Workload[0] == 0xFF;
 }
Example #36
0
 public Asn1Oid(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     oid = OidUtils.Decode(content.Workload);
 }
Example #37
0
 public Asn1Null(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     warning = content.WorkloadLength != 0;
 }
Example #38
0
 public Asn1Oid(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
     oid = OidUtils.Decode(content.Workload);
 }
 public Asn1PrintableString(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject) { }
        public Asn1Object CreateAsn1Object(
            Asn1Document document,
            TaggedObject content,
            Asn1Object parent)
        {
            Asn1Object result = null;

            try
            {
                if (document.ShowInvalidTaggedObjects && IsInvalidTaggedObject(content))
                {
                    return(new Asn1InvalidObject(document, (InvalidTaggedObject)content, parent));
                }

                var tagValue = content.Tag.Value;
                if (!tagValue.IsUniversalClass())
                {
                    var specific = CreateSpecificTaggedObject(document, content, parent);
                    return(specific ?? CreateUnsupportedTaggedObject(document, content, parent));
                }

                var asn1TagValue = tagValue.GetAsn1TagValue();
                switch (asn1TagValue)
                {
                case (int)Asn1Tags.Boolean:
                    return(new Asn1Boolean(document, content, parent));

                case (int)Asn1Tags.Integer:
                    return(new Asn1Integer(document, content, parent));

                case (int)Asn1Tags.BitString:
                    return(new Asn1BitString(document, content, parent));

                case (int)Asn1Tags.OctetString:
                    return(new Asn1OctetString(document, content, parent));

                case (int)Asn1Tags.Null:
                    return(new Asn1Null(document, content, parent));

                case (int)Asn1Tags.ObjectIdentifier:
                    return(new Asn1Oid(document, content, parent));

                case (int)Asn1Tags.Utf8String:
                    return(new Asn1Utf8String(document, content, parent));

                case (int)Asn1Tags.Sequence:
                    return(new Asn1Sequence(document, content, parent));

                case (int)Asn1Tags.Set:
                    return(new Asn1Set(document, content, parent));

                case (int)Asn1Tags.NumericString:
                    return(new Asn1NumericString(document, content, parent));

                case (int)Asn1Tags.PrintableString:
                    return(new Asn1PrintableString(document, content, parent));

                case (int)Asn1Tags.UtcTime:
                    return(new Asn1UtcTime(document, content, parent));

                default:
                    var specific = CreateSpecificTaggedObject(document, content, parent);
                    return(specific ?? CreateUnsupportedTaggedObject(document, content, parent));
                }
            }
            catch (Exception ex)
            {
                // Could not create a "real" ASN1 object --> return the special "Unsupported" object.
                log.Error(ex);
                result = CreateUnsupportedTaggedObject(document, content, parent, ex);
            }

            return(result);
        }
 internal Asn1ContextSpecific(Asn1Document document, TaggedObject content, Asn1Object parentObject)
     : base(document, content, parentObject)
 {
 }