Example #1
0
        private LinkedCertificate(Asn1Sequence seq)
        {
            this.mDigest       = DigestInfo.GetInstance(seq[0]);
            this.mCertLocation = GeneralName.GetInstance(seq[1]);

            for (int i = 2; i < seq.Count; ++i)
            {
                Asn1TaggedObject tagged = Asn1TaggedObject.GetInstance(seq[i]);

                switch (tagged.TagNo)
                {
                case 0:
                    this.mCertIssuer = X509Name.GetInstance(tagged, false);
                    break;

                case 1:
                    this.mCACerts = GeneralNames.GetInstance(tagged, false);
                    break;

                default:
                    throw new ArgumentException("unknown tag in tagged field");
                }
            }
        }
        public SemanticsInformation(
            Asn1Sequence seq)
        {
            if (seq.Count < 1)
            {
                throw new ArgumentException("no objects in SemanticsInformation");
            }

            IEnumerator e = seq.GetEnumerator();

            e.MoveNext();
            object obj = e.Current;

            if (obj is DerObjectIdentifier)
            {
                semanticsIdentifier = DerObjectIdentifier.GetInstance(obj);
                if (e.MoveNext())
                {
                    obj = e.Current;
                }
                else
                {
                    obj = null;
                }
            }

            if (obj != null)
            {
                Asn1Sequence generalNameSeq = Asn1Sequence.GetInstance(obj);
                nameRegistrationAuthorities = new GeneralName[generalNameSeq.Count];
                for (int i = 0; i < generalNameSeq.Count; i++)
                {
                    nameRegistrationAuthorities[i] = GeneralName.GetInstance(generalNameSeq[i]);
                }
            }
        }
Example #3
0
    private RoleSyntax(Asn1Sequence seq)
    {
        if (seq.Count < 1 || seq.Count > 2)
        {
            throw new ArgumentException("Bad sequence size: " + seq.Count);
        }
        for (int i = 0; i != seq.Count; i++)
        {
            Asn1TaggedObject instance = Asn1TaggedObject.GetInstance(seq[i]);
            switch (instance.TagNo)
            {
            case 0:
                roleAuthority = GeneralNames.GetInstance(instance, explicitly: false);
                break;

            case 1:
                roleName = GeneralName.GetInstance(instance, explicitly: true);
                break;

            default:
                throw new ArgumentException("Unknown tag in RoleSyntax");
            }
        }
    }
        //Get OCSP URLs from a certificate by checking the extensions, finding the OCSP extension and extracting its URLs.
        public static List <string> GetAuthorityInformationAccessOcspUrl(X509Certificate cert)
        {
            List <string> ocspUrls = new List <string>();

            try
            {
                Asn1Object obj = GetExtensionValue(cert, X509Extensions.AuthorityInfoAccess.Id);

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

                Asn1Sequence s        = (Asn1Sequence)obj;
                IEnumerator  elements = s.GetEnumerator();

                while (elements.MoveNext())
                {
                    Asn1Sequence        element = (Asn1Sequence)elements.Current;
                    DerObjectIdentifier oid     = (DerObjectIdentifier)element[0];

                    if (oid.Id.Equals(OCSP_OID)) // Is OID == OCSP?
                    {
                        Asn1TaggedObject taggedObject = (Asn1TaggedObject)element[1];
                        GeneralName      gn           = (GeneralName)GeneralName.GetInstance(taggedObject);
                        ocspUrls.Add(((DerIA5String)DerIA5String.GetInstance(gn.Name)).GetString());
                    }
                }
            }
            catch (Exception e)
            {
                throw new OCSPExpection("Error parsing AIA.", e);
            }

            return(ocspUrls);
        }
Example #5
0
 private CertId(Asn1Sequence seq)
 {
     issuer       = GeneralName.GetInstance(seq[0]);
     serialNumber = DerInteger.GetInstance(seq[1]);
 }
Example #6
0
 /**
  * Adds a target group criterion for the attribute certificate to the target
  * information extension criteria. The <code>X509AttributeCertificate</code>
  * must contain at least one of the specified target groups.
  * <p>
  * Each attribute certificate may contain a target information extension
  * limiting the servers where this attribute certificate can be used. If
  * this extension is not present, the attribute certificate is not targeted
  * and may be accepted by any server.
  * </p>
  *
  * @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName
  * @throws IOException if a parsing error occurs.
  */
 public void AddTargetGroup(
     byte[] name)
 {
     AddTargetGroup(GeneralName.GetInstance(Asn1Object.FromByteArray(name)));
 }
