001package org.apache.commons.ssl.org.bouncycastle.asn1.dvcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 013import org.apache.commons.ssl.org.bouncycastle.asn1.cmp.PKIStatusInfo; 014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.DigestInfo; 015import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions; 016import org.apache.commons.ssl.org.bouncycastle.asn1.x509.PolicyInformation; 017 018/** 019 * <pre> 020 * DVCSCertInfo::= SEQUENCE { 021 * version Integer DEFAULT 1 , 022 * dvReqInfo DVCSRequestInformation, 023 * messageImprint DigestInfo, 024 * serialNumber Integer, 025 * responseTime DVCSTime, 026 * dvStatus [0] PKIStatusInfo OPTIONAL, 027 * policy [1] PolicyInformation OPTIONAL, 028 * reqSignature [2] SignerInfos OPTIONAL, 029 * certs [3] SEQUENCE SIZE (1..MAX) OF 030 * TargetEtcChain OPTIONAL, 031 * extensions Extensions OPTIONAL 032 * } 033 * </pre> 034 */ 035 036public class DVCSCertInfo 037 extends ASN1Object 038{ 039 040 private int version = DEFAULT_VERSION; 041 private DVCSRequestInformation dvReqInfo; 042 private DigestInfo messageImprint; 043 private ASN1Integer serialNumber; 044 private DVCSTime responseTime; 045 private PKIStatusInfo dvStatus; 046 private PolicyInformation policy; 047 private ASN1Set reqSignature; 048 private ASN1Sequence certs; 049 private Extensions extensions; 050 051 private static final int DEFAULT_VERSION = 1; 052 private static final int TAG_DV_STATUS = 0; 053 private static final int TAG_POLICY = 1; 054 private static final int TAG_REQ_SIGNATURE = 2; 055 private static final int TAG_CERTS = 3; 056 057 public DVCSCertInfo( 058 DVCSRequestInformation dvReqInfo, 059 DigestInfo messageImprint, 060 ASN1Integer serialNumber, 061 DVCSTime responseTime) 062 { 063 this.dvReqInfo = dvReqInfo; 064 this.messageImprint = messageImprint; 065 this.serialNumber = serialNumber; 066 this.responseTime = responseTime; 067 } 068 069 private DVCSCertInfo(ASN1Sequence seq) 070 { 071 int i = 0; 072 ASN1Encodable x = seq.getObjectAt(i++); 073 try 074 { 075 ASN1Integer encVersion = ASN1Integer.getInstance(x); 076 this.version = encVersion.getValue().intValue(); 077 x = seq.getObjectAt(i++); 078 } 079 catch (IllegalArgumentException e) 080 { 081 } 082 083 this.dvReqInfo = DVCSRequestInformation.getInstance(x); 084 x = seq.getObjectAt(i++); 085 this.messageImprint = DigestInfo.getInstance(x); 086 x = seq.getObjectAt(i++); 087 this.serialNumber = ASN1Integer.getInstance(x); 088 x = seq.getObjectAt(i++); 089 this.responseTime = DVCSTime.getInstance(x); 090 091 while (i < seq.size()) 092 { 093 094 x = seq.getObjectAt(i++); 095 096 try 097 { 098 ASN1TaggedObject t = ASN1TaggedObject.getInstance(x); 099 int tagNo = t.getTagNo(); 100 101 switch (tagNo) 102 { 103 case TAG_DV_STATUS: 104 this.dvStatus = PKIStatusInfo.getInstance(t, false); 105 break; 106 case TAG_POLICY: 107 this.policy = PolicyInformation.getInstance(ASN1Sequence.getInstance(t, false)); 108 break; 109 case TAG_REQ_SIGNATURE: 110 this.reqSignature = ASN1Set.getInstance(t, false); 111 break; 112 case TAG_CERTS: 113 this.certs = ASN1Sequence.getInstance(t, false); 114 break; 115 } 116 117 continue; 118 119 } 120 catch (IllegalArgumentException e) 121 { 122 } 123 124 try 125 { 126 this.extensions = Extensions.getInstance(x); 127 } 128 catch (IllegalArgumentException e) 129 { 130 } 131 132 } 133 134 } 135 136 public static DVCSCertInfo getInstance(Object obj) 137 { 138 if (obj instanceof DVCSCertInfo) 139 { 140 return (DVCSCertInfo)obj; 141 } 142 else if (obj != null) 143 { 144 return new DVCSCertInfo(ASN1Sequence.getInstance(obj)); 145 } 146 147 return null; 148 } 149 150 public static DVCSCertInfo getInstance( 151 ASN1TaggedObject obj, 152 boolean explicit) 153 { 154 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 155 } 156 157 public ASN1Primitive toASN1Primitive() 158 { 159 160 ASN1EncodableVector v = new ASN1EncodableVector(); 161 162 if (version != DEFAULT_VERSION) 163 { 164 v.add(new ASN1Integer(version)); 165 } 166 v.add(dvReqInfo); 167 v.add(messageImprint); 168 v.add(serialNumber); 169 v.add(responseTime); 170 if (dvStatus != null) 171 { 172 v.add(new DERTaggedObject(false, TAG_DV_STATUS, dvStatus)); 173 } 174 if (policy != null) 175 { 176 v.add(new DERTaggedObject(false, TAG_POLICY, policy)); 177 } 178 if (reqSignature != null) 179 { 180 v.add(new DERTaggedObject(false, TAG_REQ_SIGNATURE, reqSignature)); 181 } 182 if (certs != null) 183 { 184 v.add(new DERTaggedObject(false, TAG_CERTS, certs)); 185 } 186 if (extensions != null) 187 { 188 v.add(extensions); 189 } 190 191 return new DERSequence(v); 192 } 193 194 public String toString() 195 { 196 StringBuffer s = new StringBuffer(); 197 198 s.append("DVCSCertInfo {\n"); 199 200 if (version != DEFAULT_VERSION) 201 { 202 s.append("version: " + version + "\n"); 203 } 204 s.append("dvReqInfo: " + dvReqInfo + "\n"); 205 s.append("messageImprint: " + messageImprint + "\n"); 206 s.append("serialNumber: " + serialNumber + "\n"); 207 s.append("responseTime: " + responseTime + "\n"); 208 if (dvStatus != null) 209 { 210 s.append("dvStatus: " + dvStatus + "\n"); 211 } 212 if (policy != null) 213 { 214 s.append("policy: " + policy + "\n"); 215 } 216 if (reqSignature != null) 217 { 218 s.append("reqSignature: " + reqSignature + "\n"); 219 } 220 if (certs != null) 221 { 222 s.append("certs: " + certs + "\n"); 223 } 224 if (extensions != null) 225 { 226 s.append("extensions: " + extensions + "\n"); 227 } 228 229 s.append("}\n"); 230 return s.toString(); 231 } 232 233 public int getVersion() 234 { 235 return version; 236 } 237 238 private void setVersion(int version) 239 { 240 this.version = version; 241 } 242 243 public DVCSRequestInformation getDvReqInfo() 244 { 245 return dvReqInfo; 246 } 247 248 private void setDvReqInfo(DVCSRequestInformation dvReqInfo) 249 { 250 this.dvReqInfo = dvReqInfo; 251 } 252 253 public DigestInfo getMessageImprint() 254 { 255 return messageImprint; 256 } 257 258 private void setMessageImprint(DigestInfo messageImprint) 259 { 260 this.messageImprint = messageImprint; 261 } 262 263 public ASN1Integer getSerialNumber() 264 { 265 return serialNumber; 266 } 267 268 public DVCSTime getResponseTime() 269 { 270 return responseTime; 271 } 272 273 public PKIStatusInfo getDvStatus() 274 { 275 return dvStatus; 276 } 277 278 public PolicyInformation getPolicy() 279 { 280 return policy; 281 } 282 283 public ASN1Set getReqSignature() 284 { 285 return reqSignature; 286 } 287 288 public TargetEtcChain[] getCerts() 289 { 290 if (certs != null) 291 { 292 return TargetEtcChain.arrayFromSequence(certs); 293 } 294 295 return null; 296 } 297 298 public Extensions getExtensions() 299 { 300 return extensions; 301 } 302}