001package org.apache.commons.ssl.org.bouncycastle.asn1.esf;
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.ASN1ObjectIdentifier;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009
010public class SignaturePolicyId
011    extends ASN1Object
012{
013    private ASN1ObjectIdentifier  sigPolicyId;
014    private OtherHashAlgAndValue sigPolicyHash;
015    private SigPolicyQualifiers  sigPolicyQualifiers;
016
017
018    public static SignaturePolicyId getInstance(
019        Object obj)
020    {
021        if (obj instanceof SignaturePolicyId)
022        {
023            return (SignaturePolicyId)obj;
024        }
025        else if (obj != null)
026        {
027            return new SignaturePolicyId(ASN1Sequence.getInstance(obj));
028        }
029
030        return null;
031    }
032
033    private SignaturePolicyId(
034        ASN1Sequence seq)
035    {
036        if (seq.size() != 2 && seq.size() != 3)
037        {
038            throw new IllegalArgumentException("Bad sequence size: " + seq.size());
039        }
040
041        sigPolicyId = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0));
042        sigPolicyHash = OtherHashAlgAndValue.getInstance(seq.getObjectAt(1));
043
044        if (seq.size() == 3)
045        {
046            sigPolicyQualifiers = SigPolicyQualifiers.getInstance(seq.getObjectAt(2));
047        }
048    }
049
050    public SignaturePolicyId(
051        ASN1ObjectIdentifier   sigPolicyIdentifier,
052        OtherHashAlgAndValue  sigPolicyHash)
053    {
054        this(sigPolicyIdentifier, sigPolicyHash, null);
055    }
056
057    public SignaturePolicyId(
058        ASN1ObjectIdentifier   sigPolicyId,
059        OtherHashAlgAndValue  sigPolicyHash,
060        SigPolicyQualifiers   sigPolicyQualifiers)
061    {
062        this.sigPolicyId = sigPolicyId;
063        this.sigPolicyHash = sigPolicyHash;
064        this.sigPolicyQualifiers = sigPolicyQualifiers;
065    }
066
067    public ASN1ObjectIdentifier getSigPolicyId()
068    {
069        return new ASN1ObjectIdentifier(sigPolicyId.getId());
070    }
071
072    public OtherHashAlgAndValue getSigPolicyHash()
073    {
074        return sigPolicyHash;
075    }
076
077    public SigPolicyQualifiers getSigPolicyQualifiers()
078    {
079        return sigPolicyQualifiers;
080    }
081
082    /**
083     * <pre>
084     * SignaturePolicyId ::= SEQUENCE {
085     *     sigPolicyId SigPolicyId,
086     *     sigPolicyHash SigPolicyHash,
087     *     sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL}
088     * </pre>
089     */
090    public ASN1Primitive toASN1Primitive()
091    {
092        ASN1EncodableVector  v = new ASN1EncodableVector();
093
094        v.add(sigPolicyId);
095        v.add(sigPolicyHash);
096        if (sigPolicyQualifiers != null)
097        {
098            v.add(sigPolicyQualifiers);
099        }
100
101        return new DERSequence(v);
102    }
103}