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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. import java.util.*;
  4. public abstract class ASN1OctetString
  5.     extends DERObject
  6. {
  7.     byte[]  string;
  8.     /**
  9.      * return an Octet String from a tagged object.
  10.      *
  11.      * @param obj the tagged object holding the object we want.
  12.      * @param explicit true if the object is meant to be explicitly
  13.      *              tagged false otherwise.
  14.      * @exception IllegalArgumentException if the tagged object cannot
  15.      *              be converted.
  16.      */
  17.     public static ASN1OctetString getInstance(
  18.         ASN1TaggedObject    obj,
  19.         boolean             explicit)
  20.     {
  21.         return getInstance(obj.getObject());
  22.     }
  23.     /**
  24.      * return an Octet String from the given object.
  25.      *
  26.      * @param obj the object we want converted.
  27.      * @exception IllegalArgumentException if the object cannot be converted.
  28.      */
  29.     public static ASN1OctetString getInstance(
  30.         Object  obj)
  31.     {
  32.         if (obj == null || obj instanceof ASN1OctetString)
  33.         {
  34.             return (ASN1OctetString)obj;
  35.         }
  36.         if (obj instanceof ASN1TaggedObject)
  37.         {
  38.             return getInstance(((ASN1TaggedObject)obj).getObject());
  39.         }
  40.         if (obj instanceof ASN1Sequence)
  41.         {
  42.             Vector      v = new Vector();
  43.             Enumeration e = ((ASN1Sequence)obj).getObjects();
  44.             while (e.hasMoreElements())
  45.             {
  46.                 v.addElement(e.nextElement());
  47.             }
  48.             return new BERConstructedOctetString(v);
  49.         }
  50.         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
  51.     }
  52.     /**
  53.      * @param string the octets making up the octet string.
  54.      */
  55.     public ASN1OctetString(
  56.         byte[]  string)
  57.     {
  58.         this.string = string;
  59.     }
  60.     public ASN1OctetString(
  61.         DEREncodable obj)
  62.     {
  63.         try
  64.         {
  65.             ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
  66.             DEROutputStream         dOut = new DEROutputStream(bOut);
  67.             dOut.writeObject(obj);
  68.             dOut.close();
  69.             this.string = bOut.toByteArray();
  70.         }
  71.         catch (IOException e)
  72.         {
  73.             throw new IllegalArgumentException("Error processing object : " + e.toString());
  74.         }
  75.     }
  76.     public byte[] getOctets()
  77.     {
  78.         return string;
  79.     }
  80.     public int hashCode()
  81.     {
  82.         byte[]  b = this.getOctets();
  83.         int     value = 0;
  84.         for (int i = 0; i != b.length; i++)
  85.         {
  86.             value ^= (b[i] & 0xff) << (i % 4);
  87.         }
  88.         return value;
  89.     }
  90.     public boolean equals(
  91.         Object  o)
  92.     {
  93.         if (o == null || !(o instanceof DEROctetString))
  94.         {
  95.             return false;
  96.         }
  97.         DEROctetString  other = (DEROctetString)o;
  98.         byte[] b1 = other.getOctets();
  99.         byte[] b2 = this.getOctets();
  100.         if (b1.length != b2.length)
  101.         {
  102.             return false;
  103.         }
  104.         for (int i = 0; i != b1.length; i++)
  105.         {
  106.             if (b1[i] != b2[i])
  107.             {
  108.                 return false;
  109.             }
  110.         }
  111.         return true;
  112.     }
  113.     abstract void encode(DEROutputStream out)
  114.         throws IOException;
  115. }