1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.jce; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.IOException; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.Principal; 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Hashtable; 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Vector; 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Encoding; 96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1InputStream; 106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Sequence; 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x509.X509Name; 136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom/** 15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * a general extension of X509Name with a couple of extra methods and 16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * constructors. 17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * <p> 18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Objects of this type can be created from certificates and CRLs using the 19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * PrincipalUtil class. 20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * </p> 21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @see org.bouncycastle.jce.PrincipalUtil 225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @deprecated use the X500Name class. 23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class X509Principal 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam extends X509Name 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam implements Principal 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private static ASN1Sequence readSequence( 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1InputStream aIn) 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throws IOException 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam try 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return ASN1Sequence.getInstance(aIn.readObject()); 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam catch (IllegalArgumentException e) 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IOException("not an ASN.1 Sequence: " + e); 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Constructor from an encoded byte array. 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] bytes) 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throws IOException 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(readSequence(new ASN1InputStream(bytes))); 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Constructor from an X509Name object. 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam X509Name name) 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super((ASN1Sequence)name.toASN1Primitive()); 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * Constructor from an X509Name object. 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public X509Principal( 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom X500Name name) 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super((ASN1Sequence)name.toASN1Primitive()); 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * constructor from a table of attributes. 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <p> 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * it's is assumed the table contains OID/String pairs. 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Hashtable attributes) 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(attributes); 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * constructor from a table of attributes and a vector giving the 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * specific ordering required for encoding or conversion to a string. 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <p> 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * it's is assumed the table contains OID/String pairs. 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Vector ordering, 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Hashtable attributes) 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(ordering, attributes); 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * constructor from a vector of attribute values and a vector of OIDs. 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Vector oids, 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Vector values) 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(oids, values); 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * takes an X509 dir name as a string of the format "C=AU,ST=Victoria", or 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * some such, converting it into an ordered set of name attributes. 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String dirName) 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(dirName); 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Takes an X509 dir name as a string of the format "C=AU,ST=Victoria", or 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * some such, converting it into an ordered set of name attributes. If reverse 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * is false the dir name will be encoded in the order of the (name, value) pairs 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * presented, otherwise the encoding will start with the last (name, value) pair 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * and work back. 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean reverse, 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String dirName) 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(reverse, dirName); 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * some such, converting it into an ordered set of name attributes. lookUp 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * should provide a table of lookups, indexed by lowercase only strings and 132d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * yielding a ASN1ObjectIdentifier, other than that OID. and numeric oids 133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * will be processed automatically. 134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <p> 135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * If reverse is true, create the encoded version of the sequence starting 136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * from the last element in the string. 137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public X509Principal( 139b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean reverse, 140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Hashtable lookUp, 141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String dirName) 142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(reverse, lookUp, dirName); 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 145b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 146b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String getName() 147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 148b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return this.toString(); 149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return a DER encoded byte array representing this object 153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public byte[] getEncoded() 155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam try 157b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 1584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return this.getEncoded(ASN1Encoding.DER); 159b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 160b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam catch (IOException e) 161b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 162b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new RuntimeException(e.toString()); 163b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 164b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 165b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 166