001package org.apache.commons.ssl.org.bouncycastle.asn1.dvcs;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
013import org.apache.commons.ssl.org.bouncycastle.asn1.cmp.PKIStatusInfo;
014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.DigestInfo;
015import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions;
016import org.apache.commons.ssl.org.bouncycastle.asn1.x509.PolicyInformation;
017
018/**
019 * <pre>
020 *     DVCSCertInfo::= SEQUENCE  {
021 *         version             Integer DEFAULT 1 ,
022 *         dvReqInfo           DVCSRequestInformation,
023 *         messageImprint      DigestInfo,
024 *         serialNumber        Integer,
025 *         responseTime        DVCSTime,
026 *         dvStatus            [0] PKIStatusInfo OPTIONAL,
027 *         policy              [1] PolicyInformation OPTIONAL,
028 *         reqSignature        [2] SignerInfos  OPTIONAL,
029 *         certs               [3] SEQUENCE SIZE (1..MAX) OF
030 *                                 TargetEtcChain OPTIONAL,
031 *         extensions          Extensions OPTIONAL
032 *     }
033 * </pre>
034 */
035
036public class DVCSCertInfo
037    extends ASN1Object
038{
039
040    private int version = DEFAULT_VERSION;
041    private DVCSRequestInformation dvReqInfo;
042    private DigestInfo messageImprint;
043    private ASN1Integer serialNumber;
044    private DVCSTime responseTime;
045    private PKIStatusInfo dvStatus;
046    private PolicyInformation policy;
047    private ASN1Set reqSignature;
048    private ASN1Sequence certs;
049    private Extensions extensions;
050
051    private static final int DEFAULT_VERSION = 1;
052    private static final int TAG_DV_STATUS = 0;
053    private static final int TAG_POLICY = 1;
054    private static final int TAG_REQ_SIGNATURE = 2;
055    private static final int TAG_CERTS = 3;
056
057    public DVCSCertInfo(
058        DVCSRequestInformation dvReqInfo,
059        DigestInfo messageImprint,
060        ASN1Integer serialNumber,
061        DVCSTime responseTime)
062    {
063        this.dvReqInfo = dvReqInfo;
064        this.messageImprint = messageImprint;
065        this.serialNumber = serialNumber;
066        this.responseTime = responseTime;
067    }
068
069    private DVCSCertInfo(ASN1Sequence seq)
070    {
071        int i = 0;
072        ASN1Encodable x = seq.getObjectAt(i++);
073        try
074        {
075            ASN1Integer encVersion = ASN1Integer.getInstance(x);
076            this.version = encVersion.getValue().intValue();
077            x = seq.getObjectAt(i++);
078        }
079        catch (IllegalArgumentException e)
080        {
081        }
082
083        this.dvReqInfo = DVCSRequestInformation.getInstance(x);
084        x = seq.getObjectAt(i++);
085        this.messageImprint = DigestInfo.getInstance(x);
086        x = seq.getObjectAt(i++);
087        this.serialNumber = ASN1Integer.getInstance(x);
088        x = seq.getObjectAt(i++);
089        this.responseTime = DVCSTime.getInstance(x);
090
091        while (i < seq.size())
092        {
093
094            x = seq.getObjectAt(i++);
095
096            try
097            {
098                ASN1TaggedObject t = ASN1TaggedObject.getInstance(x);
099                int tagNo = t.getTagNo();
100
101                switch (tagNo)
102                {
103                case TAG_DV_STATUS:
104                    this.dvStatus = PKIStatusInfo.getInstance(t, false);
105                    break;
106                case TAG_POLICY:
107                    this.policy = PolicyInformation.getInstance(ASN1Sequence.getInstance(t, false));
108                    break;
109                case TAG_REQ_SIGNATURE:
110                    this.reqSignature = ASN1Set.getInstance(t, false);
111                    break;
112                case TAG_CERTS:
113                    this.certs = ASN1Sequence.getInstance(t, false);
114                    break;
115                }
116
117                continue;
118
119            }
120            catch (IllegalArgumentException e)
121            {
122            }
123
124            try
125            {
126                this.extensions = Extensions.getInstance(x);
127            }
128            catch (IllegalArgumentException e)
129            {
130            }
131
132        }
133
134    }
135
136    public static DVCSCertInfo getInstance(Object obj)
137    {
138        if (obj instanceof DVCSCertInfo)
139        {
140            return (DVCSCertInfo)obj;
141        }
142        else if (obj != null)
143        {
144            return new DVCSCertInfo(ASN1Sequence.getInstance(obj));
145        }
146
147        return null;
148    }
149
150    public static DVCSCertInfo getInstance(
151        ASN1TaggedObject obj,
152        boolean explicit)
153    {
154        return getInstance(ASN1Sequence.getInstance(obj, explicit));
155    }
156
157    public ASN1Primitive toASN1Primitive()
158    {
159
160        ASN1EncodableVector v = new ASN1EncodableVector();
161
162        if (version != DEFAULT_VERSION)
163        {
164            v.add(new ASN1Integer(version));
165        }
166        v.add(dvReqInfo);
167        v.add(messageImprint);
168        v.add(serialNumber);
169        v.add(responseTime);
170        if (dvStatus != null)
171        {
172            v.add(new DERTaggedObject(false, TAG_DV_STATUS, dvStatus));
173        }
174        if (policy != null)
175        {
176            v.add(new DERTaggedObject(false, TAG_POLICY, policy));
177        }
178        if (reqSignature != null)
179        {
180            v.add(new DERTaggedObject(false, TAG_REQ_SIGNATURE, reqSignature));
181        }
182        if (certs != null)
183        {
184            v.add(new DERTaggedObject(false, TAG_CERTS, certs));
185        }
186        if (extensions != null)
187        {
188            v.add(extensions);
189        }
190
191        return new DERSequence(v);
192    }
193
194    public String toString()
195    {
196        StringBuffer s = new StringBuffer();
197
198        s.append("DVCSCertInfo {\n");
199
200        if (version != DEFAULT_VERSION)
201        {
202            s.append("version: " + version + "\n");
203        }
204        s.append("dvReqInfo: " + dvReqInfo + "\n");
205        s.append("messageImprint: " + messageImprint + "\n");
206        s.append("serialNumber: " + serialNumber + "\n");
207        s.append("responseTime: " + responseTime + "\n");
208        if (dvStatus != null)
209        {
210            s.append("dvStatus: " + dvStatus + "\n");
211        }
212        if (policy != null)
213        {
214            s.append("policy: " + policy + "\n");
215        }
216        if (reqSignature != null)
217        {
218            s.append("reqSignature: " + reqSignature + "\n");
219        }
220        if (certs != null)
221        {
222            s.append("certs: " + certs + "\n");
223        }
224        if (extensions != null)
225        {
226            s.append("extensions: " + extensions + "\n");
227        }
228
229        s.append("}\n");
230        return s.toString();
231    }
232
233    public int getVersion()
234    {
235        return version;
236    }
237
238    private void setVersion(int version)
239    {
240        this.version = version;
241    }
242
243    public DVCSRequestInformation getDvReqInfo()
244    {
245        return dvReqInfo;
246    }
247
248    private void setDvReqInfo(DVCSRequestInformation dvReqInfo)
249    {
250        this.dvReqInfo = dvReqInfo;
251    }
252
253    public DigestInfo getMessageImprint()
254    {
255        return messageImprint;
256    }
257
258    private void setMessageImprint(DigestInfo messageImprint)
259    {
260        this.messageImprint = messageImprint;
261    }
262
263    public ASN1Integer getSerialNumber()
264    {
265        return serialNumber;
266    }
267
268    public DVCSTime getResponseTime()
269    {
270        return responseTime;
271    }
272
273    public PKIStatusInfo getDvStatus()
274    {
275        return dvStatus;
276    }
277
278    public PolicyInformation getPolicy()
279    {
280        return policy;
281    }
282
283    public ASN1Set getReqSignature()
284    {
285        return reqSignature;
286    }
287
288    public TargetEtcChain[] getCerts()
289    {
290        if (certs != null)
291        {
292            return TargetEtcChain.arrayFromSequence(certs);
293        }
294
295        return null;
296    }
297
298    public Extensions getExtensions()
299    {
300        return extensions;
301    }
302}