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();
        }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 7
0
        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);
            }
        }