1 package org.bouncycastle.asn1.ocsp;
2 
3 import org.bouncycastle.asn1.ASN1EncodableVector;
4 import org.bouncycastle.asn1.ASN1GeneralizedTime;
5 import org.bouncycastle.asn1.ASN1Object;
6 import org.bouncycastle.asn1.ASN1Primitive;
7 import org.bouncycastle.asn1.ASN1Sequence;
8 import org.bouncycastle.asn1.ASN1TaggedObject;
9 import org.bouncycastle.asn1.DERSequence;
10 import org.bouncycastle.asn1.DERTaggedObject;
11 import org.bouncycastle.asn1.x509.Extensions;
12 import org.bouncycastle.asn1.x509.X509Extensions;
13 
14 public class SingleResponse
15     extends ASN1Object
16 {
17     private CertID              certID;
18     private CertStatus          certStatus;
19     private ASN1GeneralizedTime  thisUpdate;
20     private ASN1GeneralizedTime  nextUpdate;
21     private Extensions      singleExtensions;
22 
23     /**
24      * @deprecated use method taking ASN1GeneralizedTime and Extensions
25      * @param certID
26      * @param certStatus
27      * @param thisUpdate
28      * @param nextUpdate
29      * @param singleExtensions
30      */
SingleResponse( CertID certID, CertStatus certStatus, ASN1GeneralizedTime thisUpdate, ASN1GeneralizedTime nextUpdate, X509Extensions singleExtensions)31     public SingleResponse(
32         CertID              certID,
33         CertStatus          certStatus,
34         ASN1GeneralizedTime thisUpdate,
35         ASN1GeneralizedTime nextUpdate,
36         X509Extensions singleExtensions)
37     {
38         this(certID, certStatus, thisUpdate, nextUpdate, Extensions.getInstance(singleExtensions));
39     }
40 
SingleResponse( CertID certID, CertStatus certStatus, ASN1GeneralizedTime thisUpdate, ASN1GeneralizedTime nextUpdate, Extensions singleExtensions)41     public SingleResponse(
42         CertID              certID,
43         CertStatus          certStatus,
44         ASN1GeneralizedTime thisUpdate,
45         ASN1GeneralizedTime nextUpdate,
46         Extensions          singleExtensions)
47     {
48         this.certID = certID;
49         this.certStatus = certStatus;
50         this.thisUpdate = thisUpdate;
51         this.nextUpdate = nextUpdate;
52         this.singleExtensions = singleExtensions;
53     }
54 
SingleResponse( ASN1Sequence seq)55     private SingleResponse(
56         ASN1Sequence    seq)
57     {
58         this.certID = CertID.getInstance(seq.getObjectAt(0));
59         this.certStatus = CertStatus.getInstance(seq.getObjectAt(1));
60         this.thisUpdate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(2));
61 
62         if (seq.size() > 4)
63         {
64             this.nextUpdate = ASN1GeneralizedTime.getInstance(
65                                 (ASN1TaggedObject)seq.getObjectAt(3), true);
66             this.singleExtensions = Extensions.getInstance(
67                                 (ASN1TaggedObject)seq.getObjectAt(4), true);
68         }
69         else if (seq.size() > 3)
70         {
71             ASN1TaggedObject    o = (ASN1TaggedObject)seq.getObjectAt(3);
72 
73             if (o.getTagNo() == 0)
74             {
75                 this.nextUpdate = ASN1GeneralizedTime.getInstance(o, true);
76             }
77             else
78             {
79                 this.singleExtensions = Extensions.getInstance(o, true);
80             }
81         }
82     }
83 
getInstance( ASN1TaggedObject obj, boolean explicit)84     public static SingleResponse getInstance(
85         ASN1TaggedObject obj,
86         boolean          explicit)
87     {
88         return getInstance(ASN1Sequence.getInstance(obj, explicit));
89     }
90 
getInstance( Object obj)91     public static SingleResponse getInstance(
92         Object  obj)
93     {
94         if (obj instanceof SingleResponse)
95         {
96             return (SingleResponse)obj;
97         }
98         else if (obj != null)
99         {
100             return new SingleResponse(ASN1Sequence.getInstance(obj));
101         }
102 
103         return null;
104     }
105 
getCertID()106     public CertID getCertID()
107     {
108         return certID;
109     }
110 
getCertStatus()111     public CertStatus getCertStatus()
112     {
113         return certStatus;
114     }
115 
getThisUpdate()116     public ASN1GeneralizedTime getThisUpdate()
117     {
118         return thisUpdate;
119     }
120 
getNextUpdate()121     public ASN1GeneralizedTime getNextUpdate()
122     {
123         return nextUpdate;
124     }
125 
getSingleExtensions()126     public Extensions getSingleExtensions()
127     {
128         return singleExtensions;
129     }
130 
131     /**
132      * Produce an object suitable for an ASN1OutputStream.
133      * <pre>
134      *  SingleResponse ::= SEQUENCE {
135      *          certID                       CertID,
136      *          certStatus                   CertStatus,
137      *          thisUpdate                   GeneralizedTime,
138      *          nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
139      *          singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
140      * </pre>
141      */
toASN1Primitive()142     public ASN1Primitive toASN1Primitive()
143     {
144         ASN1EncodableVector v = new ASN1EncodableVector(5);
145 
146         v.add(certID);
147         v.add(certStatus);
148         v.add(thisUpdate);
149 
150         if (nextUpdate != null)
151         {
152             v.add(new DERTaggedObject(true, 0, nextUpdate));
153         }
154 
155         if (singleExtensions != null)
156         {
157             v.add(new DERTaggedObject(true, 1, singleExtensions));
158         }
159 
160         return new DERSequence(v);
161     }
162 }
163