| package org.bouncycastle.cert.ocsp; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| import org.bouncycastle.asn1.ASN1Exception; |
| import org.bouncycastle.asn1.ASN1InputStream; |
| import org.bouncycastle.asn1.ASN1Primitive; |
| import org.bouncycastle.asn1.ocsp.BasicOCSPResponse; |
| import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; |
| import org.bouncycastle.asn1.ocsp.OCSPResponse; |
| import org.bouncycastle.asn1.ocsp.ResponseBytes; |
| import org.bouncycastle.cert.CertIOException; |
| |
| public class OCSPResp |
| { |
| public static final int SUCCESSFUL = 0; // Response has valid confirmations |
| public static final int MALFORMED_REQUEST = 1; // Illegal confirmation request |
| public static final int INTERNAL_ERROR = 2; // Internal error in issuer |
| public static final int TRY_LATER = 3; // Try again later |
| // (4) is not used |
| public static final int SIG_REQUIRED = 5; // Must sign the request |
| public static final int UNAUTHORIZED = 6; // Request unauthorized |
| |
| private OCSPResponse resp; |
| |
| public OCSPResp( |
| OCSPResponse resp) |
| { |
| this.resp = resp; |
| } |
| |
| public OCSPResp( |
| byte[] resp) |
| throws IOException |
| { |
| this(new ByteArrayInputStream(resp)); |
| } |
| |
| public OCSPResp( |
| InputStream resp) |
| throws IOException |
| { |
| this(new ASN1InputStream(resp)); |
| } |
| |
| private OCSPResp( |
| ASN1InputStream aIn) |
| throws IOException |
| { |
| try |
| { |
| this.resp = OCSPResponse.getInstance(aIn.readObject()); |
| } |
| catch (IllegalArgumentException e) |
| { |
| throw new CertIOException("malformed response: " + e.getMessage(), e); |
| } |
| catch (ClassCastException e) |
| { |
| throw new CertIOException("malformed response: " + e.getMessage(), e); |
| } |
| catch (ASN1Exception e) |
| { |
| throw new CertIOException("malformed response: " + e.getMessage(), e); |
| } |
| |
| if (resp == null) |
| { |
| throw new CertIOException("malformed response: no response data found"); |
| } |
| } |
| |
| public int getStatus() |
| { |
| return this.resp.getResponseStatus().getValue().intValue(); |
| } |
| |
| public Object getResponseObject() |
| throws OCSPException |
| { |
| ResponseBytes rb = this.resp.getResponseBytes(); |
| |
| if (rb == null) |
| { |
| return null; |
| } |
| |
| if (rb.getResponseType().equals(OCSPObjectIdentifiers.id_pkix_ocsp_basic)) |
| { |
| try |
| { |
| ASN1Primitive obj = ASN1Primitive.fromByteArray(rb.getResponse().getOctets()); |
| return new BasicOCSPResp(BasicOCSPResponse.getInstance(obj)); |
| } |
| catch (Exception e) |
| { |
| throw new OCSPException("problem decoding object: " + e, e); |
| } |
| } |
| |
| return rb.getResponse(); |
| } |
| |
| /** |
| * return the ASN.1 encoded representation of this object. |
| */ |
| public byte[] getEncoded() |
| throws IOException |
| { |
| return resp.getEncoded(); |
| } |
| |
| public boolean equals(Object o) |
| { |
| if (o == this) |
| { |
| return true; |
| } |
| |
| if (!(o instanceof OCSPResp)) |
| { |
| return false; |
| } |
| |
| OCSPResp r = (OCSPResp)o; |
| |
| return resp.equals(r.resp); |
| } |
| |
| public int hashCode() |
| { |
| return resp.hashCode(); |
| } |
| |
| public OCSPResponse toASN1Structure() |
| { |
| return resp; |
| } |
| } |