1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1EncodableVector; 4import org.bouncycastle.asn1.ASN1Object; 5import org.bouncycastle.asn1.ASN1Primitive; 6import org.bouncycastle.asn1.ASN1Sequence; 7import org.bouncycastle.asn1.ASN1TaggedObject; 8import org.bouncycastle.asn1.DERSequence; 9import org.bouncycastle.asn1.DERTaggedObject; 10 11public class OCSPResponse 12 extends ASN1Object 13{ 14 OCSPResponseStatus responseStatus; 15 ResponseBytes responseBytes; 16 17 public OCSPResponse( 18 OCSPResponseStatus responseStatus, 19 ResponseBytes responseBytes) 20 { 21 this.responseStatus = responseStatus; 22 this.responseBytes = responseBytes; 23 } 24 25 private OCSPResponse( 26 ASN1Sequence seq) 27 { 28 responseStatus = OCSPResponseStatus.getInstance(seq.getObjectAt(0)); 29 30 if (seq.size() == 2) 31 { 32 responseBytes = ResponseBytes.getInstance( 33 (ASN1TaggedObject)seq.getObjectAt(1), true); 34 } 35 } 36 37 public static OCSPResponse getInstance( 38 ASN1TaggedObject obj, 39 boolean explicit) 40 { 41 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 42 } 43 44 public static OCSPResponse getInstance( 45 Object obj) 46 { 47 if (obj instanceof OCSPResponse) 48 { 49 return (OCSPResponse)obj; 50 } 51 else if (obj != null) 52 { 53 return new OCSPResponse(ASN1Sequence.getInstance(obj)); 54 } 55 56 return null; 57 } 58 59 public OCSPResponseStatus getResponseStatus() 60 { 61 return responseStatus; 62 } 63 64 public ResponseBytes getResponseBytes() 65 { 66 return responseBytes; 67 } 68 69 /** 70 * Produce an object suitable for an ASN1OutputStream. 71 * <pre> 72 * OCSPResponse ::= SEQUENCE { 73 * responseStatus OCSPResponseStatus, 74 * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } 75 * </pre> 76 */ 77 public ASN1Primitive toASN1Primitive() 78 { 79 ASN1EncodableVector v = new ASN1EncodableVector(); 80 81 v.add(responseStatus); 82 83 if (responseBytes != null) 84 { 85 v.add(new DERTaggedObject(true, 0, responseBytes)); 86 } 87 88 return new DERSequence(v); 89 } 90} 91