1package org.bouncycastle.asn1.ocsp;
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 OCSPResponse
12    extends ASN1Object
13{
14    OCSPResponseStatus    responseStatus;
15    ResponseBytes        responseBytes;
16
17    public OCSPResponse(
18        OCSPResponseStatus  responseStatus,
19        ResponseBytes       responseBytes)
20    {
21        this.responseStatus = responseStatus;
22        this.responseBytes = responseBytes;
23    }
24
25    private OCSPResponse(
26        ASN1Sequence    seq)
27    {
28        responseStatus = OCSPResponseStatus.getInstance(seq.getObjectAt(0));
29
30        if (seq.size() == 2)
31        {
32            responseBytes = ResponseBytes.getInstance(
33                                (ASN1TaggedObject)seq.getObjectAt(1), true);
34        }
35    }
36
37    public static OCSPResponse getInstance(
38        ASN1TaggedObject obj,
39        boolean          explicit)
40    {
41        return getInstance(ASN1Sequence.getInstance(obj, explicit));
42    }
43
44    public static OCSPResponse getInstance(
45        Object  obj)
46    {
47        if (obj instanceof OCSPResponse)
48        {
49            return (OCSPResponse)obj;
50        }
51        else if (obj != null)
52        {
53            return new OCSPResponse(ASN1Sequence.getInstance(obj));
54        }
55
56        return null;
57    }
58
59    public OCSPResponseStatus getResponseStatus()
60    {
61        return responseStatus;
62    }
63
64    public ResponseBytes getResponseBytes()
65    {
66        return responseBytes;
67    }
68
69    /**
70     * Produce an object suitable for an ASN1OutputStream.
71     * <pre>
72     * OCSPResponse ::= SEQUENCE {
73     *     responseStatus         OCSPResponseStatus,
74     *     responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
75     * </pre>
76     */
77    public ASN1Primitive toASN1Primitive()
78    {
79        ASN1EncodableVector    v = new ASN1EncodableVector();
80
81        v.add(responseStatus);
82
83        if (responseBytes != null)
84        {
85            v.add(new DERTaggedObject(true, 0, responseBytes));
86        }
87
88        return new DERSequence(v);
89    }
90}
91