Пример #1
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;
                }
            }
        }
Пример #2
0
        public OriginatorInfo(
            ASN1Sequence seq)
        {
            switch (seq.size())
            {
            case 0:     // empty
                break;

            case 1:
                ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(0);
                switch ((int)o.getTagNo())
                {
                case 0:
                    certs = ASN1Set.getInstance(o, false);
                    break;

                case 1:
                    crls = ASN1Set.getInstance(o, false);
                    break;

                default:
                    throw new ArgumentException("Bad tag in OriginatorInfo: " + o.getTagNo());
                }
                break;

            case 2:
                certs = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(0), false);
                crls  = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(1), false);
                break;

            default:
                throw new ArgumentException("OriginatorInfo too big");
            }
        }
Пример #3
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));
                }
            }
        }
Пример #4
0
        /**
         * Get the "subject" from the TBSCertificate bytes that are passed in
         * @param enc A TBSCertificate in a byte array
         * @return a DERObject
         */
        private static ASN1Object GetSubject(byte[] enc)
        {
            ASN1InputStream inp = new ASN1InputStream(new MemoryStream(enc));
            ASN1Sequence    seq = (ASN1Sequence)inp.readObject();

            return((ASN1Object)seq.getObjectAt(seq.getObjectAt(0) is DERTaggedObject ? 5 : 4));
        }
Пример #5
0
            /**
             * Constructs an X509 name
             * @param seq an ASN1 Sequence
             */
            public X509Name(ASN1Sequence seq)
            {
                IEnumerator e = seq.getObjects();

                while (e.MoveNext())
                {
                    ASN1Set sett = (ASN1Set)e.Current;

                    for (int i = 0; i < sett.size(); i++)
                    {
                        ASN1Sequence s  = (ASN1Sequence)sett.getObjectAt(i);
                        String       id = (String)DefaultSymbols[s.getObjectAt(0)];
                        if (id == null)
                        {
                            continue;
                        }
                        ArrayList vs = (ArrayList)values[id];
                        if (vs == null)
                        {
                            vs         = new ArrayList();
                            values[id] = vs;
                        }
                        vs.Add(((DERString)s.getObjectAt(1)).getString());
                    }
                }
            }
Пример #6
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));
 }
Пример #7
0
 public CertificateList(
     ASN1Sequence seq)
 {
     tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0));
     sigAlgId    = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     sig         = (DERBitString)seq.getObjectAt(2);
 }
Пример #8
0
 public CertBag(
     ASN1Sequence seq)
 {
     this.seq       = seq;
     this.certId    = (DERObjectIdentifier)seq.getObjectAt(0);
     this.certValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject();
 }
Пример #9
0
 public CertificationRequest(
     ASN1Sequence seq)
 {
     reqInfo  = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
     sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     sigBits  = (DERBitString)seq.getObjectAt(2);
 }
Пример #10
0
 public CompressedData(
     ASN1Sequence seq)
 {
     this.version = (DERInteger)seq.getObjectAt(0);
     this.compressionAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     this.encapContentInfo     = ContentInfo.getInstance(seq.getObjectAt(2));
 }
Пример #11
0
 public KEKRecipientInfo(
     ASN1Sequence seq)
 {
     version = (DERInteger)seq.getObjectAt(0);
     kekid   = KEKIdentifier.getInstance(seq.getObjectAt(1));
     keyEncryptionAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(2));
     encryptedKey           = (ASN1OctetString)seq.getObjectAt(3);
 }
Пример #12
0
 public CertID(
     ASN1Sequence seq)
 {
     hashAlgorithm  = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
     issuerNameHash = (ASN1OctetString)seq.getObjectAt(1);
     issuerKeyHash  = (ASN1OctetString)seq.getObjectAt(2);
     serialNumber   = (DERInteger)seq.getObjectAt(3);
 }
