void m_decode(Byte[] rawData) { List <String> aiaUrls = new List <String>(); List <String> ocspUrls = new List <String>(); Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); do { Int32 offset = asn.Offset; if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); String oidString = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).Value; asn.MoveNextAndExpectTags(0x86); switch (oidString) { case "1.3.6.1.5.5.7.48.2": aiaUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break; case "1.3.6.1.5.5.7.48.1": ocspUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break; } asn.MoveToPoisition(offset); } while (asn.MoveNextCurrentLevel()); CertificationAuthorityIssuer = aiaUrls.ToArray(); OnlineCertificateStatusProtocol = ocspUrls.ToArray(); }
void decodeSignerInfos(Asn1Reader asn) { if (asn.PayloadLength == 0) { return; } Int32 offset = asn.Offset; asn.MoveNext(); do { _signerInfos.Add(new PkcsSignerInfo(asn.GetTagRawData())); } while (asn.MoveNextCurrentLevel()); asn.MoveToPoisition(offset); }
void decodeCrls(Asn1Reader asn) { if (asn.PayloadLength == 0) { return; } Int32 offset = asn.Offset; asn.MoveNext(); do { _crls.Add(new X509CRL2(asn.GetTagRawData())); } while (asn.MoveNextCurrentLevel()); asn.MoveToPoisition(offset); }
Byte[] extractContent(Asn1Reader asn) { Int32 offset = asn.Offset; asn.MoveNext(); ContentType = new Asn1ObjectIdentifier(asn.GetTagRawData()).Value; if (asn.MoveNextCurrentLevel()) { // content [0] EXPLICIT ANY DEFINED BY contentType asn.MoveNextAndExpectTags((Byte)Asn1Type.OCTET_STRING); // octet string return asn.GetPayload(); } asn.MoveToPoisition(offset); return null; }
void decodeDigestAlgorithms(Asn1Reader asn) { // asn tag -> SET (0x31) Int32 offset = asn.Offset; if (asn.PayloadLength == 0) { return; } asn.MoveNext(); do { _digestAlgorithms.Add(new AlgorithmIdentifier(asn.GetTagRawData())); } while (asn.MoveNextCurrentLevel()); asn.MoveToPoisition(offset); }
void m_decode(Byte[] rawData) { Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); Oid oid = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()); switch (oid.Value) { case "1.3.6.1.5.5.7.2.1": Type = X509PolicyQualifierType.CpsUrl; asn.MoveNext(); PolicyUrl = new Uri(Asn1Utils.DecodeIA5String(asn.GetTagRawData()).Replace("\0", null)); break; case "1.3.6.1.5.5.7.2.2": Type = X509PolicyQualifierType.UserNotice; if (!asn.MoveNext()) { return; } if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); if (asn.Tag == 48) { Int32 offset = asn.Offset; asn.MoveNext(); NoticeReference = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String }); asn.MoveNext(); asn.MoveNext(); NoticeNumber = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData()); asn.MoveToPoisition(offset); if (asn.MoveNextCurrentLevel()) { NoticeText = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String }); } } else { NoticeText = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String }); } break; default: m_reset(); return; } }
static void buildTree(Asn1Reader asn, Asn1Node node, Asn1Tree rootTree) { asn.MoveNext(); List <Int32> subNodeIndexes = new List <Int32>(); Int32 index = 0; do { node.AddUnsafe(new Asn1Node(asn, rootTree)); if (asn.IsConstructed) { subNodeIndexes.Add(index); } index++; } while (asn.MoveNextCurrentLevel()); asn.Reset(); foreach (Int32 subNodeIndex in subNodeIndexes) { Asn1Node subNode = node.Children[subNodeIndex]; asn.MoveToPoisition(subNode.Offset); buildTree(asn, subNode, rootTree); } }