示例#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 CertificationRequest(
     ASN1Sequence seq)
 {
     reqInfo  = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
     sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     sigBits  = (DERBitString)seq.getObjectAt(2);
 }
示例#3
0
 public Signature(
     AlgorithmIdentifier signatureAlgorithm,
     DERBitString signature)
 {
     this.signatureAlgorithm = signatureAlgorithm;
     this.signature          = signature;
 }
示例#4
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;
                }
            }
        }
示例#5
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));
 }
示例#6
0
 public OriginatorPublicKey(
     AlgorithmIdentifier algorithm,
     byte[]              publicKey)
 {
     this.algorithm = algorithm;
     this.publicKey = new DERBitString(publicKey);
 }
示例#7
0
 public SubjectPublicKeyInfo(
     AlgorithmIdentifier algId,
     ASN1Encodable publicKey)
 {
     this.keyData = new DERBitString(publicKey);
     this.algId   = algId;
 }
示例#8
0
 public CertificateList(
     ASN1Sequence seq)
 {
     tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0));
     sigAlgId    = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
     sig         = (DERBitString)seq.getObjectAt(2);
 }
示例#9
0
 public SubjectPublicKeyInfo(
     AlgorithmIdentifier algId,
     byte[]              publicKey)
 {
     this.keyData = new DERBitString(publicKey);
     this.algId   = algId;
 }
示例#10
0
 public AttributeCertificate(
     AttributeCertificateInfo acinfo,
     AlgorithmIdentifier signatureAlgorithm,
     DERBitString signatureValue)
 {
     this.acinfo             = acinfo;
     this.signatureAlgorithm = signatureAlgorithm;
     this.signatureValue     = signatureValue;
 }
示例#11
0
 public CertificationRequest(
     CertificationRequestInfo requestInfo,
     AlgorithmIdentifier algorithm,
     DERBitString signature)
 {
     this.reqInfo  = requestInfo;
     this.sigAlgId = algorithm;
     this.sigBits  = signature;
 }
示例#12
0
 public Signature(
     AlgorithmIdentifier signatureAlgorithm,
     DERBitString signature,
     ASN1Sequence certs)
 {
     this.signatureAlgorithm = signatureAlgorithm;
     this.signature          = signature;
     this.certs = certs;
 }
示例#13
0
        public SubjectPublicKeyInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            this.algId = AlgorithmIdentifier.getInstance(e.Current);
            e.MoveNext();
            this.keyData = (DERBitString)e.Current;
        }
示例#14
0
        /// <summary>
        /// Instanciate a PKCS10CertificationRequest object with the necessary credentials.
        /// </summary>
        ///<param name="signatureAlgorithm">Name of Sig Alg.</param>
        /// <param name="subject">X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" </param>
        /// <param name="key">Public Key to be included in cert reqest.</param>
        /// <param name="attributes">ASN1Set of Attributes.</param>
        /// <param name="signingKey">Matching Private key for nominated (above) public key to be used to sign the request.</param>
        public PKCS10CertificationRequest(String signatureAlgorithm,
                                          X509Name subject,
                                          AsymmetricKeyParameter key,
                                          ASN1Set attributes,
                                          AsymmetricKeyParameter signingKey)

        {
            DERObjectIdentifier sigOID = SignerUtil.getObjectIdentifier(signatureAlgorithm.ToUpper());

            if (sigOID == null)
            {
                throw new ArgumentException("Unknown signature type requested");
            }

            if (subject == null)
            {
                throw new ArgumentException("subject must not be null");
            }

            if (key == null)
            {
                throw new ArgumentException("public key must not be null");
            }



            this.sigAlgId = new AlgorithmIdentifier(sigOID, null);

            SubjectPublicKeyInfo pubInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(key);


            this.reqInfo = new CertificationRequestInfo(subject, pubInfo, attributes);

            Signer sig = null;

            // Create appropriate Signature.
            sig = SignerUtil.getSigner(sigAlgId.getObjectId());

            sig.init(true, signingKey);

            // Encode.

            MemoryStream    mStr   = new MemoryStream();
            DEROutputStream derOut = new DEROutputStream(mStr);

            derOut.writeObject(reqInfo);

            // Sign
            byte[] b = mStr.ToArray();
            sig.update(b, 0, b.Length);

            // Generate Signature.
            sigBits = new DERBitString(sig.generateSignature());
        }
示例#15
0
 public BasicOCSPResponse(
     ResponseData tbsResponseData,
     AlgorithmIdentifier signatureAlgorithm,
     DERBitString signature,
     ASN1Sequence certs)
 {
     this.tbsResponseData    = tbsResponseData;
     this.signatureAlgorithm = signatureAlgorithm;
     this.signature          = signature;
     this.certs = certs;
 }
示例#16
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);
            }
        }
示例#17
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);
            }
        }
示例#18
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);
            }
        }
示例#19
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);
     }
 }
