001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
010
011public class CertRepMessage
012    extends ASN1Object
013{
014    private ASN1Sequence caPubs;
015    private ASN1Sequence response;
016
017    private CertRepMessage(ASN1Sequence seq)
018    {
019        int index = 0;
020
021        if (seq.size() > 1)
022        {
023            caPubs = ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(index++), true);
024        }
025
026        response = ASN1Sequence.getInstance(seq.getObjectAt(index));
027    }
028
029    public static CertRepMessage getInstance(Object o)
030    {
031        if (o instanceof CertRepMessage)
032        {
033            return (CertRepMessage)o;
034        }
035
036        if (o != null)
037        {
038            return new CertRepMessage(ASN1Sequence.getInstance(o));
039        }
040
041        return null;
042    }
043
044    public CertRepMessage(CMPCertificate[] caPubs, CertResponse[] response)
045    {
046        if (response == null)
047        {
048            throw new IllegalArgumentException("'response' cannot be null");
049        }
050
051        if (caPubs != null)
052        {
053            ASN1EncodableVector v = new ASN1EncodableVector();
054            for (int i = 0; i < caPubs.length; i++)
055            {
056                v.add(caPubs[i]);
057            }
058            this.caPubs = new DERSequence(v);
059        }
060
061        {
062            ASN1EncodableVector v = new ASN1EncodableVector();
063            for (int i = 0; i < response.length; i++)
064            {
065                v.add(response[i]);
066            }
067            this.response = new DERSequence(v);
068        }
069    }
070
071    public CMPCertificate[] getCaPubs()
072    {
073        if (caPubs == null)
074        {
075            return null;
076        }
077
078        CMPCertificate[] results = new CMPCertificate[caPubs.size()];
079
080        for (int i = 0; i != results.length; i++)
081        {
082            results[i] = CMPCertificate.getInstance(caPubs.getObjectAt(i));
083        }
084
085        return results;
086    }
087
088    public CertResponse[] getResponse()
089    {
090        CertResponse[] results = new CertResponse[response.size()];
091
092        for (int i = 0; i != results.length; i++)
093        {
094            results[i] = CertResponse.getInstance(response.getObjectAt(i));
095        }
096
097        return results;
098    }
099
100    /**
101     * <pre>
102     * CertRepMessage ::= SEQUENCE {
103     *                          caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
104     *                                                                             OPTIONAL,
105     *                          response         SEQUENCE OF CertResponse
106     * }
107     * </pre>
108     * @return a basic ASN.1 object representation.
109     */
110    public ASN1Primitive toASN1Primitive()
111    {
112        ASN1EncodableVector v = new ASN1EncodableVector();
113
114        if (caPubs != null)
115        {
116            v.add(new DERTaggedObject(true, 1, caPubs));
117        }
118
119        v.add(response);
120
121        return new DERSequence(v);
122    }
123}