Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import java.math.BigInteger;
      4 
      5 import org.bouncycastle.asn1.ASN1EncodableVector;
      6 import org.bouncycastle.asn1.ASN1Integer;
      7 import org.bouncycastle.asn1.ASN1Object;
      8 import org.bouncycastle.asn1.ASN1Primitive;
      9 import org.bouncycastle.asn1.ASN1Sequence;
     10 import org.bouncycastle.asn1.ASN1TaggedObject;
     11 import org.bouncycastle.asn1.DERSequence;
     12 import org.bouncycastle.asn1.DERTaggedObject;
     13 
     14 /**
     15  * PKIX RFC 5280
     16  * <pre>
     17  * id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
     18  *
     19  * PolicyConstraints ::= SEQUENCE {
     20  *      requireExplicitPolicy           [0] SkipCerts OPTIONAL,
     21  *      inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
     22  *
     23  * SkipCerts ::= INTEGER (0..MAX)
     24  * </pre>
     25  */
     26 public class PolicyConstraints
     27     extends ASN1Object
     28 {
     29     private BigInteger requireExplicitPolicyMapping;
     30     private BigInteger inhibitPolicyMapping;
     31 
     32     public PolicyConstraints(BigInteger requireExplicitPolicyMapping, BigInteger inhibitPolicyMapping)
     33     {
     34         this.requireExplicitPolicyMapping = requireExplicitPolicyMapping;
     35         this.inhibitPolicyMapping = inhibitPolicyMapping;
     36     }
     37 
     38     private PolicyConstraints(ASN1Sequence seq)
     39     {
     40         for (int i = 0; i != seq.size(); i++)
     41         {
     42             ASN1TaggedObject to = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
     43 
     44             if (to.getTagNo() == 0)
     45             {
     46                 requireExplicitPolicyMapping = ASN1Integer.getInstance(to, false).getValue();
     47             }
     48             else if (to.getTagNo() == 1)
     49             {
     50                 inhibitPolicyMapping = ASN1Integer.getInstance(to, false).getValue();
     51             }
     52             else
     53             {
     54                 throw new IllegalArgumentException("Unknown tag encountered.");
     55             }
     56         }
     57     }
     58 
     59     public static PolicyConstraints getInstance(
     60         Object  obj)
     61     {
     62         if (obj instanceof PolicyConstraints)
     63         {
     64             return (PolicyConstraints)obj;
     65         }
     66 
     67         if (obj != null)
     68         {
     69             return new PolicyConstraints(ASN1Sequence.getInstance(obj));
     70         }
     71 
     72         return null;
     73     }
     74 
     75     public static PolicyConstraints fromExtensions(Extensions extensions)
     76     {
     77         return PolicyConstraints.getInstance(extensions.getExtensionParsedValue(Extension.policyConstraints));
     78     }
     79 
     80     public BigInteger getRequireExplicitPolicyMapping()
     81     {
     82         return requireExplicitPolicyMapping;
     83     }
     84 
     85     public BigInteger getInhibitPolicyMapping()
     86     {
     87         return inhibitPolicyMapping;
     88     }
     89 
     90     public ASN1Primitive toASN1Primitive()
     91     {
     92         ASN1EncodableVector v = new ASN1EncodableVector();
     93 
     94         if (requireExplicitPolicyMapping != null)
     95         {
     96             v.add(new DERTaggedObject(false,0, new ASN1Integer(requireExplicitPolicyMapping)));
     97         }
     98 
     99         if (inhibitPolicyMapping != null)
    100         {
    101             v.add(new DERTaggedObject(false, 1, new ASN1Integer(inhibitPolicyMapping)));
    102         }
    103 
    104         return new DERSequence(v);
    105     }
    106 }
    107