package org.bouncycastle.ocsp; import java.security.MessageDigest; import java.security.PublicKey; import javax.security.auth.x500.X500Principal; import org.bouncycastle.asn1.ASN1InputStream; import org.bouncycastle.asn1.ASN1OctetString; import org.bouncycastle.asn1.DEROctetString; import org.bouncycastle.asn1.ocsp.ResponderID; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; /** * Carrier for a ResponderID. */ public class RespID { ResponderID id; public RespID( ResponderID id) { this.id = id; } public RespID( X500Principal name) { this.id = new ResponderID(X500Name.getInstance(name.getEncoded())); } public RespID( PublicKey key) throws OCSPException { try { // TODO Allow specification of a particular provider MessageDigest digest = OCSPUtil.createDigestInstance("SHA1", null); ASN1InputStream aIn = new ASN1InputStream(key.getEncoded()); SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(aIn.readObject()); digest.update(info.getPublicKeyData().getBytes()); ASN1OctetString keyHash = new DEROctetString(digest.digest()); this.id = new ResponderID(keyHash); } catch (Exception e) { throw new OCSPException("problem creating ID: " + e, e); } } public ResponderID toASN1Object() { return id; } public boolean equals( Object o) { if (!(o instanceof RespID)) { return false; } RespID obj = (RespID)o; return id.equals(obj.id); } public int hashCode() { return id.hashCode(); } }