示例#20
0
        public ObjectDigestInfo(ASN1Sequence seq)
        {
            digestedObjectType = DEREnumerated.getInstance(seq.getObjectAt(0));

            int offset = 0;

            if (seq.size() == 4)
            {
                otherObjectTypeID = DERObjectIdentifier.getInstance(seq.getObjectAt(1));
                offset++;
            }

            digestAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1 + offset));

            objectDigest = new DERBitString(seq.getObjectAt(2 + offset));
        }
示例#21
0
        public X509CertificateStructure(
            ASN1Sequence seq)
        {
            this.seq = seq;

            //
            // correct x509 certficate
            //
            if (seq.size() == 3)
            {
                tbsCert  = TBSCertificateStructure.getInstance(seq.getObjectAt(0));
                sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));

                sig = (DERBitString)seq.getObjectAt(2);
            }
        }
示例#22
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);
        }
示例#23
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;
                }
            }
        }
示例#24
0
        public static AsymmetricKeyParameter CreateKey(SubjectPublicKeyInfo keyInfo)
        {
            AlgorithmIdentifier algId = keyInfo.getAlgorithmId();

            if (algId.getObjectId().Equals(PKCSObjectIdentifiers.rsaEncryption) ||
                algId.getObjectId().Equals(X509ObjectIdentifiers.id_ea_rsa))
            {
                RSAPublicKeyStructure pubKey = new RSAPublicKeyStructure((ASN1Sequence)keyInfo.getPublicKey());

                return(new RSAKeyParameters(false, pubKey.getModulus(), pubKey.getPublicExponent()));
            }
            else if (algId.getObjectId().Equals(PKCSObjectIdentifiers.dhKeyAgreement) ||
                     algId.getObjectId().Equals(X9ObjectIdentifiers.dhpublicnumber))
            {
                DHParameter para = new DHParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
                DERInteger  derY = (DERInteger)keyInfo.getPublicKey();

                return(new DHPublicKeyParameters(derY.getValue(), new DHParameters(para.getP(), para.getG())));
            }
            else if (algId.getObjectId().Equals(OIWObjectIdentifiers.elGamalAlgorithm))
            {
                ElGamalParameter para = new ElGamalParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
                DERInteger       derY = (DERInteger)keyInfo.getPublicKey();

                return(new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(para.getP(), para.getG())));
            }
            else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_dsa) ||
                     algId.getObjectId().Equals(OIWObjectIdentifiers.dsaWithSHA1))
            {
                DSAParameter para = new DSAParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
                DERInteger   derY = (DERInteger)keyInfo.getPublicKey();

                return(new DSAPublicKeyParameters(derY.getValue(), new DSAParameters(para.getP(), para.getQ(), para.getG())));
            }
            else if (algId.getObjectId().Equals(X9ObjectIdentifiers.id_ecPublicKey))
            {
                X962Parameters     para    = new X962Parameters((ASN1Object)keyInfo.getAlgorithmId().getParameters());
                ECDomainParameters dParams = null;

                if (para.isNamedCurve())
                {
                    DERObjectIdentifier oid = (DERObjectIdentifier)para.getParameters();
                    X9ECParameters      ecP = X962NamedCurves.getByOID(oid);

                    dParams = new ECDomainParameters(
                        ecP.getCurve(),
                        ecP.getG(),
                        ecP.getN(),
                        ecP.getH(),
                        ecP.getSeed());
                }
                else
                {
                    X9ECParameters ecP = new X9ECParameters((ASN1Sequence)para.getParameters().toASN1Object());


                    dParams = new ECDomainParameters(
                        ecP.getCurve(),
                        ecP.getG(),
                        ecP.getN(),
                        ecP.getH(),
                        ecP.getSeed());
                }

                DERBitString    bits = keyInfo.getPublicKeyData();
                byte[]          data = bits.getBytes();
                ASN1OctetString key  = new DEROctetString(data);

                X9ECPoint derQ = new X9ECPoint(dParams.getCurve(), key);

                return(new ECPublicKeyParameters(derQ.getPoint(), dParams));
            }
            else
            {
                throw new Exception("algorithm identifier in key not recognised");
            }
        }
示例#25
0
 public OriginatorPublicKey(
     ASN1Sequence seq)
 {
     algorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
     publicKey = (DERBitString)seq.getObjectAt(1);
 }
示例#26
0
 public KeyUsage(DERBitString usage) : base(usage.getBytes(), usage.getPadBits())
 {
 }
示例#27
0
 public ReasonFlags(
     DERBitString reasons)
     : base(reasons.getBytes(), reasons.getPadBits())
 {
 }
