001package org.apache.commons.ssl.org.bouncycastle.asn1.x509;
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 PolicyInformation
011    extends ASN1Object
012{
013    private ASN1ObjectIdentifier   policyIdentifier;
014    private ASN1Sequence          policyQualifiers;
015
016    private PolicyInformation(
017        ASN1Sequence seq)
018    {
019        if (seq.size() < 1 || seq.size() > 2)
020        {
021            throw new IllegalArgumentException("Bad sequence size: "
022                    + seq.size());
023        }
024
025        policyIdentifier = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0));
026
027        if (seq.size() > 1)
028        {
029            policyQualifiers = ASN1Sequence.getInstance(seq.getObjectAt(1));
030        }
031    }
032
033    public PolicyInformation(
034        ASN1ObjectIdentifier policyIdentifier)
035    {
036        this.policyIdentifier = policyIdentifier;
037    }
038
039    public PolicyInformation(
040        ASN1ObjectIdentifier policyIdentifier,
041        ASN1Sequence        policyQualifiers)
042    {
043        this.policyIdentifier = policyIdentifier;
044        this.policyQualifiers = policyQualifiers;
045    }
046
047    public static PolicyInformation getInstance(
048        Object obj)
049    {
050        if (obj == null || obj instanceof PolicyInformation)
051        {
052            return (PolicyInformation)obj;
053        }
054
055        return new PolicyInformation(ASN1Sequence.getInstance(obj));
056    }
057
058    public ASN1ObjectIdentifier getPolicyIdentifier()
059    {
060        return policyIdentifier;
061    }
062    
063    public ASN1Sequence getPolicyQualifiers()
064    {
065        return policyQualifiers;
066    }
067    
068    /* 
069     * PolicyInformation ::= SEQUENCE {
070     *      policyIdentifier   CertPolicyId,
071     *      policyQualifiers   SEQUENCE SIZE (1..MAX) OF
072     *              PolicyQualifierInfo OPTIONAL }
073     */ 
074    public ASN1Primitive toASN1Primitive()
075    {
076        ASN1EncodableVector v = new ASN1EncodableVector();
077        
078        v.add(policyIdentifier);
079
080        if (policyQualifiers != null)
081        {
082            v.add(policyQualifiers);
083        }
084        
085        return new DERSequence(v);
086    }
087}