コード例 #1
0
        /// <summary>
        /// Generate a CertificateID.
        /// </summary>
        /// <param name="hashAlgorithm"></param>
        /// <param name="issuerCert"></param>
        /// <param name="number"></param>
        /// <param name="provider"></param>
        public CertificateID(string hashAlgorithm, X509Certificate issuerCert, BigInteger number, string provider)
        {
            try
            {
                Digest digest = TransformationByName.DigestByName(hashAlgorithm);
                AlgorithmIdentifier hashAlg = new AlgorithmIdentifier(new DERObjectIdentifier(hashAlgorithm), new DERNull());

                X509Name issuerName = issuerCert.getSubjectDN();

                byte[] b = issuerName.getEncoded();
                digest.update(b, 0, b.Length);

                b = new byte[digest.getDigestSize()];
                digest.doFinal(b, 0);

                ASN1OctetString        issuerNameHash = new DEROctetString(b);
                AsymmetricKeyParameter issuerKey      = issuerCert.getPublicKey();

                SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(issuerKey);

                b = info.getEncoded();
                digest.update(b, 0, b.Length);

                b = new byte[digest.getDigestSize()];
                digest.doFinal(b, 0);

                ASN1OctetString issuerKeyHash = new DEROctetString(b);
                DERInteger      serialNumber  = new DERInteger(number);
                this.id = new CertID(hashAlg, issuerNameHash, issuerKeyHash, serialNumber);
            }
            catch (Exception e)
            {
                throw new OCSPException("problem creating ID: " + e, e);
            }
        }