Пример #13
0
        /**
         *
         */
        public IetfAttrSyntax(ASN1Sequence seq)
        {
            int i = 0;

            if (seq.getObjectAt(0) is ASN1TaggedObject)
            {
                policyAuthority = GeneralNames.getInstance(((ASN1TaggedObject)seq.getObjectAt(0)), false);
                i++;
            }
            else if (seq.size() == 2)
            { // VOMS fix
                policyAuthority = GeneralNames.getInstance(seq.getObjectAt(0));
                i++;
            }

            if (!(seq.getObjectAt(i) is ASN1Sequence))
            {
                throw new ArgumentException("Non-IetfAttrSyntax encoding");
            }

            seq = (ASN1Sequence)seq.getObjectAt(i);

            for (IEnumerator e = seq.getObjects(); e.MoveNext();)
            {
                ASN1Object obj = (ASN1Object)e.Current;
                int        type;

                if (obj is DERObjectIdentifier)
                {
                    type = VALUE_OID;
                }
                else if (obj is DERUTF8String)
                {
                    type = VALUE_UTF8;
                }
                else if (obj is DEROctetString)
                {
                    type = VALUE_OCTETS;
                }
                else
                {
                    throw new ArgumentException("Bad value type encoding IetfAttrSyntax");
                }

                if (valueChoice < 0)
                {
                    valueChoice = type;
                }

                if (type != valueChoice)
                {
                    throw new ArgumentException("Mix of value types in IetfAttrSyntax");
                }

                values.Add(obj);
            }
        }
Пример #14
0
 public SafeBag(
     ASN1Sequence seq)
 {
     this.bagId    = (DERObjectIdentifier)seq.getObjectAt(0);
     this.bagValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject();
     if (seq.size() == 3)
     {
         this.bagAttributes = (ASN1Set)seq.getObjectAt(2);
     }
 }
Пример #15
0
        public SMIMECapability(
            ASN1Sequence seq)
        {
            capabilityID = (DERObjectIdentifier)seq.getObjectAt(0);

            if (seq.size() > 1)
            {
                parameters = (ASN1Object)seq.getObjectAt(1);
            }
        }
Пример #16
0
        public PolicyInformation(
            ASN1Sequence seq)
        {
            policyIdentifier = (DERObjectIdentifier)seq.getObjectAt(0);

            if (seq.size() > 1)
            {
                policyQualifiers = (ASN1Sequence)seq.getObjectAt(1);
            }
        }
Пример #17
0
        public RevokedInfo(
            ASN1Sequence seq)
        {
            this.revocationTime = (DERGeneralizedTime)seq.getObjectAt(0);

            if (seq.size() > 1)
            {
                this.revocationReason = new CRLReason(DEREnumerated.getInstance(
                                                          (ASN1TaggedObject)seq.getObjectAt(1), true));
            }
        }
Пример #18
0
        public IssuerSerial(
            ASN1Sequence seq)
        {
            issuer = GeneralNames.getInstance(seq.getObjectAt(0));
            serial = (DERInteger)seq.getObjectAt(1);

            if (seq.size() == 3)
            {
                issuerUID = (DERBitString)seq.getObjectAt(2);
            }
        }
Пример #19
0
        public OCSPRequest(
            ASN1Sequence seq)
        {
            tbsRequest = TBSRequest.getInstance(seq.getObjectAt(0));

            if (seq.size() == 2)
            {
                optionalSignature = Signature.getInstance(
                    (ASN1TaggedObject)seq.getObjectAt(1), true);
            }
        }
Пример #20
0
        public Request(
            ASN1Sequence seq)
        {
            reqCert = CertID.getInstance(seq.getObjectAt(0));

            if (seq.size() == 2)
            {
                singleRequestExtensions = X509Extensions.getInstance(
                    (ASN1TaggedObject)seq.getObjectAt(1), true);
            }
        }
Пример #21
0
        public EncryptedData(
            ASN1Sequence seq)
        {
            int version = ((DERInteger)seq.getObjectAt(0)).getValue().intValue();

            if (version != 0)
            {
                throw new ArgumentException("sequence not version 0");
            }

            this.data = (ASN1Sequence)seq.getObjectAt(1);
        }
