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