String string;
/**
+ * return a printable string from the passed in object.
+ *
+ * @exception IllegalArgumentException if the object cannot be converted.
+ */
+ public static DERPrintableString getInstance(
+ Object obj)
+ {
+ if (obj == null || obj instanceof DERPrintableString)
+ {
+ return (DERPrintableString)obj;
+ }
+
+ if (obj instanceof ASN1OctetString)
+ {
+ return new DERPrintableString(((ASN1OctetString)obj).getOctets());
+ }
+
+ if (obj instanceof ASN1TaggedObject)
+ {
+ return getInstance(((ASN1TaggedObject)obj).getObject());
+ }
+
+ throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
+ }
+
+ /**
+ * return a Printable 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 DERPrintableString getInstance(
+ ASN1TaggedObject obj,
+ boolean explicit)
+ {
+ return getInstance(obj.getObject());
+ }
+
+ /**
* basic constructor - byte encoded string.
*/
public DERPrintableString(
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(PRINTABLE_STRING, this.getOctets());
}
+
+ public int hashCode()
+ {
+ return this.getString().hashCode();
+ }
+
+ public boolean equals(
+ Object o)
+ {
+ if (!(o instanceof DERPrintableString))
+ {
+ return false;
+ }
+
+ DERPrintableString s = (DERPrintableString)o;
+
+ return this.getString().equals(s.getString());
+ }
}