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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. /**
  4.  * DER BMPString object.
  5.  */
  6. public class DERBMPString
  7.     extends DERObject
  8.     implements DERString
  9. {
  10.     String  string;
  11.     /**
  12.      * return a BMP String from the given object.
  13.      *
  14.      * @param obj the object we want converted.
  15.      * @exception IllegalArgumentException if the object cannot be converted.
  16.      */
  17.     public static DERBMPString getInstance(
  18.         Object  obj)
  19.     {
  20.         if (obj == null || obj instanceof DERBMPString)
  21.         {
  22.             return (DERBMPString)obj;
  23.         }
  24.         if (obj instanceof ASN1OctetString)
  25.         {
  26.             return new DERBMPString(((ASN1OctetString)obj).getOctets());
  27.         }
  28.         if (obj instanceof ASN1TaggedObject)
  29.         {
  30.             return getInstance(((ASN1TaggedObject)obj).getObject());
  31.         }
  32.         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
  33.     }
  34.     /**
  35.      * return a BMP String from a tagged object.
  36.      *
  37.      * @param obj the tagged object holding the object we want
  38.      * @param explicit true if the object is meant to be explicitly
  39.      *              tagged false otherwise.
  40.      * @exception IllegalArgumentException if the tagged object cannot
  41.      *              be converted.
  42.      */
  43.     public static DERBMPString getInstance(
  44.         ASN1TaggedObject obj,
  45.         boolean          explicit)
  46.     {
  47.         return getInstance(obj.getObject());
  48.     }
  49.     
  50.     /**
  51.      * basic constructor - byte encoded string.
  52.      */
  53.     public DERBMPString(
  54.         byte[]   string)
  55.     {
  56.         char[]  cs = new char[string.length / 2];
  57.         for (int i = 0; i != cs.length; i++)
  58.         {
  59.             cs[i] = (char)((string[2 * i] << 8) | (string[2 * i + 1] & 0xff));
  60.         }
  61.         this.string = new String(cs);
  62.     }
  63.     /**
  64.      * basic constructor
  65.      */
  66.     public DERBMPString(
  67.         String   string)
  68.     {
  69.         this.string = string;
  70.     }
  71.     public String getString()
  72.     {
  73.         return string;
  74.     }
  75.     public int hashCode()
  76.     {
  77.         return this.getString().hashCode();
  78.     }
  79.     public boolean equals(
  80.         Object  o)
  81.     {
  82.         if (!(o instanceof DERBMPString))
  83.         {
  84.             return false;
  85.         }
  86.         DERPrintableString  s = (DERPrintableString)o;
  87.         return this.getString().equals(s.getString());
  88.     }
  89.     void encode(
  90.         DEROutputStream  out)
  91.         throws IOException
  92.     {
  93.         char[]  c = string.toCharArray();
  94.         byte[]  b = new byte[c.length * 2];
  95.         for (int i = 0; i != c.length; i++)
  96.         {
  97.             b[2 * i] = (byte)(c[i] >> 8);
  98.             b[2 * i + 1] = (byte)c[i];
  99.         }
  100.         out.writeEncoded(BMP_STRING, b);
  101.     }
  102. }