Example #1
0
        public ContentInfo(Asn1Node asn1)
        {
            System.Collections.Generic.IList <Asn1Node> nodes = asn1.Nodes;
            // SEQUENCE with 1 or 2 elements
            if ((asn1.NodeType != Asn1UniversalNodeType.Sequence) || (nodes.Count < 1 && nodes.Count > 2))
            {
                throw new ArgumentException("Invalid ASN1");
            }

            if (!(nodes[0] is Asn1ObjectIdentifier))
            {
                throw new ArgumentException("Invalid contentType");
            }

            ContentType = ((Asn1ObjectIdentifier)nodes[0]).FriendlyName;
            if (nodes.Count <= 1)
            {
                return;
            }

            if (nodes[1].TagClass != Asn1TagClass.ContextDefined || nodes[1].TagForm != Asn1TagForm.Constructed)
            {
                throw new ArgumentException("Invalid content");
            }

            Content = nodes[1];
        }
Example #2
0
        /**
         * Parses an DER encoded RSA public key:
         * It will only try to get the mod and the exponent
         */
        private RSACryptoServiceProvider ParseNode(Asn1Node n)
        {
            if ((n.Tag & Asn1Tag.TAG_MASK) == Asn1Tag.SEQUENCE &&
                n.ChildNodeCount == 2 &&
                (n.GetChildNode(0).Tag & Asn1Tag.TAG_MASK) == Asn1Tag.SEQUENCE &&
                (n.GetChildNode(0).GetChildNode(0).Tag & Asn1Tag.TAG_MASK) == Asn1Tag.OBJECT_IDENTIFIER &&
                n.GetChildNode(0).GetChildNode(0).GetDataStr(false) == "1.2.840.113549.1.1.1" &&
                (n.GetChildNode(1).Tag & Asn1Tag.TAG_MASK) == Asn1Tag.BIT_STRING)
            {
                var seq = n.GetChildNode(1).GetChildNode(0);
                if (seq.ChildNodeCount == 2)
                {
                    byte[] data   = seq.GetChildNode(0).Data;
                    byte[] rawMod = new byte[data.Length - 1];
                    System.Array.Copy(data, 1, rawMod, 0, data.Length - 1);

                    var modulus  = System.Convert.ToBase64String(rawMod);
                    var exponent = System.Convert.ToBase64String(seq.GetChildNode(1).Data);
                    var result   = new RSACryptoServiceProvider();
                    result.FromXmlString(ToXML(modulus, exponent));

                    return(result);
                }
            }
            throw new InvalidRSAData();
        }
Example #3
0
        private static void BuildTicket(Ticket ticket, Asn1Node asn1Node)
        {
            Asn1Node childNode1 = asn1Node.GetChildNode(0).GetChildNode(0);

            for (int index = 0; (long)index < childNode1.ChildNodeCount; ++index)
            {
                Asn1Node childNode2 = childNode1.GetChildNode(index);
                switch (KerberosAuthorizeMessageBuilder.GetContextNumber(childNode2))
                {
                case 0:
                    ticket.TicketVersionNumber = (int)Asn1Util.BytesToLong(childNode2.GetChildNode(0).Data);
                    break;

                case 1:
                    ticket.Realm = childNode2.GetChildNode(0).GetDataStr(false);
                    break;

                case 2:
                    ticket.ServiceName = new PrincipalName();
                    KerberosAuthorizeMessageBuilder.BuildPrincipleName(ticket.ServiceName, childNode2);
                    break;

                case 3:
                    ticket.EncPart = new EncryptedData();
                    KerberosAuthorizeMessageBuilder.BuildEncryptedData(ticket.EncPart, childNode2);
                    break;
                }
            }
        }
Example #4
0
        public void GenericTest()
        {
            var cert = File.ReadAllBytes(@"./test_files/pidgin.pkcs7");
            var asn1 = Asn1Node.ReadNode(cert);

            Assert.NotNull(asn1);
        }
Example #5
0
        private static IReadOnlyCollection <string> FindObjectIdentifiers(Asn1Node node, Asn1ObjectIdentifier oid)
        {
            var results = new HashSet <string>();

            FindObjectIdentifiers(node, oid, results);
            return(results);
        }
