001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
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.crmf.CertId;
014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.CertificateList;
015
016public class RevRepContent
017    extends ASN1Object
018{
019    private ASN1Sequence status;
020    private ASN1Sequence revCerts;
021    private ASN1Sequence crls;
022
023    private RevRepContent(ASN1Sequence seq)
024    {
025        Enumeration en = seq.getObjects();
026
027        status = ASN1Sequence.getInstance(en.nextElement());
028        while (en.hasMoreElements())
029        {
030            ASN1TaggedObject tObj = ASN1TaggedObject.getInstance(en.nextElement());
031
032            if (tObj.getTagNo() == 0)
033            {
034                revCerts = ASN1Sequence.getInstance(tObj, true);
035            }
036            else
037            {
038                crls = ASN1Sequence.getInstance(tObj, true);
039            }
040        }
041    }
042
043    public static RevRepContent getInstance(Object o)
044    {
045        if (o instanceof RevRepContent)
046        {
047            return (RevRepContent)o;
048        }
049
050        if (o != null)
051        {
052            return new RevRepContent(ASN1Sequence.getInstance(o));
053        }
054
055        return null;
056    }
057
058    public PKIStatusInfo[] getStatus()
059    {
060        PKIStatusInfo[] results = new PKIStatusInfo[status.size()];
061
062        for (int i = 0; i != results.length; i++)
063        {
064            results[i] = PKIStatusInfo.getInstance(status.getObjectAt(i));
065        }
066
067        return results;
068    }
069
070    public CertId[] getRevCerts()
071    {
072        if (revCerts == null)
073        {
074            return null;
075        }
076
077        CertId[] results = new CertId[revCerts.size()];
078
079        for (int i = 0; i != results.length; i++)
080        {
081            results[i] = CertId.getInstance(revCerts.getObjectAt(i));
082        }
083
084        return results;
085    }
086
087    public CertificateList[] getCrls()
088    {
089        if (crls == null)
090        {
091            return null;
092        }
093
094        CertificateList[] results = new CertificateList[crls.size()];
095
096        for (int i = 0; i != results.length; i++)
097        {
098            results[i] = CertificateList.getInstance(crls.getObjectAt(i));
099        }
100
101        return results;
102    }
103
104    /**
105     * <pre>
106     * RevRepContent ::= SEQUENCE {
107     *        status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
108     *        -- in same order as was sent in RevReqContent
109     *        revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
110     *        -- IDs for which revocation was requested
111     *        -- (same order as status)
112     *        crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
113     *        -- the resulting CRLs (there may be more than one)
114     *   }
115     * </pre>
116     * @return a basic ASN.1 object representation.
117     */
118    public ASN1Primitive toASN1Primitive()
119    {
120        ASN1EncodableVector v = new ASN1EncodableVector();
121
122        v.add(status);
123
124        addOptional(v, 0, revCerts);
125        addOptional(v, 1, crls);
126
127        return new DERSequence(v);
128    }
129
130    private void addOptional(ASN1EncodableVector v, int tagNo, ASN1Encodable obj)
131    {
132        if (obj != null)
133        {
134            v.add(new DERTaggedObject(true, tagNo, obj));
135        }
136    }
137}