1 package org.bouncycastle.asn1.x509; 2 3 import org.bouncycastle.asn1.ASN1Choice; 4 import org.bouncycastle.asn1.ASN1Encodable; 5 import org.bouncycastle.asn1.ASN1Object; 6 import org.bouncycastle.asn1.ASN1Primitive; 7 import org.bouncycastle.asn1.ASN1Set; 8 import org.bouncycastle.asn1.ASN1TaggedObject; 9 import org.bouncycastle.asn1.DERTaggedObject; 10 import org.bouncycastle.util.Strings; 11 12 /** 13 * The DistributionPointName object. 14 * <pre> 15 * DistributionPointName ::= CHOICE { 16 * fullName [0] GeneralNames, 17 * nameRelativeToCRLIssuer [1] RDN 18 * } 19 * </pre> 20 */ 21 public class DistributionPointName 22 extends ASN1Object 23 implements ASN1Choice 24 { 25 ASN1Encodable name; 26 int type; 27 28 public static final int FULL_NAME = 0; 29 public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1; 30 getInstance( ASN1TaggedObject obj, boolean explicit)31 public static DistributionPointName getInstance( 32 ASN1TaggedObject obj, 33 boolean explicit) 34 { 35 return getInstance(ASN1TaggedObject.getInstance(obj, true)); 36 } 37 getInstance( Object obj)38 public static DistributionPointName getInstance( 39 Object obj) 40 { 41 if (obj == null || obj instanceof DistributionPointName) 42 { 43 return (DistributionPointName)obj; 44 } 45 else if (obj instanceof ASN1TaggedObject) 46 { 47 return new DistributionPointName((ASN1TaggedObject)obj); 48 } 49 50 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 51 } 52 DistributionPointName( int type, ASN1Encodable name)53 public DistributionPointName( 54 int type, 55 ASN1Encodable name) 56 { 57 this.type = type; 58 this.name = name; 59 } 60 DistributionPointName( GeneralNames name)61 public DistributionPointName( 62 GeneralNames name) 63 { 64 this(FULL_NAME, name); 65 } 66 67 /** 68 * Return the tag number applying to the underlying choice. 69 * 70 * @return the tag number for this point name. 71 */ getType()72 public int getType() 73 { 74 return this.type; 75 } 76 77 /** 78 * Return the tagged object inside the distribution point name. 79 * 80 * @return the underlying choice item. 81 */ getName()82 public ASN1Encodable getName() 83 { 84 return (ASN1Encodable)name; 85 } 86 DistributionPointName( ASN1TaggedObject obj)87 public DistributionPointName( 88 ASN1TaggedObject obj) 89 { 90 this.type = obj.getTagNo(); 91 92 if (type == 0) 93 { 94 this.name = GeneralNames.getInstance(obj, false); 95 } 96 else 97 { 98 this.name = ASN1Set.getInstance(obj, false); 99 } 100 } 101 toASN1Primitive()102 public ASN1Primitive toASN1Primitive() 103 { 104 return new DERTaggedObject(false, type, name); 105 } 106 toString()107 public String toString() 108 { 109 String sep = Strings.lineSeparator(); 110 StringBuffer buf = new StringBuffer(); 111 buf.append("DistributionPointName: ["); 112 buf.append(sep); 113 if (type == FULL_NAME) 114 { 115 appendObject(buf, sep, "fullName", name.toString()); 116 } 117 else 118 { 119 appendObject(buf, sep, "nameRelativeToCRLIssuer", name.toString()); 120 } 121 buf.append("]"); 122 buf.append(sep); 123 return buf.toString(); 124 } 125 appendObject(StringBuffer buf, String sep, String name, String value)126 private void appendObject(StringBuffer buf, String sep, String name, String value) 127 { 128 String indent = " "; 129 130 buf.append(indent); 131 buf.append(name); 132 buf.append(":"); 133 buf.append(sep); 134 buf.append(indent); 135 buf.append(indent); 136 buf.append(value); 137 buf.append(sep); 138 } 139 } 140