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.ASN1Integer; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.GeneralName; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509Extensions; 014 015public class TBSRequest 016 extends ASN1Object 017{ 018 private static final ASN1Integer V1 = new ASN1Integer(0); 019 020 ASN1Integer version; 021 GeneralName requestorName; 022 ASN1Sequence requestList; 023 Extensions requestExtensions; 024 025 boolean versionSet; 026 027 /** 028 * @deprecated use method taking Extensions 029 * @param requestorName 030 * @param requestList 031 * @param requestExtensions 032 */ 033 public TBSRequest( 034 GeneralName requestorName, 035 ASN1Sequence requestList, 036 X509Extensions requestExtensions) 037 { 038 this.version = V1; 039 this.requestorName = requestorName; 040 this.requestList = requestList; 041 this.requestExtensions = Extensions.getInstance(requestExtensions); 042 } 043 044 public TBSRequest( 045 GeneralName requestorName, 046 ASN1Sequence requestList, 047 Extensions requestExtensions) 048 { 049 this.version = V1; 050 this.requestorName = requestorName; 051 this.requestList = requestList; 052 this.requestExtensions = requestExtensions; 053 } 054 055 private TBSRequest( 056 ASN1Sequence seq) 057 { 058 int index = 0; 059 060 if (seq.getObjectAt(0) instanceof ASN1TaggedObject) 061 { 062 ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(0); 063 064 if (o.getTagNo() == 0) 065 { 066 versionSet = true; 067 version = ASN1Integer.getInstance((ASN1TaggedObject)seq.getObjectAt(0), true); 068 index++; 069 } 070 else 071 { 072 version = V1; 073 } 074 } 075 else 076 { 077 version = V1; 078 } 079 080 if (seq.getObjectAt(index) instanceof ASN1TaggedObject) 081 { 082 requestorName = GeneralName.getInstance((ASN1TaggedObject)seq.getObjectAt(index++), true); 083 } 084 085 requestList = (ASN1Sequence)seq.getObjectAt(index++); 086 087 if (seq.size() == (index + 1)) 088 { 089 requestExtensions = Extensions.getInstance((ASN1TaggedObject)seq.getObjectAt(index), true); 090 } 091 } 092 093 public static TBSRequest getInstance( 094 ASN1TaggedObject obj, 095 boolean explicit) 096 { 097 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 098 } 099 100 public static TBSRequest getInstance( 101 Object obj) 102 { 103 if (obj instanceof TBSRequest) 104 { 105 return (TBSRequest)obj; 106 } 107 else if (obj != null) 108 { 109 return new TBSRequest(ASN1Sequence.getInstance(obj)); 110 } 111 112 return null; 113 } 114 115 public ASN1Integer getVersion() 116 { 117 return version; 118 } 119 120 public GeneralName getRequestorName() 121 { 122 return requestorName; 123 } 124 125 public ASN1Sequence getRequestList() 126 { 127 return requestList; 128 } 129 130 public Extensions getRequestExtensions() 131 { 132 return requestExtensions; 133 } 134 135 /** 136 * Produce an object suitable for an ASN1OutputStream. 137 * <pre> 138 * TBSRequest ::= SEQUENCE { 139 * version [0] EXPLICIT Version DEFAULT v1, 140 * requestorName [1] EXPLICIT GeneralName OPTIONAL, 141 * requestList SEQUENCE OF Request, 142 * requestExtensions [2] EXPLICIT Extensions OPTIONAL } 143 * </pre> 144 */ 145 public ASN1Primitive toASN1Primitive() 146 { 147 ASN1EncodableVector v = new ASN1EncodableVector(); 148 149 // 150 // if default don't include - unless explicitly provided. Not strictly correct 151 // but required for some requests 152 // 153 if (!version.equals(V1) || versionSet) 154 { 155 v.add(new DERTaggedObject(true, 0, version)); 156 } 157 158 if (requestorName != null) 159 { 160 v.add(new DERTaggedObject(true, 1, requestorName)); 161 } 162 163 v.add(requestList); 164 165 if (requestExtensions != null) 166 { 167 v.add(new DERTaggedObject(true, 2, requestExtensions)); 168 } 169 170 return new DERSequence(v); 171 } 172}