/*
* Copyright (c) 2012 ICM Uniwersytet Warszawski All rights reserved.
* See LICENCE.txt file for licensing information.
*/
package eu.emi.security.authn.x509.helpers.ocsp;
import java.util.Date;
import org.bouncycastle.cert.ocsp.RevokedStatus;
import org.bouncycastle.cert.ocsp.SingleResp;
import org.bouncycastle.cert.ocsp.UnknownStatus;
public class OCSPResult {
public static enum Status {good, revoked, unknown};
public static final String REASONS[] = {
"unspecified",
"keyCompromise",
"cACompromise",
"affiliationChanged",
"superseded",
"cessationOfOperation",
"certificateHold",
"unknown",
"removeFromCRL",
"privilegeWithdrawn",
"aACompromise"
};
private Status status;
private Date revocationTime;
private String revocationReason;
public OCSPResult(Status status)
{
this.status = status;
if (status == Status.revoked)
throw new IllegalArgumentException("Can not create OCSPStatus object with " +
"revoked status without an OCSP reply");
}
public OCSPResult(SingleResp resp)
{
Object rStatus = resp.getCertStatus();
if (rStatus == null)
status = Status.good;
else if (rStatus instanceof UnknownStatus)
status = Status.unknown;
else
{
status = Status.revoked;
RevokedStatus revStatus = (RevokedStatus)rStatus;
revocationTime = revStatus.getRevocationTime();
if (revStatus.hasRevocationReason())
revocationReason = REASONS[revStatus.getRevocationReason()];
else
revocationReason = REASONS[0];
}
}
/**
* @return the status
*/
public Status getStatus()
{
return status;
}
/**
* @return the revocationTime
*/
public Date getRevocationTime()
{
return revocationTime;
}
/**
* @return the revocationReason
*/
public String getRevocationReason()
{
return revocationReason;
}
@Override
public String toString()
{
if (status != Status.revoked)
return status.toString();
return "revoked at " + revocationTime + ((revocationReason != null) ? (" (" + revocationReason +")")
: "");
}
}