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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1;
  2. import java.io.*;
  3. /**
  4.  * DER 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 class DERTaggedObject
  9.     extends ASN1TaggedObject
  10. {
  11.     /**
  12.      * @param tagNo the tag number for this object.
  13.      * @param obj the tagged object.
  14.      */
  15.     public DERTaggedObject(
  16.         int             tagNo,
  17.         DEREncodable    obj)
  18.     {
  19. super(tagNo, obj);
  20.     }
  21.     /**
  22.      * @param explicit true if an explicitly tagged object.
  23.      * @param tagNo the tag number for this object.
  24.      * @param obj the tagged object.
  25.      */
  26.     public DERTaggedObject(
  27.         boolean         explicit,
  28.         int             tagNo,
  29.         DEREncodable    obj)
  30.     {
  31. super(explicit, tagNo, obj);
  32.     }
  33.     /**
  34.      * create an implicitly tagged object that contains a zero
  35.      * length sequence.
  36.      */
  37.     public DERTaggedObject(
  38.         int             tagNo)
  39.     {
  40.         super(false, tagNo, new DERSequence());
  41.     }
  42.     void encode(
  43.         DEROutputStream  out)
  44.         throws IOException
  45.     {
  46.         if (!empty)
  47.         {
  48.             ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
  49.             DEROutputStream         dOut = new DEROutputStream(bOut);
  50.             dOut.writeObject(obj);
  51.             dOut.close();
  52.             byte[]  bytes = bOut.toByteArray();
  53.             if (explicit)
  54.             {
  55.                 out.writeEncoded(CONSTRUCTED | TAGGED | tagNo, bytes);
  56.             }
  57.             else
  58.             {
  59.                 //
  60.                 // need to mark constructed types...
  61.                 //
  62.                 if ((bytes[0] & CONSTRUCTED) != 0)
  63.                 {
  64.                     bytes[0] = (byte)(CONSTRUCTED | TAGGED | tagNo);
  65.                 }
  66.                 else
  67.                 {
  68.                     bytes[0] = (byte)(TAGGED | tagNo);
  69.                 }
  70.                 out.write(bytes);
  71.             }
  72.         }
  73.         else
  74.         {
  75.             out.writeEncoded(CONSTRUCTED | TAGGED | tagNo, new byte[0]);
  76.         }
  77.     }
  78. }