Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import org.bouncycastle.asn1.ASN1Object;
      4 import org.bouncycastle.asn1.ASN1ObjectIdentifier;
      5 import org.bouncycastle.asn1.ASN1Primitive;
      6 import org.bouncycastle.asn1.ASN1Sequence;
      7 import org.bouncycastle.asn1.ASN1TaggedObject;
      8 import org.bouncycastle.asn1.DERSequence;
      9 import org.bouncycastle.util.Strings;
     10 
     11 public class GeneralNames
     12     extends ASN1Object
     13 {
     14     private final GeneralName[] names;
     15 
     16     public static GeneralNames getInstance(
     17         Object  obj)
     18     {
     19         if (obj instanceof GeneralNames)
     20         {
     21             return (GeneralNames)obj;
     22         }
     23 
     24         if (obj != null)
     25         {
     26             return new GeneralNames(ASN1Sequence.getInstance(obj));
     27         }
     28 
     29         return null;
     30     }
     31 
     32     public static GeneralNames getInstance(
     33         ASN1TaggedObject obj,
     34         boolean          explicit)
     35     {
     36         return getInstance(ASN1Sequence.getInstance(obj, explicit));
     37     }
     38 
     39     public static GeneralNames fromExtensions(Extensions extensions, ASN1ObjectIdentifier extOID)
     40     {
     41         return GeneralNames.getInstance(extensions.getExtensionParsedValue(extOID));
     42     }
     43 
     44     /**
     45      * Construct a GeneralNames object containing one GeneralName.
     46      *
     47      * @param name the name to be contained.
     48      */
     49     public GeneralNames(
     50         GeneralName  name)
     51     {
     52         this.names = new GeneralName[] { name };
     53     }
     54 
     55 
     56     public GeneralNames(
     57         GeneralName[]  names)
     58     {
     59         this.names = names;
     60     }
     61 
     62     private GeneralNames(
     63         ASN1Sequence  seq)
     64     {
     65         this.names = new GeneralName[seq.size()];
     66 
     67         for (int i = 0; i != seq.size(); i++)
     68         {
     69             names[i] = GeneralName.getInstance(seq.getObjectAt(i));
     70         }
     71     }
     72 
     73     public GeneralName[] getNames()
     74     {
     75         GeneralName[] tmp = new GeneralName[names.length];
     76 
     77         System.arraycopy(names, 0, tmp, 0, names.length);
     78 
     79         return tmp;
     80     }
     81 
     82     /**
     83      * Produce an object suitable for an ASN1OutputStream.
     84      * <pre>
     85      * GeneralNames ::= SEQUENCE SIZE {1..MAX} OF GeneralName
     86      * </pre>
     87      */
     88     public ASN1Primitive toASN1Primitive()
     89     {
     90         return new DERSequence(names);
     91     }
     92 
     93     public String toString()
     94     {
     95         StringBuffer  buf = new StringBuffer();
     96         String        sep = Strings.lineSeparator();
     97 
     98         buf.append("GeneralNames:");
     99         buf.append(sep);
    100 
    101         for (int i = 0; i != names.length; i++)
    102         {
    103             buf.append("    ");
    104             buf.append(names[i]);
    105             buf.append(sep);
    106         }
    107         return buf.toString();
    108     }
    109 }
    110