DERUTF8String.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:4k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. /**
  4.  * DER UTF8String object.
  5.  */
  6. public class DERUTF8String
  7.     extends DERObject
  8.     implements DERString
  9. {
  10.     String  string;
  11.     /**
  12.      * return an UTF8 string from the passed in object.
  13.      *
  14.      * @exception IllegalArgumentException if the object cannot be converted.
  15.      */
  16.     public static DERUTF8String getInstance(
  17.         Object  obj)
  18.     {
  19.         if (obj == null || obj instanceof DERUTF8String)
  20.         {
  21.             return (DERUTF8String)obj;
  22.         }
  23.         if (obj instanceof ASN1OctetString)
  24.         {
  25.             return new DERUTF8String(((ASN1OctetString)obj).getOctets());
  26.         }
  27.         if (obj instanceof ASN1TaggedObject)
  28.         {
  29.             return getInstance(((ASN1TaggedObject)obj).getObject());
  30.         }
  31.         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
  32.     }
  33.     /**
  34.      * return an UTF8 String from a tagged object.
  35.      *
  36.      * @param obj the tagged object holding the object we want
  37.      * @param explicit true if the object is meant to be explicitly
  38.      *              tagged false otherwise.
  39.      * @exception IllegalArgumentException if the tagged object cannot
  40.      *               be converted.
  41.      */
  42.     public static DERUTF8String getInstance(
  43.         ASN1TaggedObject obj,
  44.         boolean          explicit)
  45.     {
  46.         return getInstance(obj.getObject());
  47.     }
  48.     /**
  49.      * basic constructor - byte encoded string.
  50.      */
  51.     DERUTF8String(
  52.         byte[]   string)
  53.     {
  54.         int i = 0;
  55.         int length = 0;
  56.         while (i < string.length)
  57.         {
  58.             length++;
  59.             if ((string[i] & 0xe0) == 0xe0)
  60.             {
  61.                 i += 3;
  62.             }
  63.             else if ((string[i] & 0xc0) == 0xc0)
  64.             {
  65.                 i += 2;
  66.             }
  67.             else
  68.             {
  69.                 i += 1;
  70.             }
  71.         }
  72.         char[]  cs = new char[length];
  73.         i = 0;
  74.         length = 0;
  75.         while (i < string.length)
  76.         {
  77.             char    ch;
  78.             if ((string[i] & 0xe0) == 0xe0)
  79.             {
  80.                 ch = (char)(((string[i] & 0x1f) << 12)
  81.                       | ((string[i + 1] & 0x3f) << 6) | (string[i + 2] & 0x3f));
  82.                 i += 3;
  83.             }
  84.             else if ((string[i] & 0xc0) == 0xc0)
  85.             {
  86.                 ch = (char)(((string[i] & 0x3f) << 6) | (string[i + 1] & 0x3f));
  87.                 i += 2;
  88.             }
  89.             else
  90.             {
  91.                 ch = (char)(string[i] & 0xff);
  92.                 i += 1;
  93.             }
  94.             cs[length++] = ch;
  95.         }
  96.         this.string = new String(cs);
  97.     }
  98.     /**
  99.      * basic constructor
  100.      */
  101.     public DERUTF8String(
  102.         String   string)
  103.     {
  104.         this.string = string;
  105.     }
  106.     public String getString()
  107.     {
  108.         return string;
  109.     }
  110.     public int hashCode()
  111.     {
  112.         return this.getString().hashCode();
  113.     }
  114.     public boolean equals(
  115.         Object  o)
  116.     {
  117.         if (!(o instanceof DERUTF8String))
  118.         {
  119.             return false;
  120.         }
  121.         DERUTF8String  s = (DERUTF8String)o;
  122.         return this.getString().equals(s.getString());
  123.     }
  124.     void encode(
  125.         DEROutputStream  out)
  126.         throws IOException
  127.     {
  128.         char[]                  c = string.toCharArray();
  129.         ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
  130.         for (int i = 0; i != c.length; i++)
  131.         {
  132.             char    ch = c[i];
  133.             if (ch < 0x0080)
  134.             {
  135.                 bOut.write(ch);
  136.             }
  137.             else if (ch < 0x0800)
  138.             {
  139.                 bOut.write(0xc0 | (ch >> 6));
  140.                 bOut.write(0x80 | (ch & 0x3f));
  141.             }
  142.             else
  143.             {
  144.                 bOut.write(0xe0 | (ch >> 12));
  145.                 bOut.write(0x80 | ((ch >> 6) & 0x3F));
  146.                 bOut.write(0x80 | (ch & 0x3F));
  147.             }
  148.         }
  149.         out.writeEncoded(UTF8_STRING, bOut.toByteArray());
  150.     }
  151. }