示例#28
0
/// <summary>
///
/// </summary>
/// <param name="signingAlgorithm">The OID of the signing algorithm.</param>
/// <param name="privkey">The signing private key.</param>
/// <param name="chain">An array containing X509Certificate objects, can be null.</param>
/// <param name="producedAt">The time this response is produced at.</param>
/// <param name="random">A SecureRandom instance.</param>
/// <returns></returns>
        public BasicOCSPResp generateResponse(
            DERObjectIdentifier signingAlgorithm,
            AsymmetricKeyParameter privkey,
            X509Certificate[]   chain,
            DateTime producedAt,
            SecureRandom random)
        {
            IEnumerator         it        = list.GetEnumerator();
            ASN1EncodableVector responses = new ASN1EncodableVector();

            while (it.MoveNext())
            {
                try
                {
                    responses.add(((ResponseObject)it.Current).toResponse());
                }
                catch (Exception e)
                {
                    throw new OCSPException("exception creating Request", e);
                }
            }

            ResponseData tbsResp = new ResponseData(new DERInteger(0), responderID.toASN1Object(), new DERGeneralizedTime(producedAt), new DERSequence(responses), responseExtensions);

            Signer sig = null;

            try
            {
                sig = SignerUtil.getSigner(signingAlgorithm);
                if (random != null)
                {
                    sig.init(true, new ParametersWithRandom(privkey, random));
                }
                else
                {
                    sig.init(true, privkey);
                }
            }
            catch (Exception e)
            {
                throw new OCSPException("exception creating signature: " + e, e);
            }

            DERBitString bitSig = null;

            try
            {
                MemoryStream    bOut = new MemoryStream();
                DEROutputStream dOut = new DEROutputStream(bOut);

                dOut.writeObject(tbsResp);
                byte[] b = bOut.ToArray();

                sig.update(b, 0, b.Length);
                bitSig = new DERBitString(sig.generateSignature());
            }
            catch (Exception e)
            {
                throw new OCSPException("exception processing TBSRequest: " + e, e);
            }

            AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(signingAlgorithm, new DERNull());

            if (chain != null && chain.Length > 0)
            {
                ASN1EncodableVector v = new ASN1EncodableVector();
                try
                {
                    for (int i = 0; i != chain.Length; i++)
                    {
                        v.add(new X509CertificateStructure(
                                  (ASN1Sequence)makeObj(chain[i].getEncoded())));
                    }
                }
                catch (IOException e)
                {
                    throw new OCSPException("error processing certs", e);
                }


                return(new BasicOCSPResp(new BasicOCSPResponse(tbsResp, sigAlgId, bitSig, new DERSequence(v))));
            }
            else
            {
                return(new BasicOCSPResp(new BasicOCSPResponse(tbsResp, sigAlgId, bitSig, null)));
            }
        }
示例#29
0
 public void setIssuerUniqueID(
     DERBitString issuerUniqueID)
 {
     this.issuerUniqueID = issuerUniqueID;
 }
示例#30
0
        private OCSPReq generateRequest(DERObjectIdentifier signingAlgorithm,
                                        AsymmetricKeyParameter key,
                                        X509Certificate[]   chain,
                                        SecureRandom random)

        {
            IEnumerator         it        = list.GetEnumerator();
            ASN1EncodableVector requests  = new ASN1EncodableVector();
            Signature           signature = null;

            while (it.MoveNext())
            {
                requests.add(((RequestObject)it.Current).toRequest());
            }


            TBSRequest tbsReq = new TBSRequest(requestorName, new DERSequence(requests), requestExtensions);

            Signer sig = null;

            if (signingAlgorithm != null)
            {
                try {
                    sig = SignerUtil.getSigner(signingAlgorithm.getId());

                    if (random != null)
                    {
                        sig.init(true, new ParametersWithRandom(key, random));
                    }
                    else
                    {
                        sig.init(true, key);
                    }
                }
                catch (Exception e)
                {
                    throw new OCSPException("exception creating signature: " + e.Message, e);
                }

                DERBitString bitSig = null;

                try
                {
                    MemoryStream     bOut = new MemoryStream();
                    ASN1OutputStream aOut = new ASN1OutputStream(bOut);

                    aOut.writeObject(tbsReq);

                    byte[] b = bOut.ToArray();
                    sig.update(b, 0, b.Length);

                    bitSig = new DERBitString(sig.generateSignature());
                }
                catch (Exception e)
                {
                    throw new OCSPException("exception processing TBSRequest: " + e.Message, e);
                }

                AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(signingAlgorithm, new DERNull());

                if (chain != null && chain.Length > 0)
                {
                    ASN1EncodableVector v = new ASN1EncodableVector();
                    try
                    {
                        for (int i = 0; i != chain.Length; i++)
                        {
                            v.add(new X509CertificateStructure((ASN1Sequence)makeObj(chain[i].getEncoded())));
                        }
                    }
                    catch (Exception e)
                    {
                        throw new OCSPException("error processing certs", e);
                    }

                    signature = new Signature(sigAlgId, bitSig, new DERSequence(v));
                }
                else
                {
                    signature = new Signature(sigAlgId, bitSig);
                }
            }

            return(new OCSPReq(new OCSPRequest(tbsReq, signature)));
        }