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();
}
}