blob: 4762a42798e23070ae209f3521f95a8c6bc14306 [file] [log] [blame]
package org.bouncycastle.asn1.cmc;
import java.io.IOException;
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.crmf.CertReqMsg;
/**
* <pre>
* TaggedRequest ::= CHOICE {
* tcr [0] TaggedCertificationRequest,
* crm [1] CertReqMsg,
* orm [2] SEQUENCE {
* bodyPartID BodyPartID,
* requestMessageType OBJECT IDENTIFIER,
* requestMessageValue ANY DEFINED BY requestMessageType
* }
* }
* </pre>
*/
public class TaggedRequest
extends ASN1Object
implements ASN1Choice
{
public static final int TCR = 0;
public static final int CRM = 1;
public static final int ORM = 2;
private final int tagNo;
private final ASN1Encodable value;
public TaggedRequest(TaggedCertificationRequest tcr)
{
this.tagNo = TCR;
this.value = tcr;
}
public TaggedRequest(CertReqMsg crm)
{
this.tagNo = CRM;
this.value = crm;
}
private TaggedRequest(ASN1Sequence orm)
{
this.tagNo = ORM;
this.value = orm;
}
public static TaggedRequest getInstance(Object obj)
{
if (obj instanceof TaggedRequest)
{
return (TaggedRequest)obj;
}
if (obj != null)
{
if (obj instanceof ASN1Encodable)
{
ASN1TaggedObject asn1Prim = ASN1TaggedObject.getInstance(((ASN1Encodable)obj).toASN1Primitive());
switch (asn1Prim.getTagNo())
{
case 0:
return new TaggedRequest(TaggedCertificationRequest.getInstance(asn1Prim, false));
case 1:
return new TaggedRequest(CertReqMsg.getInstance(asn1Prim, false));
case 2:
return new TaggedRequest(ASN1Sequence.getInstance(asn1Prim, false));
default:
throw new IllegalArgumentException("unknown tag in getInstance(): " + asn1Prim.getTagNo());
}
}
if (obj instanceof byte[])
{
try
{
return getInstance(ASN1Primitive.fromByteArray((byte[])obj));
}
catch (IOException e)
{
throw new IllegalArgumentException("unknown encoding in getInstance()");
}
}
throw new IllegalArgumentException("unknown object in getInstance(): " + obj.getClass().getName());
}
return null;
}
public int getTagNo()
{
return tagNo;
}
public ASN1Encodable getValue()
{
return value;
}
public ASN1Primitive toASN1Primitive()
{
return new DERTaggedObject(false, tagNo, value);
}
}