001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 010 011public class OCSPResponse 012 extends ASN1Object 013{ 014 OCSPResponseStatus responseStatus; 015 ResponseBytes responseBytes; 016 017 public OCSPResponse( 018 OCSPResponseStatus responseStatus, 019 ResponseBytes responseBytes) 020 { 021 this.responseStatus = responseStatus; 022 this.responseBytes = responseBytes; 023 } 024 025 private OCSPResponse( 026 ASN1Sequence seq) 027 { 028 responseStatus = OCSPResponseStatus.getInstance(seq.getObjectAt(0)); 029 030 if (seq.size() == 2) 031 { 032 responseBytes = ResponseBytes.getInstance( 033 (ASN1TaggedObject)seq.getObjectAt(1), true); 034 } 035 } 036 037 public static OCSPResponse getInstance( 038 ASN1TaggedObject obj, 039 boolean explicit) 040 { 041 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 042 } 043 044 public static OCSPResponse getInstance( 045 Object obj) 046 { 047 if (obj instanceof OCSPResponse) 048 { 049 return (OCSPResponse)obj; 050 } 051 else if (obj != null) 052 { 053 return new OCSPResponse(ASN1Sequence.getInstance(obj)); 054 } 055 056 return null; 057 } 058 059 public OCSPResponseStatus getResponseStatus() 060 { 061 return responseStatus; 062 } 063 064 public ResponseBytes getResponseBytes() 065 { 066 return responseBytes; 067 } 068 069 /** 070 * Produce an object suitable for an ASN1OutputStream. 071 * <pre> 072 * OCSPResponse ::= SEQUENCE { 073 * responseStatus OCSPResponseStatus, 074 * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } 075 * </pre> 076 */ 077 public ASN1Primitive toASN1Primitive() 078 { 079 ASN1EncodableVector v = new ASN1EncodableVector(); 080 081 v.add(responseStatus); 082 083 if (responseBytes != null) 084 { 085 v.add(new DERTaggedObject(true, 0, responseBytes)); 086 } 087 088 return new DERSequence(v); 089 } 090}