1 /**
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one or more
4 * contributor license agreements. See the NOTICE file distributed with
5 * this work for additional information regarding copyright ownership.
6 * The ASF licenses this file to You under the Apache License, Version 2.0
7 * (the "License"); you may not use this file except in compliance with
8 * the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package org.apache.geronimo.util.jce;
20
21 import java.io.ByteArrayInputStream;
22 import java.io.ByteArrayOutputStream;
23 import java.io.IOException;
24 import java.security.Principal;
25 import java.util.Hashtable;
26 import java.util.Vector;
27
28 import org.apache.geronimo.util.asn1.ASN1InputStream;
29 import org.apache.geronimo.util.asn1.ASN1Sequence;
30 import org.apache.geronimo.util.asn1.DEROutputStream;
31 import org.apache.geronimo.util.asn1.x509.X509Name;
32
33 public class X509Principal
34 extends X509Name
35 implements Principal
36 {
37 /**
38 * Constructor from an encoded byte array.
39 */
40 public X509Principal(
41 byte[] bytes)
42 throws IOException
43 {
44 super((ASN1Sequence)(new ASN1InputStream(new ByteArrayInputStream(bytes)).readObject()));
45 }
46
47 /**
48 * Constructor from an X509Name object.
49 */
50 public X509Principal(
51 X509Name name)
52 {
53 super((ASN1Sequence)name.getDERObject());
54 }
55
56 /**
57 * constructor from a table of attributes.
58 * <p>
59 * it's is assumed the table contains OID/String pairs.
60 */
61 public X509Principal(
62 Hashtable attributes)
63 {
64 super(attributes);
65 }
66
67 /**
68 * constructor from a table of attributes and a vector giving the
69 * specific ordering required for encoding or conversion to a string.
70 * <p>
71 * it's is assumed the table contains OID/String pairs.
72 */
73 public X509Principal(
74 Vector ordering,
75 Hashtable attributes)
76 {
77 super(ordering, attributes);
78 }
79
80 /**
81 * constructor from a vector of attribute values and a vector of OIDs.
82 */
83 public X509Principal(
84 Vector oids,
85 Vector values)
86 {
87 super(oids, values);
88 }
89
90 /**
91 * takes an X509 dir name as a string of the format "C=AU,ST=Victoria", or
92 * some such, converting it into an ordered set of name attributes.
93 */
94 public X509Principal(
95 String dirName)
96 {
97 super(dirName);
98 }
99
100 /**
101 * Takes an X509 dir name as a string of the format "C=AU,ST=Victoria", or
102 * some such, converting it into an ordered set of name attributes. If reverse
103 * is false the dir name will be encoded in the order of the (name, value) pairs
104 * presented, otherwise the encoding will start with the last (name, value) pair
105 * and work back.
106 */
107 public X509Principal(
108 boolean reverse,
109 String dirName)
110 {
111 super(reverse, 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. lookUp
117 * should provide a table of lookups, indexed by lowercase only strings and
118 * yielding a DERObjectIdentifier, other than that OID. and numeric oids
119 * will be processed automatically.
120 * <p>
121 * If reverse is true, create the encoded version of the sequence starting
122 * from the last element in the string.
123 */
124 public X509Principal(
125 boolean reverse,
126 Hashtable lookUp,
127 String dirName)
128 {
129 super(reverse, lookUp, dirName);
130 }
131
132 public String getName()
133 {
134 return this.toString();
135 }
136
137 /**
138 * return a DER encoded byte array representing this object
139 */
140 public byte[] getEncoded()
141 {
142 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
143 DEROutputStream dOut = new DEROutputStream(bOut);
144
145 try
146 {
147 dOut.writeObject(this);
148 }
149 catch (IOException e)
150 {
151 throw new RuntimeException(e.toString());
152 }
153
154 return bOut.toByteArray();
155 }
156 }