001package org.apache.commons.ssl.org.bouncycastle.asn1.esf;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Null;
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.BERTags;
007import org.apache.commons.ssl.org.bouncycastle.asn1.DERNull;
008
009public class SignaturePolicyIdentifier
010    extends ASN1Object
011{
012    private SignaturePolicyId   signaturePolicyId;
013    private boolean             isSignaturePolicyImplied;
014
015    public static SignaturePolicyIdentifier getInstance(
016        Object  obj)
017    {
018        if (obj instanceof SignaturePolicyIdentifier)
019        {
020            return (SignaturePolicyIdentifier)obj;
021        }
022        else if (obj instanceof ASN1Null || hasEncodedTagValue(obj, BERTags.NULL))
023        {
024            return new SignaturePolicyIdentifier();
025        }
026        else if (obj != null)
027        {
028            return new SignaturePolicyIdentifier(SignaturePolicyId.getInstance(obj));
029        }
030
031        return null;
032    }
033
034    public SignaturePolicyIdentifier()
035    {
036        this.isSignaturePolicyImplied = true;
037    }
038
039    public SignaturePolicyIdentifier(
040        SignaturePolicyId signaturePolicyId)
041    {
042        this.signaturePolicyId = signaturePolicyId;
043        this.isSignaturePolicyImplied = false;
044    }
045
046    public SignaturePolicyId getSignaturePolicyId()
047    {
048        return signaturePolicyId;
049    }
050
051    public boolean isSignaturePolicyImplied()
052    {
053        return isSignaturePolicyImplied;
054    }
055
056    /**
057     * <pre>
058     * SignaturePolicyIdentifier ::= CHOICE{
059     *     SignaturePolicyId         SignaturePolicyId,
060     *     SignaturePolicyImplied    SignaturePolicyImplied }
061     *
062     * SignaturePolicyImplied ::= NULL
063     * </pre>
064     */
065    public ASN1Primitive toASN1Primitive()
066    {
067        if (isSignaturePolicyImplied)
068        {
069            return DERNull.INSTANCE;
070        }
071        else
072        {
073            return signaturePolicyId.toASN1Primitive();
074        }
075    }
076}