String string;
/**
+ * return a Visible String from the passed in object.
+ *
+ * @exception IllegalArgumentException if the object cannot be converted.
+ */
+ public static DERVisibleString getInstance(
+ Object obj)
+ {
+ if (obj == null || obj instanceof DERVisibleString)
+ {
+ return (DERVisibleString)obj;
+ }
+
+ if (obj instanceof ASN1OctetString)
+ {
+ return new DERVisibleString(((ASN1OctetString)obj).getOctets());
+ }
+
+ if (obj instanceof ASN1TaggedObject)
+ {
+ return getInstance(((ASN1TaggedObject)obj).getObject());
+ }
+
+ throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
+ }
+
+ /**
+ * return a Visible String from a tagged object.
+ *
+ * @param obj the tagged object holding the object we want
+ * @param explicit true if the object is meant to be explicitly
+ * tagged false otherwise.
+ * @exception IllegalArgumentException if the tagged object cannot
+ * be converted.
+ */
+ public static DERVisibleString getInstance(
+ ASN1TaggedObject obj,
+ boolean explicit)
+ {
+ return getInstance(obj.getObject());
+ }
+
+ /**
* basic constructor - byte encoded string.
*/
public DERVisibleString(
byte[] string)
{
- try
- {
- this.string = new String(string, "US-ASCII");
- }
- catch(UnsupportedEncodingException e)
+ char[] cs = new char[string.length];
+
+ for (int i = 0; i != cs.length; i++)
{
- throw new RuntimeException("PANIC: " + e);
+ cs[i] = (char)(string[i] & 0xff);
}
+
+ this.string = new String(cs);
}
/**
public byte[] getOctets()
{
- try
- {
- return string.getBytes("US-ASCII");
- }
- catch(UnsupportedEncodingException e)
+ char[] cs = string.toCharArray();
+ byte[] bs = new byte[cs.length];
+
+ for (int i = 0; i != cs.length; i++)
{
- throw new RuntimeException("PANIC: " + e);
+ bs[i] = (byte)cs[i];
}
+
+ return bs;
}
void encode(
{
out.writeEncoded(VISIBLE_STRING, this.getOctets());
}
+
+ public boolean equals(
+ Object o)
+ {
+ if ((o == null) || !(o instanceof DERVisibleString))
+ {
+ return false;
+ }
+
+ return this.getString().equals(((DERVisibleString)o).getString());
+ }
}