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