resolve darcs stupidity
[org.ibex.core.git] / src / org / bouncycastle / asn1 / DERVisibleString.java
index f2071d3..f603b93 100644 (file)
@@ -12,19 +12,61 @@ public class DERVisibleString
     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);
     }
 
     /**
@@ -43,14 +85,15 @@ public class DERVisibleString
 
     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(
@@ -59,4 +102,15 @@ public class DERVisibleString
     {
         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());
+    }
 }