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