Home | History | Annotate | Download | only in asn1
      1 package org.bouncycastle.asn1;
      2 
      3 import java.io.IOException;
      4 
      5 import org.bouncycastle.util.Arrays;
      6 import org.bouncycastle.util.Strings;
      7 
      8 /**
      9  * Carrier class for a DER encoding GeneralString
     10  */
     11 public class DERGeneralString
     12     extends ASN1Primitive
     13     implements ASN1String
     14 {
     15     private final byte[] string;
     16 
     17     /**
     18      * return a GeneralString from the given object.
     19      *
     20      * @param obj the object we want converted.
     21      * @exception IllegalArgumentException if the object cannot be converted.
     22      * @return a DERBMPString instance, or null.
     23      */
     24     public static DERGeneralString getInstance(
     25         Object obj)
     26     {
     27         if (obj == null || obj instanceof DERGeneralString)
     28         {
     29             return (DERGeneralString) obj;
     30         }
     31 
     32         if (obj instanceof byte[])
     33         {
     34             try
     35             {
     36                 return (DERGeneralString)fromByteArray((byte[])obj);
     37             }
     38             catch (Exception e)
     39             {
     40                 throw new IllegalArgumentException("encoding error in getInstance: " + e.toString());
     41             }
     42         }
     43 
     44         throw new IllegalArgumentException("illegal object in getInstance: "
     45                 + obj.getClass().getName());
     46     }
     47 
     48     /**
     49      * return a GeneralString from a tagged object.
     50      *
     51      * @param obj the tagged object holding the object we want
     52      * @param explicit true if the object is meant to be explicitly
     53      *              tagged false otherwise.
     54      * @exception IllegalArgumentException if the tagged object cannot
     55      *              be converted.
     56      * @return a DERGeneralString instance.
     57      */
     58     public static DERGeneralString getInstance(
     59         ASN1TaggedObject obj,
     60         boolean explicit)
     61     {
     62         ASN1Primitive o = obj.getObject();
     63 
     64         if (explicit || o instanceof DERGeneralString)
     65         {
     66             return getInstance(o);
     67         }
     68         else
     69         {
     70             return new DERGeneralString(((ASN1OctetString)o).getOctets());
     71         }
     72     }
     73 
     74     DERGeneralString(byte[] string)
     75     {
     76         this.string = string;
     77     }
     78 
     79     /**
     80      * Construct a GeneralString from the passed in String.
     81      *
     82      * @param string the string to be contained in this object.
     83      */
     84     public DERGeneralString(String string)
     85     {
     86         this.string = Strings.toByteArray(string);
     87     }
     88 
     89     /**
     90      * Return a Java String representation of our contained String.
     91      *
     92      * @return a Java String representing our contents.
     93      */
     94     public String getString()
     95     {
     96         return Strings.fromByteArray(string);
     97     }
     98 
     99     public String toString()
    100     {
    101         return getString();
    102     }
    103 
    104     /**
    105      * Return a byte array representation of our contained String.
    106      *
    107      * @return a byte array representing our contents.
    108      */
    109     public byte[] getOctets()
    110     {
    111         return Arrays.clone(string);
    112     }
    113 
    114     boolean isConstructed()
    115     {
    116         return false;
    117     }
    118 
    119     int encodedLength()
    120     {
    121         return 1 + StreamUtil.calculateBodyLength(string.length) + string.length;
    122     }
    123 
    124     void encode(ASN1OutputStream out)
    125         throws IOException
    126     {
    127         out.writeEncoded(BERTags.GENERAL_STRING, string);
    128     }
    129 
    130     public int hashCode()
    131     {
    132         return Arrays.hashCode(string);
    133     }
    134 
    135     boolean asn1Equals(ASN1Primitive o)
    136     {
    137         if (!(o instanceof DERGeneralString))
    138         {
    139             return false;
    140         }
    141         DERGeneralString s = (DERGeneralString)o;
    142 
    143         return Arrays.areEqual(string, s.string);
    144     }
    145 }
    146