001package org.apache.commons.ssl.org.bouncycastle.asn1.dvcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 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.DERTaggedObject; 010import org.apache.commons.ssl.org.bouncycastle.asn1.cmp.PKIStatusInfo; 011import org.apache.commons.ssl.org.bouncycastle.asn1.cms.ContentInfo; 012import org.apache.commons.ssl.org.bouncycastle.asn1.ess.ESSCertID; 013import org.apache.commons.ssl.org.bouncycastle.asn1.ocsp.CertID; 014import org.apache.commons.ssl.org.bouncycastle.asn1.ocsp.CertStatus; 015import org.apache.commons.ssl.org.bouncycastle.asn1.ocsp.OCSPResponse; 016import org.apache.commons.ssl.org.bouncycastle.asn1.smime.SMIMECapabilities; 017import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Certificate; 018import org.apache.commons.ssl.org.bouncycastle.asn1.x509.CertificateList; 019import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extension; 020 021/** 022 * <pre> 023 * CertEtcToken ::= CHOICE { 024 * certificate [0] IMPLICIT Certificate , 025 * esscertid [1] ESSCertId , 026 * pkistatus [2] IMPLICIT PKIStatusInfo , 027 * assertion [3] ContentInfo , 028 * crl [4] IMPLICIT CertificateList, 029 * ocspcertstatus [5] CertStatus, 030 * oscpcertid [6] IMPLICIT CertId , 031 * oscpresponse [7] IMPLICIT OCSPResponse, 032 * capabilities [8] SMIMECapabilities, 033 * extension Extension 034 * } 035 * </pre> 036 */ 037public class CertEtcToken 038 extends ASN1Object 039 implements ASN1Choice 040{ 041 public static final int TAG_CERTIFICATE = 0; 042 public static final int TAG_ESSCERTID = 1; 043 public static final int TAG_PKISTATUS = 2; 044 public static final int TAG_ASSERTION = 3; 045 public static final int TAG_CRL = 4; 046 public static final int TAG_OCSPCERTSTATUS = 5; 047 public static final int TAG_OCSPCERTID = 6; 048 public static final int TAG_OCSPRESPONSE = 7; 049 public static final int TAG_CAPABILITIES = 8; 050 051 private static final boolean[] explicit = new boolean[] 052 { 053 false, true, false, true, false, true, false, false, true 054 }; 055 056 private int tagNo; 057 private ASN1Encodable value; 058 private Extension extension; 059 060 public CertEtcToken(int tagNo, ASN1Encodable value) 061 { 062 this.tagNo = tagNo; 063 this.value = value; 064 } 065 066 public CertEtcToken(Extension extension) 067 { 068 this.tagNo = -1; 069 this.extension = extension; 070 } 071 072 private CertEtcToken(ASN1TaggedObject choice) 073 { 074 this.tagNo = choice.getTagNo(); 075 076 switch (tagNo) 077 { 078 case TAG_CERTIFICATE: 079 value = Certificate.getInstance(choice, false); 080 break; 081 case TAG_ESSCERTID: 082 value = ESSCertID.getInstance(choice.getObject()); 083 break; 084 case TAG_PKISTATUS: 085 value = PKIStatusInfo.getInstance(choice, false); 086 break; 087 case TAG_ASSERTION: 088 value = ContentInfo.getInstance(choice.getObject()); 089 break; 090 case TAG_CRL: 091 value = CertificateList.getInstance(choice, false); 092 break; 093 case TAG_OCSPCERTSTATUS: 094 value = CertStatus.getInstance(choice.getObject()); 095 break; 096 case TAG_OCSPCERTID: 097 value = CertID.getInstance(choice, false); 098 break; 099 case TAG_OCSPRESPONSE: 100 value = OCSPResponse.getInstance(choice, false); 101 break; 102 case TAG_CAPABILITIES: 103 value = SMIMECapabilities.getInstance(choice.getObject()); 104 break; 105 default: 106 throw new IllegalArgumentException("Unknown tag: " + tagNo); 107 } 108 } 109 110 public static CertEtcToken getInstance(Object obj) 111 { 112 if (obj instanceof CertEtcToken) 113 { 114 return (CertEtcToken)obj; 115 } 116 else if (obj instanceof ASN1TaggedObject) 117 { 118 return new CertEtcToken((ASN1TaggedObject)obj); 119 } 120 else if (obj != null) 121 { 122 return new CertEtcToken(Extension.getInstance(obj)); 123 } 124 125 return null; 126 } 127 128 public ASN1Primitive toASN1Primitive() 129 { 130 if (extension == null) 131 { 132 return new DERTaggedObject(explicit[tagNo], tagNo, value); 133 } 134 else 135 { 136 return extension.toASN1Primitive(); 137 } 138 } 139 140 public int getTagNo() 141 { 142 return tagNo; 143 } 144 145 public ASN1Encodable getValue() 146 { 147 return value; 148 } 149 150 public Extension getExtension() 151 { 152 return extension; 153 } 154 155 public String toString() 156 { 157 return "CertEtcToken {\n" + value + "}\n"; 158 } 159 160 public static CertEtcToken[] arrayFromSequence(ASN1Sequence seq) 161 { 162 CertEtcToken[] tmp = new CertEtcToken[seq.size()]; 163 164 for (int i = 0; i != tmp.length; i++) 165 { 166 tmp[i] = CertEtcToken.getInstance(seq.getObjectAt(i)); 167 } 168 169 return tmp; 170 } 171}