Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import java.util.Enumeration;
      4 import java.util.Vector;
      5 
      6 import org.bouncycastle.asn1.ASN1Encodable;
      7 import org.bouncycastle.asn1.ASN1EncodableVector;
      8 import org.bouncycastle.asn1.ASN1Sequence;
      9 import org.bouncycastle.asn1.ASN1TaggedObject;
     10 import org.bouncycastle.asn1.DERObject;
     11 import org.bouncycastle.asn1.DERSequence;
     12 import org.bouncycastle.asn1.DERTaggedObject;
     13 
     14 public class NameConstraints
     15     extends ASN1Encodable
     16 {
     17     private ASN1Sequence permitted, excluded;
     18 
     19     public NameConstraints(ASN1Sequence seq)
     20     {
     21         Enumeration e = seq.getObjects();
     22         while (e.hasMoreElements())
     23         {
     24             ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement());
     25             switch (o.getTagNo())
     26             {
     27             case 0:
     28                 permitted = ASN1Sequence.getInstance(o, false);
     29                 break;
     30             case 1:
     31                 excluded = ASN1Sequence.getInstance(o, false);
     32                 break;
     33             }
     34         }
     35     }
     36 
     37     /**
     38      * Constructor from a given details.
     39      *
     40      * <p>
     41      * permitted and excluded are Vectors of GeneralSubtree objects.
     42      *
     43      * @param permitted
     44      *            Permitted subtrees
     45      * @param excluded
     46      *            Excludes subtrees
     47      */
     48     public NameConstraints(
     49         Vector permitted,
     50         Vector excluded)
     51     {
     52         if (permitted != null)
     53         {
     54             this.permitted = createSequence(permitted);
     55         }
     56         if (excluded != null)
     57         {
     58             this.excluded = createSequence(excluded);
     59         }
     60     }
     61 
     62     private DERSequence createSequence(Vector subtree)
     63     {
     64         ASN1EncodableVector vec = new ASN1EncodableVector();
     65         Enumeration e = subtree.elements();
     66         while (e.hasMoreElements())
     67         {
     68             vec.add((GeneralSubtree)e.nextElement());
     69         }
     70 
     71         return new DERSequence(vec);
     72     }
     73 
     74     public ASN1Sequence getPermittedSubtrees()
     75     {
     76         return permitted;
     77     }
     78 
     79     public ASN1Sequence getExcludedSubtrees()
     80     {
     81         return excluded;
     82     }
     83 
     84     /*
     85      * NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees
     86      * OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL }
     87      */
     88     public DERObject toASN1Object()
     89     {
     90         ASN1EncodableVector v = new ASN1EncodableVector();
     91 
     92         if (permitted != null)
     93         {
     94             v.add(new DERTaggedObject(false, 0, permitted));
     95         }
     96 
     97         if (excluded != null)
     98         {
     99             v.add(new DERTaggedObject(false, 1, excluded));
    100         }
    101 
    102         return new DERSequence(v);
    103     }
    104 }
    105