V2Form.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
1package org.bouncycastle.asn1.x509;
2
3import org.bouncycastle.asn1.ASN1EncodableVector;
4import org.bouncycastle.asn1.ASN1Object;
5import org.bouncycastle.asn1.ASN1Primitive;
6import org.bouncycastle.asn1.ASN1Sequence;
7import org.bouncycastle.asn1.ASN1TaggedObject;
8import org.bouncycastle.asn1.DERSequence;
9import org.bouncycastle.asn1.DERTaggedObject;
10
11public class V2Form
12    extends ASN1Object
13{
14    GeneralNames        issuerName;
15    IssuerSerial        baseCertificateID;
16    ObjectDigestInfo    objectDigestInfo;
17
18    public static V2Form getInstance(
19        ASN1TaggedObject obj,
20        boolean          explicit)
21    {
22        return getInstance(ASN1Sequence.getInstance(obj, explicit));
23    }
24
25    public static V2Form getInstance(
26        Object  obj)
27    {
28        if (obj instanceof V2Form)
29        {
30            return (V2Form)obj;
31        }
32        else if (obj != null)
33        {
34            return new V2Form(ASN1Sequence.getInstance(obj));
35        }
36
37        return null;
38    }
39
40    public V2Form(
41        GeneralNames    issuerName)
42    {
43        this(issuerName, null, null);
44    }
45
46    public V2Form(
47        GeneralNames    issuerName,
48        IssuerSerial    baseCertificateID)
49    {
50        this(issuerName, baseCertificateID, null);
51    }
52
53    public V2Form(
54        GeneralNames    issuerName,
55        ObjectDigestInfo objectDigestInfo)
56    {
57        this(issuerName, null, objectDigestInfo);
58    }
59
60    public V2Form(
61        GeneralNames    issuerName,
62        IssuerSerial    baseCertificateID,
63        ObjectDigestInfo objectDigestInfo)
64    {
65        this.issuerName = issuerName;
66        this.baseCertificateID = baseCertificateID;
67        this.objectDigestInfo = objectDigestInfo;
68    }
69
70    /**
71     * @deprecated use getInstance().
72     */
73    public V2Form(
74        ASN1Sequence seq)
75    {
76        if (seq.size() > 3)
77        {
78            throw new IllegalArgumentException("Bad sequence size: " + seq.size());
79        }
80
81        int    index = 0;
82
83        if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject))
84        {
85            index++;
86            this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0));
87        }
88
89        for (int i = index; i != seq.size(); i++)
90        {
91            ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
92            if (o.getTagNo() == 0)
93            {
94                baseCertificateID = IssuerSerial.getInstance(o, false);
95            }
96            else if (o.getTagNo() == 1)
97            {
98                objectDigestInfo = ObjectDigestInfo.getInstance(o, false);
99            }
100            else
101            {
102                throw new IllegalArgumentException("Bad tag number: "
103                        + o.getTagNo());
104            }
105        }
106    }
107
108    public GeneralNames getIssuerName()
109    {
110        return issuerName;
111    }
112
113    public IssuerSerial getBaseCertificateID()
114    {
115        return baseCertificateID;
116    }
117
118    public ObjectDigestInfo getObjectDigestInfo()
119    {
120        return objectDigestInfo;
121    }
122
123    /**
124     * Produce an object suitable for an ASN1OutputStream.
125     * <pre>
126     *  V2Form ::= SEQUENCE {
127     *       issuerName            GeneralNames  OPTIONAL,
128     *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
129     *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
130     *         -- issuerName MUST be present in this profile
131     *         -- baseCertificateID and objectDigestInfo MUST NOT
132     *         -- be present in this profile
133     *  }
134     * </pre>
135     */
136    public ASN1Primitive toASN1Primitive()
137    {
138        ASN1EncodableVector  v = new ASN1EncodableVector();
139
140        if (issuerName != null)
141        {
142            v.add(issuerName);
143        }
144
145        if (baseCertificateID != null)
146        {
147            v.add(new DERTaggedObject(false, 0, baseCertificateID));
148        }
149
150        if (objectDigestInfo != null)
151        {
152            v.add(new DERTaggedObject(false, 1, objectDigestInfo));
153        }
154
155        return new DERSequence(v);
156    }
157}
158