1package org.bouncycastle.asn1.x509; 2 3import java.math.BigInteger; 4 5import org.bouncycastle.asn1.ASN1EncodableVector; 6import org.bouncycastle.asn1.ASN1Integer; 7import org.bouncycastle.asn1.ASN1Object; 8import org.bouncycastle.asn1.ASN1Primitive; 9import org.bouncycastle.asn1.ASN1Sequence; 10import org.bouncycastle.asn1.ASN1TaggedObject; 11import org.bouncycastle.asn1.DERSequence; 12import 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 */ 26public 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