/// <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); } }
/// <summary> /// Create using an public Asymmetric Key. /// </summary> /// <param name="key">A public Asymmetric key.</param> public RespID(AsymmetricKeyParameter key) { SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(key); byte[] b = info.getEncoded(); SHA1Digest sha1 = new SHA1Digest(); sha1.update(b, 0, b.Length); b = new byte[sha1.getDigestSize()]; sha1.doFinal(b, 0); ASN1OctetString keyHash = new DEROctetString(b); this.id = new ResponderID(keyHash); }