180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giropackage org.bouncycastle.asn1.x509; 280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport java.math.BigInteger; 480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1EncodableVector; 680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1Integer; 780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1Object; 880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1Primitive; 980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1Sequence; 1080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.ASN1TaggedObject; 1180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.DERSequence; 1280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giroimport org.bouncycastle.asn1.DERTaggedObject; 1380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 1480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro/** 1580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * PKIX RFC 5280 1680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * <pre> 1780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } 1880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * 1980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * PolicyConstraints ::= SEQUENCE { 2080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * requireExplicitPolicy [0] SkipCerts OPTIONAL, 2180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * inhibitPolicyMapping [1] SkipCerts OPTIONAL } 2280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * 2380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * SkipCerts ::= INTEGER (0..MAX) 2480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * </pre> 2580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro */ 2680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giropublic class PolicyConstraints 2780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro extends ASN1Object 2880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro{ 2980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro private BigInteger requireExplicitPolicyMapping; 3080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro private BigInteger inhibitPolicyMapping; 3180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 3280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public PolicyConstraints(BigInteger requireExplicitPolicyMapping, BigInteger inhibitPolicyMapping) 3380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 3480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro this.requireExplicitPolicyMapping = requireExplicitPolicyMapping; 3580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro this.inhibitPolicyMapping = inhibitPolicyMapping; 3680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 3780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 3880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro private PolicyConstraints(ASN1Sequence seq) 3980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 4080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro for (int i = 0; i != seq.size(); i++) 4180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 4280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro ASN1TaggedObject to = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); 4380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 4480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro if (to.getTagNo() == 0) 4580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 4680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro requireExplicitPolicyMapping = ASN1Integer.getInstance(to, false).getValue(); 4780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 4880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro else if (to.getTagNo() == 1) 4980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 5080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro inhibitPolicyMapping = ASN1Integer.getInstance(to, false).getValue(); 5180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 5280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro else 5380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 5480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro throw new IllegalArgumentException("Unknown tag encountered."); 5580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 5680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 5780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 5880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 5980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public static PolicyConstraints getInstance( 6080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro Object obj) 6180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 6280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro if (obj instanceof PolicyConstraints) 6380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 6480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return (PolicyConstraints)obj; 6580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 6680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 6780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro if (obj != null) 6880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 6980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return new PolicyConstraints(ASN1Sequence.getInstance(obj)); 7080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 7180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 7280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return null; 7380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 7480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 7580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public static PolicyConstraints fromExtensions(Extensions extensions) 7680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 7780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return PolicyConstraints.getInstance(extensions.getExtensionParsedValue(Extension.policyConstraints)); 7880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 7980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 8080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public BigInteger getRequireExplicitPolicyMapping() 8180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 8280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return requireExplicitPolicyMapping; 8380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 8480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 8580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public BigInteger getInhibitPolicyMapping() 8680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 8780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return inhibitPolicyMapping; 8880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 8980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 9080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public ASN1Primitive toASN1Primitive() 9180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 9280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro ASN1EncodableVector v = new ASN1EncodableVector(); 9380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 9480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro if (requireExplicitPolicyMapping != null) 9580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 96823ad5bac1616941ae772fe6b69560b49c89d7b3Adam Vartanian v.add(new DERTaggedObject(false,0, new ASN1Integer(requireExplicitPolicyMapping))); 9780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 9880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 9980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro if (inhibitPolicyMapping != null) 10080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro { 101823ad5bac1616941ae772fe6b69560b49c89d7b3Adam Vartanian v.add(new DERTaggedObject(false, 1, new ASN1Integer(inhibitPolicyMapping))); 10280261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 10380261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 10480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return new DERSequence(v); 10580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro } 10680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro} 107