1package org.bouncycastle.asn1.ocsp; 2 3import org.bouncycastle.asn1.ASN1Choice; 4import org.bouncycastle.asn1.ASN1Encodable; 5import org.bouncycastle.asn1.ASN1Object; 6import org.bouncycastle.asn1.ASN1OctetString; 7import org.bouncycastle.asn1.ASN1Primitive; 8import org.bouncycastle.asn1.ASN1TaggedObject; 9import org.bouncycastle.asn1.DEROctetString; 10import org.bouncycastle.asn1.DERTaggedObject; 11import org.bouncycastle.asn1.x500.X500Name; 12 13public class ResponderID 14 extends ASN1Object 15 implements ASN1Choice 16{ 17 private ASN1Encodable value; 18 19 public ResponderID( 20 ASN1OctetString value) 21 { 22 this.value = value; 23 } 24 25 public ResponderID( 26 X500Name value) 27 { 28 this.value = value; 29 } 30 31 public static ResponderID getInstance( 32 Object obj) 33 { 34 if (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(X500Name.getInstance(o, true)); 49 } 50 else 51 { 52 return new ResponderID(ASN1OctetString.getInstance(o, true)); 53 } 54 } 55 56 return new ResponderID(X500Name.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 public byte[] getKeyHash() 67 { 68 if (this.value instanceof ASN1OctetString) 69 { 70 ASN1OctetString octetString = (ASN1OctetString)this.value; 71 return octetString.getOctets(); 72 } 73 74 return null; 75 } 76 77 public X500Name getName() 78 { 79 if (this.value instanceof ASN1OctetString) 80 { 81 return null; 82 } 83 84 return X500Name.getInstance(value); 85 } 86 87 /** 88 * Produce an object suitable for an ASN1OutputStream. 89 * <pre> 90 * ResponderID ::= CHOICE { 91 * byName [1] Name, 92 * byKey [2] KeyHash } 93 * </pre> 94 */ 95 public ASN1Primitive toASN1Primitive() 96 { 97 if (value instanceof ASN1OctetString) 98 { 99 return new DERTaggedObject(true, 2, value); 100 } 101 102 return new DERTaggedObject(true, 1, value); 103 } 104} 105