001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice;
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.ASN1TaggedObject;
007import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
008import org.apache.commons.ssl.org.bouncycastle.asn1.crmf.EncryptedValue;
009
010public class CertOrEncCert
011    extends ASN1Object
012    implements ASN1Choice
013{
014    private CMPCertificate certificate;
015    private EncryptedValue encryptedCert;
016
017    private CertOrEncCert(ASN1TaggedObject tagged)
018    {
019        if (tagged.getTagNo() == 0)
020        {
021            certificate = CMPCertificate.getInstance(tagged.getObject());
022        }
023        else if (tagged.getTagNo() == 1)
024        {
025            encryptedCert = EncryptedValue.getInstance(tagged.getObject());
026        }
027        else
028        {
029            throw new IllegalArgumentException("unknown tag: " + tagged.getTagNo());
030        }
031    }
032
033    public static CertOrEncCert getInstance(Object o)
034    {
035        if (o instanceof CertOrEncCert)
036        {
037            return (CertOrEncCert)o;
038        }
039
040        if (o instanceof ASN1TaggedObject)
041        {
042            return new CertOrEncCert((ASN1TaggedObject)o);
043        }
044
045        return null;
046    }
047
048    public CertOrEncCert(CMPCertificate certificate)
049    {
050        if (certificate == null)
051        {
052            throw new IllegalArgumentException("'certificate' cannot be null");
053        }
054
055        this.certificate = certificate;
056    }
057
058    public CertOrEncCert(EncryptedValue encryptedCert)
059    {
060        if (encryptedCert == null)
061        {
062            throw new IllegalArgumentException("'encryptedCert' cannot be null");
063        }
064
065        this.encryptedCert = encryptedCert;
066    }
067
068    public CMPCertificate getCertificate()
069    {
070        return certificate;
071    }
072
073    public EncryptedValue getEncryptedCert()
074    {
075        return encryptedCert;
076    }
077
078    /**
079     * <pre>
080     * CertOrEncCert ::= CHOICE {
081     *                      certificate     [0] CMPCertificate,
082     *                      encryptedCert   [1] EncryptedValue
083     *           }
084     * </pre>
085     * @return a basic ASN.1 object representation.
086     */
087    public ASN1Primitive toASN1Primitive()
088    {
089        if (certificate != null)
090        {
091            return new DERTaggedObject(true, 0, certificate);
092        }
093
094        return new DERTaggedObject(true, 1, encryptedCert);
095    }
096}