1package org.bouncycastle.asn1; 2 3import java.io.IOException; 4 5import org.bouncycastle.util.Strings; 6 7/** 8 * DER UTF8String object. 9 */ 10public class DERUTF8String 11 extends DERObject 12 implements DERString 13{ 14 String string; 15 16 /** 17 * return an UTF8 string from the passed in object. 18 * 19 * @exception IllegalArgumentException 20 * if the object cannot be converted. 21 */ 22 public static DERUTF8String getInstance(Object obj) 23 { 24 if (obj == null || obj instanceof DERUTF8String) 25 { 26 return (DERUTF8String)obj; 27 } 28 29 if (obj instanceof ASN1OctetString) 30 { 31 return new DERUTF8String(((ASN1OctetString)obj).getOctets()); 32 } 33 34 if (obj instanceof ASN1TaggedObject) 35 { 36 return getInstance(((ASN1TaggedObject)obj).getObject()); 37 } 38 39 throw new IllegalArgumentException("illegal object in getInstance: " 40 + obj.getClass().getName()); 41 } 42 43 /** 44 * return an UTF8 String from a tagged object. 45 * 46 * @param obj 47 * the tagged object holding the object we want 48 * @param explicit 49 * true if the object is meant to be explicitly tagged false 50 * otherwise. 51 * @exception IllegalArgumentException 52 * if the tagged object cannot be converted. 53 */ 54 public static DERUTF8String getInstance( 55 ASN1TaggedObject obj, 56 boolean explicit) 57 { 58 return getInstance(obj.getObject()); 59 } 60 61 /** 62 * basic constructor - byte encoded string. 63 */ 64 DERUTF8String(byte[] string) 65 { 66 this.string = Strings.fromUTF8ByteArray(string); 67 } 68 69 /** 70 * basic constructor 71 */ 72 public DERUTF8String(String string) 73 { 74 this.string = string; 75 } 76 77 public String getString() 78 { 79 return string; 80 } 81 82 public int hashCode() 83 { 84 return this.getString().hashCode(); 85 } 86 87 public boolean equals(Object o) 88 { 89 if (!(o instanceof DERUTF8String)) 90 { 91 return false; 92 } 93 94 DERUTF8String s = (DERUTF8String)o; 95 96 return this.getString().equals(s.getString()); 97 } 98 99 void encode(DEROutputStream out) 100 throws IOException 101 { 102 out.writeEncoded(UTF8_STRING, Strings.toUTF8ByteArray(string)); 103 } 104} 105