1b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootpackage org.bouncycastle.cert.ocsp; 2b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 3b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport java.io.ByteArrayInputStream; 4b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport java.io.IOException; 5b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport java.io.InputStream; 6b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 7b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ASN1Exception; 8b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ASN1InputStream; 9b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ASN1Primitive; 10b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ocsp.BasicOCSPResponse; 11b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; 12b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ocsp.OCSPResponse; 13b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.asn1.ocsp.ResponseBytes; 14b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootimport org.bouncycastle.cert.CertIOException; 15b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 16b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Rootpublic class OCSPResp 17b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root{ 18b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int SUCCESSFUL = 0; // Response has valid confirmations 19b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int MALFORMED_REQUEST = 1; // Illegal confirmation request 20b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int INTERNAL_ERROR = 2; // Internal error in issuer 21b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int TRY_LATER = 3; // Try again later 22b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root // (4) is not used 23b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int SIG_REQUIRED = 5; // Must sign the request 24b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public static final int UNAUTHORIZED = 6; // Request unauthorized 25b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 26b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root private OCSPResponse resp; 27b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 28b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public OCSPResp( 29b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root OCSPResponse resp) 30b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 31b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root this.resp = resp; 32b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 33b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 34b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public OCSPResp( 35b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root byte[] resp) 36b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throws IOException 37b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 38b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root this(new ByteArrayInputStream(resp)); 39b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 40b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 41b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public OCSPResp( 42b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root InputStream resp) 43b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throws IOException 44b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 45b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root this(new ASN1InputStream(resp)); 46b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 47b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 48b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root private OCSPResp( 49b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root ASN1InputStream aIn) 50b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throws IOException 51b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 52b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root try 53b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 54b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root this.resp = OCSPResponse.getInstance(aIn.readObject()); 55b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 56b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root catch (IllegalArgumentException e) 57b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 58b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throw new CertIOException("malformed response: " + e.getMessage(), e); 59b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 60b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root catch (ClassCastException e) 61b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 62b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throw new CertIOException("malformed response: " + e.getMessage(), e); 63b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 64b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root catch (ASN1Exception e) 65b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 66b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throw new CertIOException("malformed response: " + e.getMessage(), e); 67b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 68b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 69b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root if (resp == null) 70b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 71b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throw new CertIOException("malformed response: no response data found"); 72b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 73b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 74b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 75b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public int getStatus() 76b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 77b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return this.resp.getResponseStatus().getValue().intValue(); 78b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 79b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 80b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public Object getResponseObject() 81b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throws OCSPException 82b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 83b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root ResponseBytes rb = this.resp.getResponseBytes(); 84b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 85b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root if (rb == null) 86b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 87b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return null; 88b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 89b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 90b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root if (rb.getResponseType().equals(OCSPObjectIdentifiers.id_pkix_ocsp_basic)) 91b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 92b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root try 93b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 94b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root ASN1Primitive obj = ASN1Primitive.fromByteArray(rb.getResponse().getOctets()); 95b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return new BasicOCSPResp(BasicOCSPResponse.getInstance(obj)); 96b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 97b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root catch (Exception e) 98b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 99b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throw new OCSPException("problem decoding object: " + e, e); 100b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 101b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 102b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 103b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return rb.getResponse(); 104b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 105b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 106b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root /** 107b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root * return the ASN.1 encoded representation of this object. 108b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root */ 109b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public byte[] getEncoded() 110b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root throws IOException 111b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 112b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return resp.getEncoded(); 113b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 114b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 115b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public boolean equals(Object o) 116b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 117b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root if (o == this) 118b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 119b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return true; 120b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 121b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 122b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root if (!(o instanceof OCSPResp)) 123b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 124b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return false; 125b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 126b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 127b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root OCSPResp r = (OCSPResp)o; 128b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 129b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return resp.equals(r.resp); 130b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 131b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 132b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public int hashCode() 133b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 134b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return resp.hashCode(); 135b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 136b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root 137b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root public OCSPResponse toASN1Structure() 138b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root { 139b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root return resp; 140b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root } 141b50b4a37e3d49e05b024c189c026bef7ea290ca8Kenny Root} 142