Example #7
0
        private TstInfo(
            Asn1Sequence seq)
        {
            IEnumerator e = seq.GetEnumerator();

            // version
            e.MoveNext();
            version = DerInteger.GetInstance(e.Current);

            // tsaPolicy
            e.MoveNext();
            tsaPolicyId = DerObjectIdentifier.GetInstance(e.Current);

            // messageImprint
            e.MoveNext();
            messageImprint = MessageImprint.GetInstance(e.Current);

            // serialNumber
            e.MoveNext();
            serialNumber = DerInteger.GetInstance(e.Current);

            // genTime
            e.MoveNext();
            genTime = DerGeneralizedTime.GetInstance(e.Current);

            // default for ordering
            ordering = DerBoolean.False;

            while (e.MoveNext())
            {
                Asn1Object o = (Asn1Object)e.Current;

                if (o is Asn1TaggedObject)
                {
                    DerTaggedObject tagged = (DerTaggedObject)o;

                    switch (tagged.TagNo)
                    {
                    case 0:
                        tsa = GeneralName.GetInstance(tagged, true);
                        break;

                    case 1:
                        extensions = X509Extensions.GetInstance(tagged, false);
                        break;

                    default:
                        throw new ArgumentException("Unknown tag value " + tagged.TagNo);
                    }
                }

                if (o is DerSequence)
                {
                    accuracy = Accuracy.GetInstance(o);
                }

                if (o is DerBoolean)
                {
                    ordering = DerBoolean.GetInstance(o);
                }

                if (o is DerInteger)
                {
                    nonce = DerInteger.GetInstance(o);
                }
            }
        }
Example #8
0
        public void CheckCertificate(
            int id,
            byte[]  cert)
        {
            Asn1Object seq  = Asn1Object.FromByteArray(cert);
            string     dump = Asn1Dump.DumpAsString(seq);

            X509CertificateStructure obj     = X509CertificateStructure.GetInstance(seq);
            TbsCertificateStructure  tbsCert = obj.TbsCertificate;

            if (!tbsCert.Subject.ToString().Equals(subjects[id - 1]))
            {
                Fail("failed subject test for certificate id " + id
                     + " got " + tbsCert.Subject.ToString());
            }

            if (tbsCert.Version >= 3)
            {
                X509Extensions ext = tbsCert.Extensions;
                if (ext != null)
                {
                    foreach (DerObjectIdentifier oid in ext.ExtensionOids)
                    {
                        X509Extension extVal = ext.GetExtension(oid);
                        Asn1Object    extObj = Asn1Object.FromByteArray(extVal.Value.GetOctets());

                        if (oid.Equals(X509Extensions.SubjectKeyIdentifier))
                        {
                            SubjectKeyIdentifier.GetInstance(extObj);
                        }
                        else if (oid.Equals(X509Extensions.KeyUsage))
                        {
                            KeyUsage.GetInstance(extObj);
                        }
                        else if (oid.Equals(X509Extensions.ExtendedKeyUsage))
                        {
                            ExtendedKeyUsage ku = ExtendedKeyUsage.GetInstance(extObj);

                            Asn1Sequence sq = (Asn1Sequence)ku.ToAsn1Object();
                            for (int i = 0; i != sq.Count; i++)
                            {
                                KeyPurposeID.GetInstance(sq[i]);
                            }
                        }
                        else if (oid.Equals(X509Extensions.SubjectAlternativeName))
                        {
                            GeneralNames gn = GeneralNames.GetInstance(extObj);

                            Asn1Sequence sq = (Asn1Sequence)gn.ToAsn1Object();
                            for (int i = 0; i != sq.Count; i++)
                            {
                                GeneralName.GetInstance(sq[i]);
                            }
                        }
                        else if (oid.Equals(X509Extensions.IssuerAlternativeName))
                        {
                            GeneralNames gn = GeneralNames.GetInstance(extObj);

                            Asn1Sequence sq = (Asn1Sequence)gn.ToAsn1Object();
                            for (int i = 0; i != sq.Count; i++)
                            {
                                GeneralName.GetInstance(sq[i]);
                            }
                        }
                        else if (oid.Equals(X509Extensions.CrlDistributionPoints))
                        {
                            CrlDistPoint p = CrlDistPoint.GetInstance(extObj);

                            DistributionPoint[] points = p.GetDistributionPoints();
                            for (int i = 0; i != points.Length; i++)
                            {
                                // do nothing
                            }
                        }
                        else if (oid.Equals(X509Extensions.CertificatePolicies))
                        {
                            Asn1Sequence cp = (Asn1Sequence)extObj;

                            for (int i = 0; i != cp.Count; i++)
                            {
                                PolicyInformation.GetInstance(cp[i]);
                            }
                        }
                        else if (oid.Equals(X509Extensions.AuthorityKeyIdentifier))
                        {
                            AuthorityKeyIdentifier.GetInstance(extObj);
                        }
                        else if (oid.Equals(X509Extensions.BasicConstraints))
                        {
                            BasicConstraints.GetInstance(extObj);
                        }
                        else
                        {
                            //Console.WriteLine(oid.Id);
                        }
                    }
                }
            }
        }
Example #9
0
        /// <summary>
        /// Extract AIA URL. It can be AIA OCSP or AIA Issuer
        /// </summary>
        /// <param name="taggedObject"></param>
        /// <returns></returns>
        string ExtractAIAUrl(Asn1TaggedObject taggedObject)
        {
            var gn = (GeneralName)GeneralName.GetInstance(taggedObject);

            return(((DerIA5String)DerIA5String.GetInstance(gn.Name)).GetString());
        }
Example #10
0
 public void AddTargetName(byte[] name)
 {
     this.AddTargetName(GeneralName.GetInstance(Asn1Object.FromByteArray(name)));
 }