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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.x509;
  2. import org.bouncycastle.asn1.*;
  3. /**
  4.  * <pre>
  5.  * GeneralName ::= CHOICE {
  6.  *      otherName                       [0]     OtherName,
  7.  *      rfc822Name                      [1]     IA5String,
  8.  *      dNSName                         [2]     IA5String,
  9.  *      x400Address                     [3]     ORAddress,
  10.  *      directoryName                   [4]     Name,
  11.  *      ediPartyName                    [5]     EDIPartyName,
  12.  *      uniformResourceIdentifier       [6]     IA5String,
  13.  *      iPAddress                       [7]     OCTET STRING,
  14.  *      registeredID                    [8]     OBJECT IDENTIFIER}
  15.  *
  16.  * OtherName ::= SEQUENCE {
  17.  *      type-id    OBJECT IDENTIFIER,
  18.  *      value      [0] EXPLICIT ANY DEFINED BY type-id }
  19.  *
  20.  * EDIPartyName ::= SEQUENCE {
  21.  *      nameAssigner            [0]     DirectoryString OPTIONAL,
  22.  *      partyName               [1]     DirectoryString }
  23.  * </pre>
  24.  */
  25. public class GeneralName
  26.     implements DEREncodable
  27. {
  28.     DEREncodable   obj;
  29.     int            tag;
  30. boolean isInsideImplicit = false; // if we are in an implicitly tagged object
  31.     public GeneralName(
  32.         X509Name  directoryName)
  33.     {
  34.         this.obj = directoryName;
  35.         this.tag = 4;
  36.     }
  37.     /**
  38.      * When the subjectAltName extension contains an Internet mail address,
  39.      * the address MUST be included as an rfc822Name. The format of an
  40.      * rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822].
  41.      *
  42.      * When the subjectAltName extension contains a domain name service
  43.      * label, the domain name MUST be stored in the dNSName (an IA5String).
  44.      * The name MUST be in the "preferred name syntax," as specified by RFC
  45.      * 1034 [RFC 1034].
  46.      *
  47.      * When the subjectAltName extension contains a URI, the name MUST be
  48.      * stored in the uniformResourceIdentifier (an IA5String). The name MUST
  49.      * be a non-relative URL, and MUST follow the URL syntax and encoding
  50.      * rules specified in [RFC 1738].  The name must include both a scheme
  51.      * (e.g., "http" or "ftp") and a scheme-specific-part.  The scheme-
  52.      * specific-part must include a fully qualified domain name or IP
  53.      * address as the host.
  54.      *
  55.      * When the subjectAltName extension contains a iPAddress, the address
  56.      * MUST be stored in the octet string in "network byte order," as
  57.      * specified in RFC 791 [RFC 791]. The least significant bit (LSB) of
  58.      * each octet is the LSB of the corresponding byte in the network
  59.      * address. For IP Version 4, as specified in RFC 791, the octet string
  60.      * MUST contain exactly four octets.  For IP Version 6, as specified in
  61.      * RFC 1883, the octet string MUST contain exactly sixteen octets [RFC
  62.      * 1883].
  63.      */
  64.     public GeneralName(
  65.         DERObject name, int tag)
  66.     {
  67.         this.obj = name;
  68.         this.tag = tag;
  69.     }
  70.     public static GeneralName getInstance(
  71.         ASN1TaggedObject tagObj,
  72.         boolean          explicit)
  73.     {
  74.         int tag = tagObj.getTagNo();
  75.         switch (tag)
  76.         {
  77.         case 0:
  78.             return new GeneralName(tagObj.getObject(), tag);
  79.         case 1:
  80.             return new GeneralName(DERIA5String.getInstance(tagObj, false), tag);
  81.         case 2:
  82.             return new GeneralName(DERIA5String.getInstance(tagObj, false), tag);
  83.         case 3:
  84.             throw new IllegalArgumentException("unknown tag: " + tag);
  85.         case 4:
  86.             return new GeneralName(tagObj.getObject(), tag);
  87.         case 5:
  88.             return new GeneralName(tagObj.getObject(), tag);
  89.         case 6:
  90.             return new GeneralName(DERIA5String.getInstance(tagObj, false), tag);
  91.         case 7:
  92.             return new GeneralName(ASN1OctetString.getInstance(tagObj, false), tag);
  93.         case 8:
  94.             return new GeneralName(DERObjectIdentifier.getInstance(tagObj, false), tag);
  95.         }
  96.         throw new IllegalArgumentException("unknown tag: " + tag);
  97.     }
  98.     /**
  99.      * mark whether or not we are contained inside an implicitly tagged
  100.      * object.
  101.      * @deprecated
  102.      */
  103. public void markInsideImplicit(
  104. boolean isInsideImplicit)
  105. {
  106. this.isInsideImplicit = isInsideImplicit;
  107. }
  108.     public DERObject getDERObject()
  109.     {
  110.         if (obj.getDERObject() instanceof ASN1Sequence)
  111.         {
  112.             return new DERTaggedObject(true, tag, obj);
  113.         }
  114.         else
  115.         {
  116.             return new DERTaggedObject(false, tag, obj);
  117.         }
  118.     }
  119. }