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

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.x509;
  2. import java.io.*;
  3. import java.util.*;
  4. import org.bouncycastle.asn1.*;
  5. public class X509Extensions
  6.     implements DEREncodable
  7. {
  8.     /**
  9.      * Subject Key Identifier
  10.      */
  11.     public static final DERObjectIdentifier SubjectKeyIdentifier = new DERObjectIdentifier("2.5.29.14");
  12.     /**
  13.      * Key Usage
  14.      */
  15.     public static final DERObjectIdentifier KeyUsage = new DERObjectIdentifier("2.5.29.15");
  16.     /**
  17.      * Private Key Usage Period
  18.      */
  19.     public static final DERObjectIdentifier PrivateKeyUsagePeriod = new DERObjectIdentifier("2.5.29.16");
  20.     /**
  21.      * Subject Alternative Name
  22.      */
  23.     public static final DERObjectIdentifier SubjectAlternativeName = new DERObjectIdentifier("2.5.29.17");
  24.     /**
  25.      * Issuer Alternative Name
  26.      */
  27.     public static final DERObjectIdentifier IssuerAlternativeName = new DERObjectIdentifier("2.5.29.18");
  28.     /**
  29.      * Basic Constraints
  30.      */
  31.     public static final DERObjectIdentifier BasicConstraints = new DERObjectIdentifier("2.5.29.19");
  32.     /**
  33.      * CRL Number
  34.      */
  35.     public static final DERObjectIdentifier CRLNumber = new DERObjectIdentifier("2.5.29.20");
  36.     /**
  37.      * Reason code
  38.      */
  39.     public static final DERObjectIdentifier ReasonCode = new DERObjectIdentifier("2.5.29.21");
  40.     /**
  41.      * Hold Instruction Code
  42.      */
  43.     public static final DERObjectIdentifier InstructionCode = new DERObjectIdentifier("2.5.29.23");
  44.     /**
  45.      * Invalidity Date
  46.      */
  47.     public static final DERObjectIdentifier InvalidityDate = new DERObjectIdentifier("2.5.29.24");
  48.     /**
  49.      * Delta CRL indicator
  50.      */
  51.     public static final DERObjectIdentifier DeltaCRLIndicator = new DERObjectIdentifier("2.5.29.27");
  52.     /**
  53.      * Issuing Distribution Point
  54.      */
  55.     public static final DERObjectIdentifier IssuingDistributionPoint = new DERObjectIdentifier("2.5.29.28");
  56.     /**
  57.      * Certificate Issuer
  58.      */
  59.     public static final DERObjectIdentifier CertificateIssuer = new DERObjectIdentifier("2.5.29.29");
  60.     /**
  61.      * Name Constraints
  62.      */
  63.     public static final DERObjectIdentifier NameConstraints = new DERObjectIdentifier("2.5.29.30");
  64.     /**
  65.      * CRL Distribution Points
  66.      */
  67.     public static final DERObjectIdentifier CRLDistributionPoints = new DERObjectIdentifier("2.5.29.31");
  68.     /**
  69.      * Certificate Policies
  70.      */
  71.     public static final DERObjectIdentifier CertificatePolicies = new DERObjectIdentifier("2.5.29.32");
  72.     /**
  73.      * Policy Mappings
  74.      */
  75.     public static final DERObjectIdentifier PolicyMappings = new DERObjectIdentifier("2.5.29.33");
  76.     /**
  77.      * Authority Key Identifier
  78.      */
  79.     public static final DERObjectIdentifier AuthorityKeyIdentifier = new DERObjectIdentifier("2.5.29.35");
  80.     /**
  81.      * Policy Constraints
  82.      */
  83.     public static final DERObjectIdentifier PolicyConstraints = new DERObjectIdentifier("2.5.29.36");
  84.     /**
  85.      * Extended Key Usage
  86.      */
  87.     public static final DERObjectIdentifier ExtendedKeyUsage = new DERObjectIdentifier("2.5.29.37");
  88.     private Hashtable               extensions = new Hashtable();
  89.     private Vector                  ordering = new Vector();
  90.     public static X509Extensions getInstance(
  91.         ASN1TaggedObject obj,
  92.         boolean          explicit)
  93.     {
  94.         return getInstance(ASN1Sequence.getInstance(obj, explicit));
  95.     }
  96.     public static X509Extensions getInstance(
  97.         Object  obj)
  98.     {
  99.         if (obj == null || obj instanceof X509Extensions)
  100.         {
  101.             return (X509Extensions)obj;
  102.         }
  103.         if (obj instanceof ASN1Sequence)
  104.         {
  105.             return new X509Extensions((ASN1Sequence)obj);
  106.         }
  107.         if (obj instanceof ASN1TaggedObject)
  108.         {
  109.             return getInstance(((ASN1TaggedObject)obj).getObject());
  110.         }
  111.         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
  112.     }
  113.     /**
  114.      * Constructor from ASN1Sequence.
  115.      *
  116.      * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
  117.      */
  118.     public X509Extensions(
  119.         ASN1Sequence  seq)
  120.     {
  121.         Enumeration e = seq.getObjects();
  122.         while (e.hasMoreElements())
  123.         {
  124.             ASN1Sequence            s = (ASN1Sequence)e.nextElement();
  125.             Enumeration              e1 = s.getObjects();
  126.             if (s.size() == 3)
  127.             {
  128.                 extensions.put(s.getObjectAt(0), new X509Extension((DERBoolean)s.getObjectAt(1), (ASN1OctetString)s.getObjectAt(2)));
  129.             }
  130.             else
  131.             {
  132.                 extensions.put(s.getObjectAt(0), new X509Extension(false, (ASN1OctetString)s.getObjectAt(1)));
  133.             }
  134.             ordering.addElement(s.getObjectAt(0));
  135.         }
  136.     }
  137.     /**
  138.      * constructor from a table of extensions.
  139.      * <p>
  140.      * it's is assumed the table contains OID/String pairs.
  141.      */
  142.     public X509Extensions(
  143.         Hashtable  extensions)
  144.     {
  145.         this(null, extensions);
  146.     }
  147.     /**
  148.      * constructor from a table of extensions with ordering
  149.      * <p>
  150.      * it's is assumed the table contains OID/String pairs.
  151.      */
  152.     public X509Extensions(
  153.         Vector      ordering,
  154.         Hashtable   extensions)
  155.     {
  156.         Enumeration e;
  157.         if (ordering == null)
  158.         {
  159.             e = extensions.keys();
  160.         }
  161.         else
  162.         {
  163.             e = ordering.elements();
  164.         }
  165.         while (e.hasMoreElements())
  166.         {
  167.             this.ordering.addElement(e.nextElement());
  168.         }
  169.         e = this.ordering.elements();
  170.         while (e.hasMoreElements())
  171.         {
  172.             DERObjectIdentifier     oid = (DERObjectIdentifier)e.nextElement();
  173.             X509Extension           ext = (X509Extension)extensions.get(oid);
  174.             this.extensions.put(oid, ext);
  175.         }
  176.     }
  177.     /**
  178.      * return an Enumeration of the extension field's object ids.
  179.      */
  180.     public Enumeration oids()
  181.     {
  182.         return ordering.elements();
  183.     }
  184.     /**
  185.      * return the extension represented by the object identifier
  186.      * passed in.
  187.      *
  188.      * @return the extension if it's present, null otherwise.
  189.      */
  190.     public X509Extension getExtension(
  191.         DERObjectIdentifier oid)
  192.     {
  193.         return (X509Extension)extensions.get(oid);
  194.     }
  195.     public DERObject getDERObject()
  196.     {
  197.         ASN1EncodableVector     vec = new ASN1EncodableVector();
  198.         Enumeration             e = ordering.elements();
  199.         while (e.hasMoreElements())
  200.         {
  201.             DERObjectIdentifier     oid = (DERObjectIdentifier)e.nextElement();
  202.             X509Extension           ext = (X509Extension)extensions.get(oid);
  203.             ASN1EncodableVector     v = new ASN1EncodableVector();
  204.             v.add(oid);
  205.             if (ext.isCritical())
  206.             {
  207.                 v.add(new DERBoolean(true));
  208.             }
  209.             v.add(ext.getValue());
  210.             vec.add(new DERSequence(v));
  211.         }
  212.         return new DERSequence(vec);
  213.     }
  214.     public int hashCode()
  215.     {
  216.         Enumeration     e = extensions.keys();
  217.         int             hashCode = 0;
  218.         while (e.hasMoreElements())
  219.         {
  220.             Object  o = e.nextElement();
  221.             hashCode ^= o.hashCode();
  222.             hashCode ^= extensions.get(o).hashCode();
  223.         }
  224.         return hashCode;
  225.     }
  226.     public boolean equals(
  227.         Object o)
  228.     {
  229.         if (o == null || !(o instanceof X509Extensions))
  230.         {
  231.             return false;
  232.         }
  233.         X509Extensions  other = (X509Extensions)o;
  234.         Enumeration     e1 = extensions.keys();
  235.         Enumeration     e2 = other.extensions.keys();
  236.         while (e1.hasMoreElements() && e2.hasMoreElements())
  237.         {
  238.             Object  o1 = e1.nextElement();
  239.             Object  o2 = e2.nextElement();
  240.             if (!o1.equals(o2))
  241.             {
  242.                 return false;
  243.             }
  244.         }
  245.         if (e1.hasMoreElements() || e2.hasMoreElements())
  246.         {
  247.             return false;
  248.         }
  249.         return true;
  250.     }
  251. }