Пример #1
0
        private X500Name loadCertificateIssuer()
        {
            if (!isIndirect)
            {
                return(null);
            }

            byte[] ext = GetExtensionValue(X509Extensions.CertificateIssuer);
            if (ext == null)
            {
                return(previousCertificateIssuer);
            }

            try
            {
                GeneralName[] names = GeneralNames.GetInstance(ext).GetNames();

                for (int i = 0; i < names.Length; i++)
                {
                    if (names[i].TagNo == GeneralName.DirectoryName)
                    {
                        return(X500Name.GetInstance(names[i].Name));
                    }
                }
            }
            catch (Exception)
            {
            }

            return(null);
        }
Пример #2
0
        public static ResponderID GetInstance(
            object obj)
        {
            if (obj == null || obj is ResponderID)
            {
                return((ResponderID)obj);
            }

            if (obj is DerOctetString)
            {
                return(new ResponderID((DerOctetString)obj));
            }

            if (obj is Asn1TaggedObject)
            {
                Asn1TaggedObject o = (Asn1TaggedObject)obj;

                if (o.TagNo == 1)
                {
                    return(new ResponderID(X500Name.GetInstance(o, true)));
                }

                return(new ResponderID(Asn1OctetString.GetInstance(o, true)));
            }

            return(new ResponderID(X500Name.GetInstance(obj)));
        }
Пример #3
0
        private object[] GetNames(
            GeneralName[] names)
        {
            int count = 0;

            for (int i = 0; i != names.Length; i++)
            {
                if (names[i].TagNo == GeneralName.DirectoryName)
                {
                    ++count;
                }
            }

            object[] result = new object[count];

            int pos = 0;

            for (int i = 0; i != names.Length; i++)
            {
                if (names[i].TagNo == GeneralName.DirectoryName)
                {
                    result[pos++] = X500Name.GetInstance(names[i].Name);
                }
            }

            return(result);
        }
Пример #4
0
        public override string ToString()
        {
            StringBuilder buf = new StringBuilder();

            buf.Append(tag);
            buf.Append(": ");

            switch (tag)
            {
            case Rfc822Name:
            case DnsName:
            case UniformResourceIdentifier:
                buf.Append(DerIA5String.GetInstance(obj).GetString());
                break;

            case DirectoryName:
                buf.Append(X500Name.GetInstance(obj).ToString());
                break;

            default:
                buf.Append(obj.ToString());
                break;
            }

            return(buf.ToString());
        }
