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