14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectpackage org.bouncycastle.asn1.x509;
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Choice;
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Encodable;
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Object;
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Primitive;
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Set;
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.ASN1TaggedObject;
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimport org.bouncycastle.asn1.DERTaggedObject;
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The DistributionPointName object.
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * <pre>
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * DistributionPointName ::= CHOICE {
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *     fullName                 [0] GeneralNames,
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *     nameRelativeToCRLIssuer  [1] RDN
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * }
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * </pre>
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectpublic class DistributionPointName
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    extends ASN1Object
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    implements ASN1Choice
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ASN1Encodable        name;
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int                 type;
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public static final int FULL_NAME = 0;
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1;
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public static DistributionPointName getInstance(
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        ASN1TaggedObject obj,
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        boolean          explicit)
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return getInstance(ASN1TaggedObject.getInstance(obj, true));
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public static DistributionPointName getInstance(
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        Object  obj)
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (obj == null || obj instanceof DistributionPointName)
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            return (DistributionPointName)obj;
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else if (obj instanceof ASN1TaggedObject)
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            return new DistributionPointName((ASN1TaggedObject)obj);
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public DistributionPointName(
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        int             type,
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        ASN1Encodable   name)
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        this.type = type;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        this.name = name;
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public DistributionPointName(
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        GeneralNames name)
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        this(FULL_NAME, name);
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /**
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     * Return the tag number applying to the underlying choice.
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     *
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     * @return the tag number for this point name.
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     */
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public int getType()
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return this.type;
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /**
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     * Return the tagged object inside the distribution point name.
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     *
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     * @return the underlying choice item.
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project     */
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public ASN1Encodable getName()
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return (ASN1Encodable)name;
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    public DistributionPointName(
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        ASN1TaggedObject    obj)
88    {
89        this.type = obj.getTagNo();
90
91        if (type == 0)
92        {
93            this.name = GeneralNames.getInstance(obj, false);
94        }
95        else
96        {
97            this.name = ASN1Set.getInstance(obj, false);
98        }
99    }
100
101    public ASN1Primitive toASN1Primitive()
102    {
103        return new DERTaggedObject(false, type, name);
104    }
105
106    public String toString()
107    {
108        String       sep = System.getProperty("line.separator");
109        StringBuffer buf = new StringBuffer();
110        buf.append("DistributionPointName: [");
111        buf.append(sep);
112        if (type == FULL_NAME)
113        {
114            appendObject(buf, sep, "fullName", name.toString());
115        }
116        else
117        {
118            appendObject(buf, sep, "nameRelativeToCRLIssuer", name.toString());
119        }
120        buf.append("]");
121        buf.append(sep);
122        return buf.toString();
123    }
124
125    private void appendObject(StringBuffer buf, String sep, String name, String value)
126    {
127        String       indent = "    ";
128
129        buf.append(indent);
130        buf.append(name);
131        buf.append(":");
132        buf.append(sep);
133        buf.append(indent);
134        buf.append(indent);
135        buf.append(value);
136        buf.append(sep);
137    }
138}
139