Пример #5
0
        private bool MatchesDN(
            X500Name subject,
            GeneralNames targets)
        {
            GeneralName[] names = targets.GetNames();

            for (int i = 0; i != names.Length; i++)
            {
                GeneralName gn = names[i];

                if (gn.TagNo == GeneralName.DirectoryName)
                {
                    try
                    {
                        if (X500Name.GetInstance(gn.Name).Equivalent(subject))
                        {
                            return(true);
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }

            return(false);
        }
        internal TbsCertificateStructure(
            Asn1Sequence seq)
        {
            int seqStart = 0;

            this.seq = seq;

            //
            // some certficates don't include a version number - we assume v1
            //
            if (seq[0] is DerTaggedObject)
            {
                version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true);
            }
            else
            {
                seqStart = -1;                          // field 0 is missing!
                version  = new DerInteger(0);
            }

            serialNumber = DerInteger.GetInstance(seq[seqStart + 1]);

            signature = AlgorithmIdentifier.GetInstance(seq[seqStart + 2]);
            issuer    = X500Name.GetInstance(seq[seqStart + 3]);

            //
            // before and after dates
            //
            Asn1Sequence dates = (Asn1Sequence)seq[seqStart + 4];

            startDate = Time.GetInstance(dates[0]);
            endDate   = Time.GetInstance(dates[1]);

            subject = X500Name.GetInstance(seq[seqStart + 5]);

            //
            // public key info.
            //
            subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[seqStart + 6]);

            for (int extras = seq.Count - (seqStart + 6) - 1; extras > 0; extras--)
            {
                DerTaggedObject extra = (DerTaggedObject)seq[seqStart + 6 + extras];

                switch (extra.TagNo)
                {
                case 1:
                    issuerUniqueID = DerBitString.GetInstance(extra, false);
                    break;

                case 2:
                    subjectUniqueID = DerBitString.GetInstance(extra, false);
                    break;

                case 3:
                    extensions = X509Extensions.GetInstance(extra);
                    break;
                }
            }
        }
Пример #7
0
        public static GeneralName GetInstance(
            object obj)
        {
            if (obj == null || obj is GeneralName)
            {
                return((GeneralName)obj);
            }

            if (obj is Asn1TaggedObject)
            {
                Asn1TaggedObject tagObj = (Asn1TaggedObject)obj;
                int tag = tagObj.TagNo;

                switch (tag)
                {
                case OtherName:
                    return(new GeneralName(tag, Asn1Sequence.GetInstance(tagObj, false)));

                case Rfc822Name:
                    return(new GeneralName(tag, DerIA5String.GetInstance(tagObj, false)));

                case DnsName:
                    return(new GeneralName(tag, DerIA5String.GetInstance(tagObj, false)));

                case X400Address:
                    throw new ArgumentException("unknown tag: " + tag);

                case DirectoryName:
                    return(new GeneralName(tag, X500Name.GetInstance(tagObj, true)));

                case EdiPartyName:
                    return(new GeneralName(tag, Asn1Sequence.GetInstance(tagObj, false)));

                case UniformResourceIdentifier:
                    return(new GeneralName(tag, DerIA5String.GetInstance(tagObj, false)));

                case IPAddress:
                    return(new GeneralName(tag, Asn1OctetString.GetInstance(tagObj, false)));

                case RegisteredID:
                    return(new GeneralName(tag, DerObjectIdentifier.GetInstance(tagObj, false)));
                }
            }

            if (obj is byte[])
            {
                try
                {
                    return(GetInstance(Asn1Object.FromByteArray((byte[])obj)));
                }
                catch (IOException)
                {
                    throw new ArgumentException("unable to parse encoded general name");
                }
            }

            throw new ArgumentException("unknown object in GetInstance: " + Platform.GetTypeName(obj), "obj");
        }
        internal static ICollection GetAlternativeName(
            byte[] extVal)
        {
            IList temp = Platform.CreateArrayList();

            if (extVal != null)
            {
                try
                {
                    Asn1Sequence seq = Asn1Sequence.GetInstance(extVal);

                    foreach (GeneralName genName in seq)
                    {
                        IList list = Platform.CreateArrayList();
                        list.Add(genName.TagNo);

                        switch (genName.TagNo)
                        {
                        case GeneralName.EdiPartyName:
                        case GeneralName.X400Address:
                        case GeneralName.OtherName:
                            list.Add(genName.Name.ToAsn1Object());
                            break;

                        case GeneralName.DirectoryName:
                            list.Add(X500Name.GetInstance(genName.Name).ToString());
                            break;

                        case GeneralName.DnsName:
                        case GeneralName.Rfc822Name:
                        case GeneralName.UniformResourceIdentifier:
                            list.Add(((IAsn1String)genName.Name).GetString());
                            break;

                        case GeneralName.RegisteredID:
                            list.Add(DerObjectIdentifier.GetInstance(genName.Name).Id);
                            break;

                        case GeneralName.IPAddress:
                            list.Add(DerOctetString.GetInstance(genName.Name).GetOctets());
                            break;

                        default:
                            throw new IOException("Bad tag number: " + genName.TagNo);
                        }

                        temp.Add(list);
                    }
                }
                catch (Exception e)
                {
                    throw new CertificateParsingException(e.Message);
                }
            }

            return(temp);
        }
Пример #9
0
        private ServiceLocator(
            Asn1Sequence seq)
        {
            this.issuer = X500Name.GetInstance(seq[0]);

            if (seq.Count > 1)
            {
                this.locator = seq[1].ToAsn1Object();
            }
        }
        private IssuerAndSerialNumber(
            Asn1Sequence seq)
        {
            if (seq.Count != 2)
            {
                throw new ArgumentException("Wrong number of elements in sequence", "seq");
            }

            this.name             = X500Name.GetInstance(seq[0]);
            this.certSerialNumber = DerInteger.GetInstance(seq[1]);
        }
Пример #11
0
        private CertTemplate(Asn1Sequence seq)
        {
            this.seq = seq;

            foreach (Asn1TaggedObject tObj in seq)
            {
                switch (tObj.TagNo)
                {
                case 0:
                    version = DerInteger.GetInstance(tObj, false);
                    break;

                case 1:
                    serialNumber = DerInteger.GetInstance(tObj, false);
                    break;

                case 2:
                    signingAlg = AlgorithmIdentifier.GetInstance(tObj, false);
                    break;

                case 3:
                    issuer = X500Name.GetInstance(tObj, true); // CHOICE
                    break;

                case 4:
                    validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(tObj, false));
                    break;

                case 5:
                    subject = X500Name.GetInstance(tObj, true); // CHOICE
                    break;

                case 6:
                    publicKey = SubjectPublicKeyInfo.GetInstance(tObj, false);
                    break;

                case 7:
                    issuerUID = DerBitString.GetInstance(tObj, false);
                    break;

                case 8:
                    subjectUID = DerBitString.GetInstance(tObj, false);
                    break;

                case 9:
                    extensions = X509Extensions.GetInstance(tObj, false);
                    break;

                default:
                    throw new ArgumentException("unknown tag: " + tObj.TagNo, "seq");
                }
            }
        }