Пример #22
0
 public EncryptedContentInfo(
     ASN1Sequence seq)
 {
     contentType = (DERObjectIdentifier)seq.getObjectAt(0);
     contentEncryptionAlgorithm = AlgorithmIdentifier.getInstance(
         seq.getObjectAt(1));
     if (seq.size() > 2)
     {
         encryptedContent = ASN1OctetString.getInstance(
             (ASN1TaggedObject)seq.getObjectAt(2), false);
     }
 }
Пример #23
0
        public Signature(
            ASN1Sequence seq)
        {
            signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
            signature          = (DERBitString)seq.getObjectAt(1);

            if (seq.size() == 3)
            {
                certs = ASN1Sequence.getInstance(
                    (ASN1TaggedObject)seq.getObjectAt(2), true);
            }
        }
Пример #24
0
            public CRLEntry(
                ASN1Sequence seq)
            {
                this.seq = seq;

                userCertificate = (DERInteger)seq.getObjectAt(0);
                revocationDate  = Time.getInstance(seq.getObjectAt(1));
                if (seq.size() == 3)
                {
                    crlEntryExtensions = X509Extensions.getInstance(seq.getObjectAt(2));
                }
            }
Пример #25
0
        public BasicOCSPResponse(
            ASN1Sequence seq)
        {
            this.tbsResponseData    = ResponseData.getInstance(seq.getObjectAt(0));
            this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
            this.signature          = (DERBitString)seq.getObjectAt(2);

            if (seq.size() > 3)
            {
                this.certs = ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(3), true);
            }
        }
Пример #26
0
 internal PKCS10CertificationRequest(ASN1Sequence seq)
 {
     try
     {
         this.reqInfo  = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
         this.sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
         this.sigBits  = (DERBitString)seq.getObjectAt(2);
     }
     catch (Exception ex)
     {
         throw new ArgumentException("Create From ASN1Sequence: " + ex.Message);
     }
 }
Пример #27
0
        private BigInteger[] derDecode(byte[]  encoding)
        {
            MemoryStream    bIn = new MemoryStream(encoding);
            ASN1InputStream dIn = new ASN1InputStream(bIn);
            ASN1Sequence    s   = (ASN1Sequence)dIn.readObject();

            BigInteger[] sig = new BigInteger[2];

            sig[0] = ((DERInteger)s.getObjectAt(0)).getValue();
            sig[1] = ((DERInteger)s.getObjectAt(1)).getValue();

            return(sig);
        }
Пример #28
0
        public AlgorithmIdentifier(
            ASN1Sequence seq)
        {
            objectId = (DERObjectIdentifier)seq.getObjectAt(0);

            if (seq.size() == 2)
            {
                parameters = seq.getObjectAt(1);
            }
            else
            {
                parameters = null;
            }
        }
Пример #29
0
 public RC2CBCParameter(
     ASN1Sequence seq)
 {
     if (seq.size() == 1)
     {
         version = null;
         iv      = (ASN1OctetString)seq.getObjectAt(0);
     }
     else
     {
         version = (DERInteger)seq.getObjectAt(0);
         iv      = (ASN1OctetString)seq.getObjectAt(1);
     }
 }
Пример #30
0
        private X509Certificate readPKCS7Certificate()
        {
            ASN1InputStream dIn = new ASN1InputStream(inStr);
            ASN1Sequence    seq = (ASN1Sequence)dIn.readObject();

            if (seq.size() > 1 && seq.getObjectAt(0) is DERObjectIdentifier)
            {
                if (seq.getObjectAt(0).Equals(PKCSObjectIdentifiers.signedData))
                {
                    sData = new SignedData(ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(1), true));
                    return(new X509Certificate(ASN1Sequence.getInstance(sData.getCertificates().getObjectAt(sDataObjectCount++))));
                }
            }
            return(new X509Certificate(ASN1Sequence.getInstance(seq)));
        }