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]; }
/** * 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(); }
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; } } }
public void GenericTest() { var cert = File.ReadAllBytes(@"./test_files/pidgin.pkcs7"); var asn1 = Asn1Node.ReadNode(cert); Assert.NotNull(asn1); }
private static IReadOnlyCollection <string> FindObjectIdentifiers(Asn1Node node, Asn1ObjectIdentifier oid) { var results = new HashSet <string>(); FindObjectIdentifiers(node, oid, results); return(results); }
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); }
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; } } }
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)); }
public void Asn1ShouldSupportIa5String() { var cert = File.ReadAllBytes(@"./Authenticode/pidgin.pkcs7"); var asn1 = Asn1Node.ReadNode(cert); Assert.NotNull(asn1); }
/* * 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; }
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); }
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()); }
/// <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()); }
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); }
public void PreventOverflow() { var cert = File.ReadAllBytes(@"./Authenticode/pkcs7.bin"); var asn1 = Asn1Node.ReadNode(cert); Assert.NotNull(asn1); }
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); }
public void ReadTest() { var node = Asn1Node.ReadNode(new MemoryStream(_etalon)); var typed = node as Asn1Set; Assert.IsNotNull(typed); Assert.AreEqual(2, typed.Nodes.Count); }
public void ReadTest() { var node = Asn1Node.ReadNode(new MemoryStream(_etalon)); var typed = node as Asn1NumericString; Assert.NotNull(typed); Assert.Equal("304741704700129", typed.Value); }
public void ReadTest() { var node = Asn1Node.ReadNode(new MemoryStream(_etalon)); var typed = node as Asn1BmpString; Assert.NotNull(typed); Assert.Equal("г. Ижевск, пер. Северный, д. 61", typed.Value); }
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); }
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); }
public void ReadTest() { var node = Asn1Node.ReadNode(new MemoryStream(_etalon)); var typed = node as Asn1PrintableString; Assert.IsNotNull(typed); Assert.AreEqual("TestOrg", typed.Value); }
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); }
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); }