Пример #12
0
        internal TbsCertificateList(
            Asn1Sequence seq)
        {
            if (seq.Count < 3 || seq.Count > 7)
            {
                throw new ArgumentException("Bad sequence size: " + seq.Count);
            }

            int seqPos = 0;

            this.seq = seq;

            if (seq[seqPos] is DerInteger)
            {
                version = DerInteger.GetInstance(seq[seqPos++]);
            }
            else
            {
                version = new DerInteger(0);
            }

            signature  = AlgorithmIdentifier.GetInstance(seq[seqPos++]);
            issuer     = X500Name.GetInstance(seq[seqPos++]);
            thisUpdate = Time.GetInstance(seq[seqPos++]);

            if (seqPos < seq.Count &&
                (seq[seqPos] is DerUtcTime ||
                 seq[seqPos] is DerGeneralizedTime ||
                 seq[seqPos] is Time))
            {
                nextUpdate = Time.GetInstance(seq[seqPos++]);
            }

            if (seqPos < seq.Count &&
                !(seq[seqPos] is DerTaggedObject))
            {
                revokedCertificates = Asn1Sequence.GetInstance(seq[seqPos++]);
            }

            if (seqPos < seq.Count &&
                seq[seqPos] is DerTaggedObject)
            {
                crlExtensions = X509Extensions.GetInstance(seq[seqPos]);
            }
        }
Пример #13
0
        private CrlIdentifier(
            Asn1Sequence seq)
        {
            if (seq == null)
            {
                throw new ArgumentNullException("seq");
            }
            if (seq.Count < 2 || seq.Count > 3)
            {
                throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
            }

            this.crlIssuer     = X500Name.GetInstance(seq[0]);
            this.crlIssuedTime = DerUtcTime.GetInstance(seq[1]);

            if (seq.Count > 2)
            {
                this.crlNumber = DerInteger.GetInstance(seq[2]);
            }
        }
        private object[] GetNames()
        {
            GeneralNames name;

            if (form is V2Form)
            {
                name = ((V2Form)form).IssuerName;
            }
            else
            {
                name = (GeneralNames)form;
            }

            GeneralName[] names = name.GetNames();

            int count = 0;

            for (int i = 0; i != names.Length; i++)
            {
                if (names[i].TagNo == GeneralName.DirectoryName)
                {
                    ++count;
                }
            }

            object[] result = new object[count];

            int pos = 0;

            for (int i = 0; i != names.Length; i++)
            {
                if (names[i].TagNo == GeneralName.DirectoryName)
                {
                    result[pos++] = X500Name.GetInstance(names[i].Name);
                }
            }

            return(result);
        }
        private CertificationRequestInfo(
            Asn1Sequence seq)
        {
            version = (DerInteger)seq[0];

            subject       = X500Name.GetInstance(seq[1]);
            subjectPKInfo = SubjectPublicKeyInfo.GetInstance(seq[2]);

            //
            // some CertificationRequestInfo objects seem to treat this field
            // as optional.
            //
            if (seq.Count > 3)
            {
                DerTaggedObject tagobj = (DerTaggedObject)seq[3];
                attributes = Asn1Set.GetInstance(tagobj, false);
            }

            if (subject == null || version == null || subjectPKInfo == null)
            {
                throw new ArgumentException(
                          "Not all mandatory fields set in CertificationRequestInfo generator.");
            }
        }
 private IssuerAndSerialNumber(
     Asn1Sequence seq)
 {
     this.name         = X500Name.GetInstance(seq[0]);
     this.serialNumber = (DerInteger)seq[1];
 }