1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1Choice; 4import org.bouncycastle.asn1.ASN1OctetString; 5import org.bouncycastle.asn1.ASN1TaggedObject; 6import org.bouncycastle.asn1.ASN1Encodable; 7import org.bouncycastle.asn1.DEREncodable; 8import org.bouncycastle.asn1.DERObject; 9import org.bouncycastle.asn1.DEROctetString; 10import org.bouncycastle.asn1.DERTaggedObject; 11import org.bouncycastle.asn1.x509.X509Name; 12 13public class ResponderID 14 extends ASN1Encodable 15 implements ASN1Choice 16{ 17 private DEREncodable value; 18 19 public ResponderID( 20 ASN1OctetString value) 21 { 22 this.value = value; 23 } 24 25 public ResponderID( 26 X509Name value) 27 { 28 this.value = value; 29 } 30 31 public static ResponderID getInstance( 32 Object obj) 33 { 34 if (obj == null || obj instanceof ResponderID) 35 { 36 return (ResponderID)obj; 37 } 38 else if (obj instanceof DEROctetString) 39 { 40 return new ResponderID((DEROctetString)obj); 41 } 42 else if (obj instanceof ASN1TaggedObject) 43 { 44 ASN1TaggedObject o = (ASN1TaggedObject)obj; 45 46 if (o.getTagNo() == 1) 47 { 48 return new ResponderID(X509Name.getInstance(o, true)); 49 } 50 else 51 { 52 return new ResponderID(ASN1OctetString.getInstance(o, true)); 53 } 54 } 55 56 return new ResponderID(X509Name.getInstance(obj)); 57 } 58 59 public static ResponderID getInstance( 60 ASN1TaggedObject obj, 61 boolean explicit) 62 { 63 return getInstance(obj.getObject()); // must be explicitly tagged 64 } 65 66 /** 67 * Produce an object suitable for an ASN1OutputStream. 68 * <pre> 69 * ResponderID ::= CHOICE { 70 * byName [1] Name, 71 * byKey [2] KeyHash } 72 * </pre> 73 */ 74 public DERObject toASN1Object() 75 { 76 if (value instanceof ASN1OctetString) 77 { 78 return new DERTaggedObject(true, 2, value); 79 } 80 81 return new DERTaggedObject(true, 1, value); 82 } 83} 84