示例#1
0
        public AttributeCertificateInfo(
            ASN1Sequence seq)
        {
            this.version                = DERInteger.getInstance(seq.getObjectAt(0));
            this.holder                 = Holder.getInstance(seq.getObjectAt(1));
            this.issuer                 = AttCertIssuer.getInstance(seq.getObjectAt(2));
            this.signature              = AlgorithmIdentifier.getInstance(seq.getObjectAt(3));
            this.serialNumber           = DERInteger.getInstance(seq.getObjectAt(4));
            this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5));
            this.attributes             = ASN1Sequence.getInstance(seq.getObjectAt(6));

            for (int i = 7; i < seq.size(); i++)
            {
                ASN1Encodable obj = (ASN1Encodable)seq.getObjectAt(i);

                if (obj is DERBitString)
                {
                    this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i));
                }
                else if (obj is ASN1Sequence || obj is X509Extensions)
                {
                    this.extensions = X509Extensions.getInstance(seq.getObjectAt(i));
                }
            }
        }
示例#2
0
 public AttributeCertificate(
     ASN1Sequence seq)
 {
     this.acinfo             = AttributeCertificateInfo.getInstance(seq.getObjectAt(0));
     this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     this.signatureValue     = DERBitString.getInstance(seq.getObjectAt(2));
 }
示例#3
0
        public TBSCertificateStructure(
            ASN1Sequence seq)
        {
            int seqStart = 0;

            this.seq = seq;

            //
            // some certficates don't include a version number - we assume v1
            //
            if (seq.getObjectAt(0) is DERTaggedObject)
            {
                version = DERInteger.getInstance(seq.getObjectAt(0));
            }
            else
            {
                seqStart = -1;          // field 0 is missing!
                version  = new DERInteger(0);
            }

            serialNumber = DERInteger.getInstance(seq.getObjectAt(seqStart + 1));

            signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2));
            issuer    = X509Name.getInstance(seq.getObjectAt(seqStart + 3));

            //
            // before and after dates
            //
            ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4);

            startDate = Time.getInstance(dates.getObjectAt(0));
            endDate   = Time.getInstance(dates.getObjectAt(1));

            subject = X509Name.getInstance(seq.getObjectAt(seqStart + 5));

            //
            // public key info.
            //
            subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6));

            for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--)
            {
                DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras);

                switch ((int)extra.getTagNo())
                {
                case 1:
                    issuerUniqueId = DERBitString.getInstance(extra, false);
                    break;

                case 2:
                    subjectUniqueId = DERBitString.getInstance(extra, false);
                    break;

                case 3:
                    extensions = X509Extensions.getInstance(extra);
                    break;
                }
            }
        }
示例#4
0
        /// <summary>
        /// Get a key usage guidlines.
        /// </summary>
        /// <returns>A DER it string or null if they are not specified.</returns>
        public KeyUsage getKeyUsage()
        {
            byte[] bytes = this.getExtensionBytes("2.5.29.15");
            if (bytes != null)
            {
                try
                {
                    ASN1InputStream dIn = new ASN1InputStream(new MemoryStream(bytes));
                    return(new KeyUsage(DERBitString.getInstance(dIn.readObject())));
                }
                catch
                {
                    throw new Exception("error processing key usage extension");
                }
            }

            return(null);
        }
示例#5
0
        public DistributionPoint(
            ASN1Sequence seq)
        {
            for (int i = 0; i != seq.size(); i++)
            {
                ASN1TaggedObject t = (ASN1TaggedObject)seq.getObjectAt(i);
                switch ((int)t.getTagNo())
                {
                case 0:
                    distributionPoint = DistributionPointName.getInstance(t, true);
                    break;

                case 1:
                    reasons = new ReasonFlags(DERBitString.getInstance(t, false));
                    break;

                case 2:
                    cRLIssuer = GeneralNames.getInstance(t, false);
                    break;
                }
            }
        }