Home | History | Annotate | Download | only in asn1
      1 package org.bouncycastle.asn1;
      2 
      3 import java.io.IOException;
      4 
      5 /**
      6  * DER T61String (also the teletex string)
      7  */
      8 public class DERT61String
      9     extends ASN1Object
     10     implements DERString
     11 {
     12     String  string;
     13 
     14     /**
     15      * return a T61 string from the passed in object.
     16      *
     17      * @exception IllegalArgumentException if the object cannot be converted.
     18      */
     19     public static DERT61String getInstance(
     20         Object  obj)
     21     {
     22         if (obj == null || obj instanceof DERT61String)
     23         {
     24             return (DERT61String)obj;
     25         }
     26 
     27         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
     28     }
     29 
     30     /**
     31      * return an T61 String from a tagged object.
     32      *
     33      * @param obj the tagged object holding the object we want
     34      * @param explicit true if the object is meant to be explicitly
     35      *              tagged false otherwise.
     36      * @exception IllegalArgumentException if the tagged object cannot
     37      *               be converted.
     38      */
     39     public static DERT61String getInstance(
     40         ASN1TaggedObject obj,
     41         boolean          explicit)
     42     {
     43         DERObject o = obj.getObject();
     44 
     45         if (explicit)
     46         {
     47             return getInstance(o);
     48         }
     49         else
     50         {
     51             return new DERT61String(ASN1OctetString.getInstance(o).getOctets());
     52         }
     53     }
     54 
     55     /**
     56      * basic constructor - with bytes.
     57      */
     58     public DERT61String(
     59         byte[]   string)
     60     {
     61         char[]  cs = new char[string.length];
     62 
     63         for (int i = 0; i != cs.length; i++)
     64         {
     65             cs[i] = (char)(string[i] & 0xff);
     66         }
     67 
     68         this.string = new String(cs);
     69     }
     70 
     71     /**
     72      * basic constructor - with string.
     73      */
     74     public DERT61String(
     75         String   string)
     76     {
     77         this.string = string;
     78     }
     79 
     80     public String getString()
     81     {
     82         return string;
     83     }
     84 
     85     public String toString()
     86     {
     87         return string;
     88     }
     89 
     90     void encode(
     91         DEROutputStream  out)
     92         throws IOException
     93     {
     94         out.writeEncoded(T61_STRING, this.getOctets());
     95     }
     96 
     97     public byte[] getOctets()
     98     {
     99         char[]  cs = string.toCharArray();
    100         byte[]  bs = new byte[cs.length];
    101 
    102         for (int i = 0; i != cs.length; i++)
    103         {
    104             bs[i] = (byte)cs[i];
    105         }
    106 
    107         return bs;
    108     }
    109 
    110     boolean asn1Equals(
    111         DERObject  o)
    112     {
    113         if (!(o instanceof DERT61String))
    114         {
    115             return false;
    116         }
    117 
    118         return this.getString().equals(((DERT61String)o).getString());
    119     }
    120 
    121     public int hashCode()
    122     {
    123         return this.getString().hashCode();
    124     }
    125 }
    126