package org.bouncycastle.asn1.ocsp; import org.bouncycastle.asn1.ASN1Choice; import org.bouncycastle.asn1.ASN1OctetString; import org.bouncycastle.asn1.ASN1TaggedObject; import org.bouncycastle.asn1.ASN1Encodable; import org.bouncycastle.asn1.DEREncodable; import org.bouncycastle.asn1.DERObject; import org.bouncycastle.asn1.DEROctetString; import org.bouncycastle.asn1.DERTaggedObject; import org.bouncycastle.asn1.x509.X509Name; public class ResponderID extends ASN1Encodable implements ASN1Choice { private DEREncodable value; public ResponderID( ASN1OctetString value) { this.value = value; } public ResponderID( X509Name value) { this.value = value; } public static ResponderID getInstance( Object obj) { if (obj == null || obj instanceof ResponderID) { return (ResponderID)obj; } else if (obj instanceof DEROctetString) { return new ResponderID((DEROctetString)obj); } else if (obj instanceof ASN1TaggedObject) { ASN1TaggedObject o = (ASN1TaggedObject)obj; if (o.getTagNo() == 1) { return new ResponderID(X509Name.getInstance(o, true)); } else { return new ResponderID(ASN1OctetString.getInstance(o, true)); } } return new ResponderID(X509Name.getInstance(obj)); } public static ResponderID getInstance( ASN1TaggedObject obj, boolean explicit) { return getInstance(obj.getObject()); // must be explicitly tagged } /** * Produce an object suitable for an ASN1OutputStream. * <pre> * ResponderID ::= CHOICE { * byName [1] Name, * byKey [2] KeyHash } * </pre> */ public DERObject toASN1Object() { if (value instanceof ASN1OctetString) { return new DERTaggedObject(true, 2, value); } return new DERTaggedObject(true, 1, value); } }