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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.x509;
  2. import java.io.*;
  3. import java.util.Enumeration;
  4. import org.bouncycastle.asn1.*;
  5. public class AlgorithmIdentifier
  6.     implements DEREncodable
  7. {
  8.     private DERObjectIdentifier objectId;
  9.     private DEREncodable        parameters;
  10.     private boolean             parametersDefined = false;
  11.     public static AlgorithmIdentifier getInstance(
  12.         ASN1TaggedObject obj,
  13.         boolean          explicit)
  14.     {
  15.         return getInstance(ASN1Sequence.getInstance(obj, explicit));
  16.     }
  17.     
  18.     public static AlgorithmIdentifier getInstance(
  19.         Object  obj)
  20.     {
  21.         if (obj instanceof AlgorithmIdentifier)
  22.         {
  23.             return (AlgorithmIdentifier)obj;
  24.         }
  25.         
  26.         if (obj instanceof DERObjectIdentifier)
  27.         {
  28.             return new AlgorithmIdentifier((DERObjectIdentifier)obj);
  29.         }
  30.         if (obj instanceof String)
  31.         {
  32.             return new AlgorithmIdentifier((String)obj);
  33.         }
  34.         if (obj instanceof ASN1Sequence)
  35.         {
  36.             return new AlgorithmIdentifier((ASN1Sequence)obj);
  37.         }
  38.         throw new IllegalArgumentException("unknown object in factory");
  39.     }
  40.     public AlgorithmIdentifier(
  41.         DERObjectIdentifier     objectId)
  42.     {
  43.         this.objectId = objectId;
  44.     }
  45.     public AlgorithmIdentifier(
  46.         String     objectId)
  47.     {
  48.         this.objectId = new DERObjectIdentifier(objectId);
  49.     }
  50.     public AlgorithmIdentifier(
  51.         DERObjectIdentifier     objectId,
  52.         DEREncodable            parameters)
  53.     {
  54.         parametersDefined = true;
  55.         this.objectId = objectId;
  56.         this.parameters = parameters;
  57.     }
  58.     public AlgorithmIdentifier(
  59.         ASN1Sequence   seq)
  60.     {
  61.         objectId = (DERObjectIdentifier)seq.getObjectAt(0);
  62.         if (seq.size() == 2)
  63.         {
  64.             parametersDefined = true;
  65.             parameters = seq.getObjectAt(1);
  66.         }
  67.         else
  68.         {
  69.             parameters = null;
  70.         }
  71.     }
  72.     public DERObjectIdentifier getObjectId()
  73.     {
  74.         return objectId;
  75.     }
  76.     public DEREncodable getParameters()
  77.     {
  78.         return parameters;
  79.     }
  80.     /**
  81.      * <pre>
  82.      *      AlgorithmIdentifier ::= SEQUENCE {
  83.      *                            algorithm OBJECT IDENTIFIER,
  84.      *                            parameters ANY DEFINED BY algorithm OPTIONAL }
  85.      * </pre>
  86.      */
  87.     public DERObject getDERObject()
  88.     {
  89.         ASN1EncodableVector  v = new ASN1EncodableVector();
  90.         v.add(objectId);
  91.         if (parametersDefined)
  92.         {
  93.             v.add(parameters);
  94.         }
  95.         return new DERSequence(v);
  96.     }
  97.     public boolean equals(
  98.         Object  o)
  99.     {
  100.         if ((o == null) || !(o instanceof AlgorithmIdentifier))
  101.         {
  102.             return false;
  103.         }
  104.         AlgorithmIdentifier other = (AlgorithmIdentifier)o;
  105.         if (!this.getObjectId().equals(other.getObjectId()))
  106.         {
  107.             return false;
  108.         }
  109.         if (this.getParameters() == null && other.getParameters() == null)
  110.         {
  111.             return true;
  112.         }
  113.         if (this.getParameters() == null || other.getParameters() == null)
  114.         {
  115.             return false;
  116.         }
  117.         ByteArrayOutputStream   b1Out = new ByteArrayOutputStream();
  118.         ByteArrayOutputStream   b2Out = new ByteArrayOutputStream();
  119.         DEROutputStream         d1Out = new DEROutputStream(b1Out);
  120.         DEROutputStream         d2Out = new DEROutputStream(b2Out);
  121.         try
  122.         {
  123.             d1Out.writeObject(this.getParameters());
  124.             d2Out.writeObject(other.getParameters());
  125.             byte[]  b1 = b1Out.toByteArray();
  126.             byte[]  b2 = b2Out.toByteArray();
  127.             if (b1.length != b2.length)
  128.             {
  129.                 return false;
  130.             }
  131.             for (int i = 0; i != b1.length; i++)
  132.             {
  133.                 if (b1[i] != b2[i])
  134.                 {
  135.                     return false;
  136.                 }
  137.             }
  138.         }
  139.         catch (Exception e)
  140.         {
  141.             return false;
  142.         }
  143.         return true;
  144.     }
  145. }