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.DERSequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.crmf.CertTemplate;
009import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions;
010import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509Extensions;
011
012public class RevDetails
013    extends ASN1Object
014{
015    private CertTemplate certDetails;
016    private Extensions crlEntryDetails;
017
018    private RevDetails(ASN1Sequence seq)
019    {
020        certDetails = CertTemplate.getInstance(seq.getObjectAt(0));
021        if  (seq.size() > 1)
022        {
023            crlEntryDetails = Extensions.getInstance(seq.getObjectAt(1));
024        }
025    }
026
027    public static RevDetails getInstance(Object o)
028    {
029        if (o instanceof RevDetails)
030        {
031            return (RevDetails)o;
032        }
033
034        if (o != null)
035        {
036            return new RevDetails(ASN1Sequence.getInstance(o));
037        }
038
039        return null;
040    }
041
042    public RevDetails(CertTemplate certDetails)
043    {
044        this.certDetails = certDetails;
045    }
046
047    /**
048     * @deprecated use method taking Extensions
049     * @param certDetails
050     * @param crlEntryDetails
051     */
052    public RevDetails(CertTemplate certDetails, X509Extensions crlEntryDetails)
053    {
054        this.certDetails = certDetails;
055        this.crlEntryDetails = Extensions.getInstance(crlEntryDetails.toASN1Primitive());
056    }
057
058    public RevDetails(CertTemplate certDetails, Extensions crlEntryDetails)
059    {
060        this.certDetails = certDetails;
061        this.crlEntryDetails = crlEntryDetails;
062    }
063
064    public CertTemplate getCertDetails()
065    {
066        return certDetails;
067    }
068
069    public Extensions getCrlEntryDetails()
070    {
071        return crlEntryDetails;
072    }
073
074    /**
075     * <pre>
076     * RevDetails ::= SEQUENCE {
077     *                  certDetails         CertTemplate,
078     *                   -- allows requester to specify as much as they can about
079     *                   -- the cert. for which revocation is requested
080     *                   -- (e.g., for cases in which serialNumber is not available)
081     *                   crlEntryDetails     Extensions       OPTIONAL
082     *                   -- requested crlEntryExtensions
083     *             }
084     * </pre>
085     * @return a basic ASN.1 object representation.
086     */
087    public ASN1Primitive toASN1Primitive()
088    {
089        ASN1EncodableVector v = new ASN1EncodableVector();
090
091        v.add(certDetails);
092
093        if (crlEntryDetails != null)
094        {
095            v.add(crlEntryDetails);
096        }
097
098        return new DERSequence(v);
099    }
100}