Example #6
0
        public void GenericTest()
        {
            var cert = GetEmbeddedBytes(@"pidgin.pkcs7");
            var asn1 = Asn1Node.ReadNode(cert);

            Assert.NotNull(asn1);
        }
        /// <summary>
        /// Parses the portion of the document at the current position, according to the
        /// instructions available in the macro.
        /// </summary>
        /// <param name="Document">ASN.1 document being parsed.</param>
        /// <param name="Macro">Macro being executed.</param>
        /// <returns>Parsed ASN.1 node.</returns>
        public override Asn1Node Parse(Asn1Document Document, Asn1Macro Macro)
        {
            int      Bak     = Document.pos;
            int      BestPos = -1;
            Asn1Node Best    = null;
            Asn1Node Option;

            foreach (UserDefinedItem Item in this.options)
            {
                Document.pos = Bak;

                try
                {
                    Option = Item.Parse(Document, Macro);
                    if (Best is null || Document.pos > BestPos)
                    {
                        BestPos = Document.pos;
                        Best    = Option;
                    }
                }
                catch (Exception)
                {
                    // Ignore
                }
            }

            if (BestPos < 0)
            {
                throw Document.SyntaxError("Invalid option.");
            }

            Document.pos = BestPos;

            return(Best);
        }
        public bool GetBoolFromNode(Asn1Node nn)
        {
            string stringFromNode = GetStringFromNode(nn);
            bool   result;

            return(bool.TryParse(stringFromNode, out result) && result);
        }
Example #9
0
        private static void BuildKrbApReq(KrbApReq krbApReq, Asn1Node asn1Node)
        {
            Asn1Node childNode1 = asn1Node.GetChildNode(0);

            for (int index = 0; (long)index < childNode1.ChildNodeCount; ++index)
            {
                Asn1Node childNode2 = childNode1.GetChildNode(index);
                switch (KerberosAuthorizeMessageBuilder.GetContextNumber(childNode2))
                {
                case 0:
                    krbApReq.ProtocolVersionNumber = (int)Asn1Util.BytesToLong(childNode2.GetChildNode(0).Data);
                    break;

                case 1:
                    krbApReq.MessageType = (MessageType)Asn1Util.BytesToLong(childNode2.GetChildNode(0).Data);
                    break;

                case 2:
                    krbApReq.APOptions = (APOptions)Asn1Util.BytesToLong(childNode2.GetChildNode(0).Data);
                    break;

                case 3:
                    krbApReq.Ticket = new Ticket();
                    KerberosAuthorizeMessageBuilder.BuildTicket(krbApReq.Ticket, childNode2);
                    break;

                case 4:
                    krbApReq.Authenticator = new EncryptedData();
                    KerberosAuthorizeMessageBuilder.BuildEncryptedData(krbApReq.Authenticator, childNode2);
                    break;
                }
            }
        }
Example #10
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1Null;

            Assert.NotNull(typed);
        }
    public bool parseAsn1Data(byte[] val)
    {
        if (val == null)
        {
            return(false);
        }
        Asn1Parser p      = new Asn1Parser();
        var        stream = new MemoryStream(val);

        try
        {
            p.LoadData(stream);
        }
        catch (Exception e)
        {
            return(false);
        }
        Asn1Node root = p.RootNode;

        if (root == null)
        {
            return(false);
        }
        PurchaseReceipts = new Dictionary <string, AppleInAppPurchaseReceipt>();
        parseNodeRecursive(root);
        return(!string.IsNullOrEmpty(BundleIdentifier));
    }
Example #12
0
        public void Asn1ShouldSupportIa5String()
        {
            var cert = File.ReadAllBytes(@"./Authenticode/pidgin.pkcs7");
            var asn1 = Asn1Node.ReadNode(cert);

            Assert.NotNull(asn1);
        }
