1 package org.bouncycastle.asn1;
6 * DER UTF8String object.
8 public class DERUTF8String
15 * return an UTF8 string from the passed in object.
17 * @exception IllegalArgumentException if the object cannot be converted.
19 public static DERUTF8String getInstance(
22 if (obj == null || obj instanceof DERUTF8String)
24 return (DERUTF8String)obj;
27 if (obj instanceof ASN1OctetString)
29 return new DERUTF8String(((ASN1OctetString)obj).getOctets());
32 if (obj instanceof ASN1TaggedObject)
34 return getInstance(((ASN1TaggedObject)obj).getObject());
37 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
41 * return an UTF8 String from a tagged object.
43 * @param obj the tagged object holding the object we want
44 * @param explicit true if the object is meant to be explicitly
45 * tagged false otherwise.
46 * @exception IllegalArgumentException if the tagged object cannot
49 public static DERUTF8String getInstance(
53 return getInstance(obj.getObject());
57 * basic constructor - byte encoded string.
65 while (i < string.length)
68 if ((string[i] & 0xe0) == 0xe0)
72 else if ((string[i] & 0xc0) == 0xc0)
82 char[] cs = new char[length];
87 while (i < string.length)
91 if ((string[i] & 0xe0) == 0xe0)
93 ch = (char)(((string[i] & 0x1f) << 12)
94 | ((string[i + 1] & 0x3f) << 6) | (string[i + 2] & 0x3f));
97 else if ((string[i] & 0xc0) == 0xc0)
99 ch = (char)(((string[i] & 0x3f) << 6) | (string[i + 1] & 0x3f));
104 ch = (char)(string[i] & 0xff);
111 this.string = new String(cs);
117 public DERUTF8String(
120 this.string = string;
123 public String getString()
128 public int hashCode()
130 return this.getString().hashCode();
133 public boolean equals(
136 if (!(o instanceof DERUTF8String))
141 DERUTF8String s = (DERUTF8String)o;
143 return this.getString().equals(s.getString());
150 char[] c = string.toCharArray();
151 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
153 for (int i = 0; i != c.length; i++)
161 else if (ch < 0x0800)
163 bOut.write(0xc0 | (ch >> 6));
164 bOut.write(0x80 | (ch & 0x3f));
168 bOut.write(0xe0 | (ch >> 12));
169 bOut.write(0x80 | ((ch >> 6) & 0x3F));
170 bOut.write(0x80 | (ch & 0x3F));
174 out.writeEncoded(UTF8_STRING, bOut.toByteArray());