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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. /**
  4.  * ASN.1 TaggedObject - in ASN.1 nottation this is any object proceeded by
  5.  * a [n] where n is some number - these are assume to follow the construction
  6.  * rules (as with sequences).
  7.  */
  8. public abstract class ASN1TaggedObject
  9.     extends DERObject
  10. {
  11.     int             tagNo;
  12.     boolean         empty = false;
  13.     boolean         explicit = true;
  14.     DEREncodable    obj = null;
  15.     /**
  16.      * @param tagNo the tag number for this object.
  17.      * @param obj the tagged object.
  18.      */
  19.     public ASN1TaggedObject(
  20.         int             tagNo,
  21.         DEREncodable    obj)
  22.     {
  23.         this.explicit = true;
  24.         this.tagNo = tagNo;
  25.         this.obj = obj;
  26.     }
  27.     /**
  28.      * @param explicit true if the object is explicitly tagged.
  29.      * @param tagNo the tag number for this object.
  30.      * @param obj the tagged object.
  31.      */
  32.     public ASN1TaggedObject(
  33.         boolean         explicit,
  34.         int             tagNo,
  35.         DEREncodable    obj)
  36.     {
  37.         this.explicit = explicit;
  38.         this.tagNo = tagNo;
  39.         this.obj = obj;
  40.     }
  41. public boolean equals(
  42. Object o)
  43. {
  44.         if (o == null || !(o instanceof ASN1TaggedObject))
  45.         {
  46.             return false;
  47.         }
  48.         
  49.         ASN1TaggedObject other = (ASN1TaggedObject)o;
  50.         
  51.         if(tagNo != other.tagNo || empty != other.empty || explicit != other.explicit)
  52.         {
  53. return false;
  54. }
  55. if(obj == null)
  56. {
  57. if(other.obj != null)
  58. {
  59. return false;
  60. }
  61. }
  62. else
  63. {
  64. if(!(obj.equals(other.obj)))
  65. {
  66. return false;
  67. }
  68. }
  69. return true;
  70. }
  71.     public int getTagNo()
  72.     {
  73.         return tagNo;
  74.     }
  75.     /**
  76.      * return whether or not the object may be explicitly tagged. 
  77.      * <p>
  78.      * Note: if the object has been read from an input stream, the only
  79.      * time you can be sure if isExplicit is returning the true state of
  80.      * affairs is if it returns false. An implicitly tagged object may appear
  81.      * to be explicitly tagged, so you need to understand the context under
  82.      * which the reading was done as well, see getObject below.
  83.      */
  84.     public boolean isExplicit()
  85.     {
  86.         return explicit;
  87.     }
  88.     public boolean isEmpty()
  89.     {
  90.         return empty;
  91.     }
  92.     /**
  93.      * return whatever was following the tag.
  94.      * <p>
  95.      * Note: tagged objects are generally context dependent if you're
  96.      * trying to extract a tagged object you should be going via the
  97.      * appropriate getInstance method.
  98.      */
  99.     public DERObject getObject()
  100.     {
  101.         if (obj != null)
  102.         {
  103.             return obj.getDERObject();
  104.         }
  105.         return null;
  106.     }
  107.     abstract void encode(DEROutputStream  out)
  108.         throws IOException;
  109. }