Example #13
0
 /*
  * node            30
  * node 0          | 30
  * node 0 0        | | 06 : 1.2.410.200004.1.15
  * node 0 1        | | 30
  * node 0 1 0      | | | 04 : Salt
  * node 0 1 1      | | | 02 : Iter
  * node 1          | 04 : DATA
  */
 public SeedCBCWithSHA1(Asn1Node node)
     : base(node)
 {
     this.Salt = this.m_origNode.Get <Asn1OctetString>(0, 1, 0).Data;
     this.Iter = this.m_origNode.Get <Asn1Integer>(0, 1, 1).ToInt32();
     this.Data = this.m_origNode.Get <Asn1OctetString>(1).Data;
 }
Example #14
0
        private static Asn1Node AddString(Asn1Node parent, string name, string value)
        {
            var childNode = new Asn1Node
            {
                Tag = Asn1Tag.SEQUENCE | Asn1TagClasses.CONSTRUCTED
            };

            parent.AddChild(childNode);

            var nameNode = new Asn1Node
            {
                Tag  = Asn1Tag.OBJECT_IDENTIFIER,
                Data = oidInstance.Encode(name)
            };

            childNode.AddChild(nameNode);

            var valueNode = new Asn1Node();

            if (value == null)
            {
                valueNode.Tag = Asn1Tag.TAG_NULL;
            }
            else
            {
                valueNode.Tag  = Asn1Tag.PRINTABLE_STRING;
                valueNode.Data = Encoding.ASCII.GetBytes(value);
            }
            childNode.AddChild(valueNode);

            return(parent);
        }
Example #15
0
        private string GetSigningSerialNumber()
        {
            Asn1Node    asn1 = _contentInfo.Content;
            Asn1Integer x    = (Asn1Integer)asn1.Nodes[0].Nodes[4].Nodes[0].Nodes[1].Nodes[1]; // ASN.1 Path to signer serial number: /1/0/4/0/1/1

            return(x.Value.ToHexString().Substring(2).ToUpper());
        }
Example #16
0
        /// <summary>
        /// Generate node text description. It uses GetNodeTextHeader to generate
        /// the heading and Asn1Node.GetText to generate the node text.
        /// </summary>
        /// <param name="node">Target node.</param>
        /// <param name="lineLen">Line length.</param>
        /// <returns>Text string.</returns>
        public static string GetNodeText(Asn1Node node, int lineLen)
        {
            string nodeStr = GetNodeTextHeader(lineLen);

            nodeStr += node.GetText(node, lineLen);
            return(nodeStr);
        }
        public string GetDateTimeMsFromNode(Asn1Node nn)
        {
            DateTime date  = GetDateTimeFromNode(nn);
            DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            return(Convert.ToInt64((date - epoch).TotalMilliseconds).ToString());
        }
Example #18
0
        private static IPrivateKey ParseToIKey(byte[] data)
        {
            /*
             * node        30
             * node[0]     | 30
             * node[0][0]  | | 06 - Algorithm
             * node[0][1]  | | ...
             * node[1][0]  | 04 DATA
             */
            var node = Asn1Node.ReadNode(data);

            var alro = node.Nodes[0].Nodes[0] as Asn1ObjectIdentifier;

            if (alro == null)
            {
                return(null);
            }

            if (alro.Value == "1.2.410.200004.1.15")
            {
                return(new SeedCBCWithSHA1(node));
            }
            if (alro.Value == "1.2.840.113549.1.5.13")
            {
                return(new PKCS5PBES2(node));
            }

            return(null);
        }
    private static string getStringFromSubNode(Asn1Node nn)
    {
        string dataStr = null;

        if ((nn.Tag & Asn1Tag.TAG_MASK) == Asn1Tag.OCTET_STRING && nn.ChildNodeCount > 0)
        {
            Asn1Node n = nn.GetChildNode(0);
            switch (n.Tag & Asn1Tag.TAG_MASK)
            {
            case Asn1Tag.PRINTABLE_STRING:
            case Asn1Tag.IA5_STRING:
            case Asn1Tag.UNIVERSAL_STRING:
            case Asn1Tag.VISIBLE_STRING:
            case Asn1Tag.NUMERIC_STRING:
            case Asn1Tag.UTC_TIME:
            case Asn1Tag.UTF8_STRING:
            case Asn1Tag.BMPSTRING:
            case Asn1Tag.GENERAL_STRING:
            case Asn1Tag.GENERALIZED_TIME:
            {
                if ((n.Tag & Asn1Tag.TAG_MASK) == Asn1Tag.UTF8_STRING)
                {
                    UTF8Encoding unicode = new UTF8Encoding();
                    dataStr = unicode.GetString(n.Data);
                }
                else
                {
                    dataStr = Asn1Util.BytesToString(n.Data);
                }
            }
            break;
            }
        }
        return(dataStr);
    }
