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 OCSPRequest 012 extends ASN1Object 013{ 014 TBSRequest tbsRequest; 015 Signature optionalSignature; 016 017 public OCSPRequest( 018 TBSRequest tbsRequest, 019 Signature optionalSignature) 020 { 021 this.tbsRequest = tbsRequest; 022 this.optionalSignature = optionalSignature; 023 } 024 025 private OCSPRequest( 026 ASN1Sequence seq) 027 { 028 tbsRequest = TBSRequest.getInstance(seq.getObjectAt(0)); 029 030 if (seq.size() == 2) 031 { 032 optionalSignature = Signature.getInstance( 033 (ASN1TaggedObject)seq.getObjectAt(1), true); 034 } 035 } 036 037 public static OCSPRequest getInstance( 038 ASN1TaggedObject obj, 039 boolean explicit) 040 { 041 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 042 } 043 044 public static OCSPRequest getInstance( 045 Object obj) 046 { 047 if (obj instanceof OCSPRequest) 048 { 049 return (OCSPRequest)obj; 050 } 051 else if (obj != null) 052 { 053 return new OCSPRequest(ASN1Sequence.getInstance(obj)); 054 } 055 056 return null; 057 } 058 059 public TBSRequest getTbsRequest() 060 { 061 return tbsRequest; 062 } 063 064 public Signature getOptionalSignature() 065 { 066 return optionalSignature; 067 } 068 069 /** 070 * Produce an object suitable for an ASN1OutputStream. 071 * <pre> 072 * OCSPRequest ::= SEQUENCE { 073 * tbsRequest TBSRequest, 074 * optionalSignature [0] EXPLICIT Signature OPTIONAL } 075 * </pre> 076 */ 077 public ASN1Primitive toASN1Primitive() 078 { 079 ASN1EncodableVector v = new ASN1EncodableVector(); 080 081 v.add(tbsRequest); 082 083 if (optionalSignature != null) 084 { 085 v.add(new DERTaggedObject(true, 0, optionalSignature)); 086 } 087 088 return new DERSequence(v); 089 } 090}