package org.bouncycastle.asn1.dvcs;
import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.cmp.PKIStatusInfo;
import org.bouncycastle.asn1.cms.ContentInfo;
import org.bouncycastle.asn1.ess.ESSCertID;
import org.bouncycastle.asn1.ocsp.CertID;
import org.bouncycastle.asn1.ocsp.CertStatus;
import org.bouncycastle.asn1.ocsp.OCSPResponse;
import org.bouncycastle.asn1.smime.SMIMECapabilities;
import org.bouncycastle.asn1.x509.Certificate;
import org.bouncycastle.asn1.x509.CertificateList;
import org.bouncycastle.asn1.x509.Extension;
/**
* <pre>
* CertEtcToken ::= CHOICE {
* certificate [0] IMPLICIT Certificate ,
* esscertid [1] ESSCertId ,
* pkistatus [2] IMPLICIT PKIStatusInfo ,
* assertion [3] ContentInfo ,
* crl [4] IMPLICIT CertificateList,
* ocspcertstatus [5] CertStatus,
* oscpcertid [6] IMPLICIT CertId ,
* oscpresponse [7] IMPLICIT OCSPResponse,
* capabilities [8] SMIMECapabilities,
* extension Extension
* }
* </pre>
*/
public class CertEtcToken
extends ASN1Object
implements ASN1Choice
{
public static final int TAG_CERTIFICATE = 0;
public static final int TAG_ESSCERTID = 1;
public static final int TAG_PKISTATUS = 2;
public static final int TAG_ASSERTION = 3;
public static final int TAG_CRL = 4;
public static final int TAG_OCSPCERTSTATUS = 5;
public static final int TAG_OCSPCERTID = 6;
public static final int TAG_OCSPRESPONSE = 7;
public static final int TAG_CAPABILITIES = 8;
private static final boolean[] explicit = new boolean[]
{
false, true, false, true, false, true, false, false, true
};
private int tagNo;
private ASN1Encodable value;
private Extension extension;
public CertEtcToken(int tagNo, ASN1Encodable value)
{
this.tagNo = tagNo;
this.value = value;
}
public CertEtcToken(Extension extension)
{
this.tagNo = -1;
this.extension = extension;
}
private CertEtcToken(ASN1TaggedObject choice)
{
this.tagNo = choice.getTagNo();
switch (tagNo)
{
case TAG_CERTIFICATE:
value = Certificate.getInstance(choice, false);
break;
case TAG_ESSCERTID:
value = ESSCertID.getInstance(choice.getObject());
break;
case TAG_PKISTATUS:
value = PKIStatusInfo.getInstance(choice, false);
break;
case TAG_ASSERTION:
value = ContentInfo.getInstance(choice.getObject());
break;
case TAG_CRL:
value = CertificateList.getInstance(choice, false);
break;
case TAG_OCSPCERTSTATUS:
value = CertStatus.getInstance(choice.getObject());
break;
case TAG_OCSPCERTID:
value = CertID.getInstance(choice, false);
break;
case TAG_OCSPRESPONSE:
value = OCSPResponse.getInstance(choice, false);
break;
case TAG_CAPABILITIES:
value = SMIMECapabilities.getInstance(choice.getObject());
break;
default:
throw new IllegalArgumentException("Unknown tag: " + tagNo);
}
}
public static CertEtcToken getInstance(Object obj)
{
if (obj instanceof CertEtcToken)
{
return (CertEtcToken)obj;
}
else if (obj instanceof ASN1TaggedObject)
{
return new CertEtcToken((ASN1TaggedObject)obj);
}
else if (obj != null)
{
return new CertEtcToken(Extension.getInstance(obj));
}
return null;
}
public ASN1Primitive toASN1Primitive()
{
if (extension == null)
{
return new DERTaggedObject(explicit[tagNo], tagNo, value);
}
else
{
return extension.toASN1Primitive();
}
}
public int getTagNo()
{
return tagNo;
}
public ASN1Encodable getValue()
{
return value;
}
public Extension getExtension()
{
return extension;
}
public String toString()
{
return "CertEtcToken {\n" + value + "}\n";
}
public static CertEtcToken[] arrayFromSequence(ASN1Sequence seq)
{
CertEtcToken[] tmp = new CertEtcToken[seq.size()];
for (int i = 0; i != tmp.length; i++)
{
tmp[i] = CertEtcToken.getInstance(seq.getObjectAt(i));
}
return tmp;
}
}