1package org.bouncycastle.asn1.x509;
2
3import org.bouncycastle.asn1.ASN1Encodable;
4import org.bouncycastle.asn1.ASN1Sequence;
5import org.bouncycastle.asn1.ASN1TaggedObject;
6import org.bouncycastle.asn1.DERBoolean;
7import org.bouncycastle.asn1.DERObject;
8
9/**
10 * IssuingDistributionPoint ::= SEQUENCE {
11 *      distributionPoint          [0] DistributionPointName OPTIONAL,
12 *      onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE,
13 *      onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE,
14 *      onlySomeReasons            [3] ReasonFlags OPTIONAL,
15 *      indirectCRL                [4] BOOLEAN DEFAULT FALSE,
16 *      onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
17 */
18public class IssuingDistributionPoint
19    extends ASN1Encodable
20{
21    private boolean         onlyContainsUserCerts;
22    private boolean         onlyContainsCACerts;
23    private boolean         indirectCRL;
24    private boolean         onlyContainsAttributeCerts;
25
26    private ASN1Sequence    seq;
27
28    public static IssuingDistributionPoint getInstance(
29        ASN1TaggedObject obj,
30        boolean          explicit)
31    {
32        return getInstance(ASN1Sequence.getInstance(obj, explicit));
33    }
34
35    public static IssuingDistributionPoint getInstance(
36        Object  obj)
37    {
38        if (obj == null || obj instanceof IssuingDistributionPoint)
39        {
40            return (IssuingDistributionPoint)obj;
41        }
42        else if (obj instanceof ASN1Sequence)
43        {
44            return new IssuingDistributionPoint((ASN1Sequence)obj);
45        }
46
47        throw new IllegalArgumentException("unknown object in factory");
48    }
49
50    /**
51     * Constructor from ASN1Sequence
52     */
53    public IssuingDistributionPoint(
54        ASN1Sequence  seq)
55    {
56        this.seq = seq;
57
58        for (int i = 0; i != seq.size(); i++)
59        {
60            ASN1TaggedObject  o = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
61
62            switch (o.getTagNo())
63            {
64            case 0:
65                break;
66            case 1:
67                onlyContainsUserCerts = DERBoolean.getInstance(o, false).isTrue();
68                break;
69            case 2:
70                onlyContainsCACerts = DERBoolean.getInstance(o, false).isTrue();
71                break;
72            case 3:
73                break;
74            case 4:
75                indirectCRL = DERBoolean.getInstance(o, false).isTrue();
76                break;
77            case 5:
78                onlyContainsAttributeCerts = DERBoolean.getInstance(o, false).isTrue();
79                break;
80            default:
81                throw new IllegalArgumentException("unknown tag in IssuingDistributionPoint");
82            }
83        }
84    }
85
86    public boolean onlyContainsUserCerts()
87    {
88        return onlyContainsUserCerts;
89    }
90
91    public boolean onlyContainsCACerts()
92    {
93        return onlyContainsCACerts;
94    }
95
96    public boolean isIndirectCRL()
97    {
98        return indirectCRL;
99    }
100
101    public boolean onlyContainsAttributeCerts()
102    {
103        return onlyContainsAttributeCerts;
104    }
105
106    public DERObject toASN1Object()
107    {
108        return seq;
109    }
110}
111