001package org.apache.commons.ssl.org.bouncycastle.asn1.ocsp; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 012 013public class ResponderID 014 extends ASN1Object 015 implements ASN1Choice 016{ 017 private ASN1Encodable value; 018 019 public ResponderID( 020 ASN1OctetString value) 021 { 022 this.value = value; 023 } 024 025 public ResponderID( 026 X500Name value) 027 { 028 this.value = value; 029 } 030 031 public static ResponderID getInstance( 032 Object obj) 033 { 034 if (obj instanceof ResponderID) 035 { 036 return (ResponderID)obj; 037 } 038 else if (obj instanceof DEROctetString) 039 { 040 return new ResponderID((DEROctetString)obj); 041 } 042 else if (obj instanceof ASN1TaggedObject) 043 { 044 ASN1TaggedObject o = (ASN1TaggedObject)obj; 045 046 if (o.getTagNo() == 1) 047 { 048 return new ResponderID(X500Name.getInstance(o, true)); 049 } 050 else 051 { 052 return new ResponderID(ASN1OctetString.getInstance(o, true)); 053 } 054 } 055 056 return new ResponderID(X500Name.getInstance(obj)); 057 } 058 059 public static ResponderID getInstance( 060 ASN1TaggedObject obj, 061 boolean explicit) 062 { 063 return getInstance(obj.getObject()); // must be explicitly tagged 064 } 065 066 public byte[] getKeyHash() 067 { 068 if (this.value instanceof ASN1OctetString) 069 { 070 ASN1OctetString octetString = (ASN1OctetString)this.value; 071 return octetString.getOctets(); 072 } 073 074 return null; 075 } 076 077 public X500Name getName() 078 { 079 if (this.value instanceof ASN1OctetString) 080 { 081 return null; 082 } 083 084 return X500Name.getInstance(value); 085 } 086 087 /** 088 * Produce an object suitable for an ASN1OutputStream. 089 * <pre> 090 * ResponderID ::= CHOICE { 091 * byName [1] Name, 092 * byKey [2] KeyHash } 093 * </pre> 094 */ 095 public ASN1Primitive toASN1Primitive() 096 { 097 if (value instanceof ASN1OctetString) 098 { 099 return new DERTaggedObject(true, 2, value); 100 } 101 102 return new DERTaggedObject(true, 1, value); 103 } 104}