Example #20
0
        public void PreventOverflow()
        {
            var cert = File.ReadAllBytes(@"./Authenticode/pkcs7.bin");
            var asn1 = Asn1Node.ReadNode(cert);

            Assert.NotNull(asn1);
        }
Example #21
0
        public RsaPublicKey(Asn1BitString valueNode)
        {
            var value = Asn1Node.ReadNode(valueNode.Data);

            Modulus  = GetRsaData((Asn1Integer)value.Nodes[0]);
            Exponent = GetRsaData((Asn1Integer)value.Nodes[1]);
        }
        private AppleReceipt ParseReceipt(Asn1Node data)
        {
            if (data == null || data.ChildNodeCount != 1)
            {
                throw new InvalidPKCS7Data();
            }

            Asn1Node set = GetSetNode(data);

            var result = new AppleReceipt();
            var inApps = new List <AppleInAppPurchaseReceipt> ();

            for (int t = 0; t < set.ChildNodeCount; t++)
            {
                var node = set.GetChildNode(t);
                // Each node should contain three children.

                if (node.ChildNodeCount == 3)
                {
                    var type  = Asn1Util.BytesToLong(node.GetChildNode(0).Data);
                    var value = node.GetChildNode(2);
                    // See https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1
                    switch (type)
                    {
                    case 2:
                        result.bundleID = Encoding.UTF8.GetString(value.GetChildNode(0).Data);
                        break;

                    case 3:
                        result.appVersion = Encoding.UTF8.GetString(value.GetChildNode(0).Data);
                        break;

                    case 4:
                        result.opaque = value.Data;
                        break;

                    case 5:
                        result.hash = value.Data;
                        break;

                    case 12:
                        var dateString = Encoding.UTF8.GetString(value.GetChildNode(0).Data);
                        result.receiptCreationDate = DateTime.Parse(dateString).ToUniversalTime();
                        break;

                    case 17:
                        inApps.Add(ParseInAppReceipt(value.GetChildNode(0)));
                        break;

                    case 19:
                        result.originalApplicationVersion = Encoding.UTF8.GetString(value.GetChildNode(0).Data);
                        break;
                    }
                }
            }

            result.inAppPurchaseReceipts = inApps.ToArray();
            return(result);
        }
Example #23
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1Set;

            Assert.IsNotNull(typed);
            Assert.AreEqual(2, typed.Nodes.Count);
        }
Example #24
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1NumericString;

            Assert.NotNull(typed);
            Assert.Equal("304741704700129", typed.Value);
        }
Example #25
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1BmpString;

            Assert.NotNull(typed);
            Assert.Equal("г. Ижевск, пер. Северный, д. 61", typed.Value);
        }
Example #26
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1ObjectIdentifier;

            Assert.IsNotNull(typed);
            Assert.AreEqual("2.5.4.10", typed.Value);
        }
Example #27
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1Ia5String;

            Assert.NotNull(typed);
            Assert.AreEqual("StartCom Class 2 Primary Intermediate Object Signing Certificates", typed.Value);
        }
Example #28
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1PrintableString;

            Assert.IsNotNull(typed);
            Assert.AreEqual("TestOrg", typed.Value);
        }
Example #29
0
        public void ReadTest()
        {
            var node  = Asn1Node.ReadNode(new MemoryStream(_etalon));
            var typed = node as Asn1Integer;

            Assert.NotNull(typed);
            Assert.Equal(new byte[] { 0 }, typed.Value);
        }
Example #30
0
 private static int GetContextNumber(Asn1Node node)
 {
     if (((int)node.Tag & 192) != 128)
     {
         throw new Exception("Node is not of class CONTEXT SPECIFIC. (Path: " + node.Path + ")");
     }
     return((int)node.Tag & 31);
 }