1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Enumeration; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERTaggedObject; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class NameConstraints 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 1670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom private GeneralSubtree[] permitted, excluded; 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static NameConstraints getInstance(Object obj) 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (obj instanceof NameConstraints) 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return (NameConstraints)obj; 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (obj != null) 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new NameConstraints(ASN1Sequence.getInstance(obj)); 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return null; 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private NameConstraints(ASN1Sequence seq) 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Enumeration e = seq.getObjects(); 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam while (e.hasMoreElements()) 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam switch (o.getTagNo()) 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 4070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom case 0: 4170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom permitted = createArray(ASN1Sequence.getInstance(o, false)); 4270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom break; 4370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom case 1: 4470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom excluded = createArray(ASN1Sequence.getInstance(o, false)); 4570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom break; 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Constructor from a given details. 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <p> 5470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom * permitted and excluded are arrays of GeneralSubtree objects. 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param permitted 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Permitted subtrees 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param excluded 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Excludes subtrees 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public NameConstraints( 6270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom GeneralSubtree[] permitted, 6370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom GeneralSubtree[] excluded) 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (permitted != null) 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 6770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom this.permitted = permitted; 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 6970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (excluded != null) 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 7270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom this.excluded = excluded; 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 7670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom private GeneralSubtree[] createArray(ASN1Sequence subtree) 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 7870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom GeneralSubtree[] ar = new GeneralSubtree[subtree.size()]; 7970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 8070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom for (int i = 0; i != ar.length; i++) 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 8270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom ar[i] = GeneralSubtree.getInstance(subtree.getObjectAt(i)); 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 8470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 8570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom return ar; 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 8870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom public GeneralSubtree[] getPermittedSubtrees() 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return permitted; 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 9370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom public GeneralSubtree[] getExcludedSubtrees() 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return excluded; 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 1024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 10670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom if (permitted != null) 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 10870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom v.add(new DERTaggedObject(false, 0, new DERSequence(permitted))); 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 11170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom if (excluded != null) 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 11370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom v.add(new DERTaggedObject(false, 1, new DERSequence(excluded))); 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 119