source: trunk/gcc/libjava/java/security/KeyFactory.java

Last change on this file was 2, checked in by bird, 22 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.4 KB
Line 
1/* KeyFactory.java --- Key Factory Class
2 Copyright (C) 1999 Free Software Foundation, Inc.
3
4This file is part of GNU Classpath.
5
6GNU Classpath is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU Classpath is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Classpath; see the file COPYING. If not, write to the
18Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1902111-1307 USA.
20
21Linking this library statically or dynamically with other modules is
22making a combined work based on this library. Thus, the terms and
23conditions of the GNU General Public License cover the whole
24combination.
25
26As a special exception, the copyright holders of this library give you
27permission to link this library with independent modules to produce an
28executable, regardless of the license terms of these independent
29modules, and to copy and distribute the resulting executable under
30terms of your choice, provided that you also meet, for each linked
31independent module, the terms and conditions of the license of that
32module. An independent module is a module which is not derived from
33or based on this library. If you modify this library, you may extend
34this exception to your version of the library, but you are not
35obligated to do so. If you do not wish to do so, delete this
36exception statement from your version. */
37
38package java.security;
39import java.security.spec.KeySpec;
40import java.security.spec.InvalidKeySpecException;
41
42/**
43 Key factories are used to convert keys (opaque cryptographic
44 keys of type Key) into key specifications (transparent
45 representations of the underlying key material).
46
47 Key factories are bi-directional. They allow a key class
48 to be converted into a key specification (key material) and
49 back again.
50
51 For example DSA public keys can be specified as
52 DSAPublicKeySpec or X509EncodedKeySpec. The key factory
53 translate these key specifications.
54
55 @since JDK 1.2
56 @author Mark Benvenuto
57 */
58public class KeyFactory
59{
60 private KeyFactorySpi keyFacSpi;
61 private Provider provider;
62 private String algorithm;
63
64 /**
65 Constructs a new keyFactory with the specified parameters.
66
67 @param keyFacSpi Key Factory SPI to use
68 @param provider the provider of the Key Factory SPI
69 @param algorithm the name of the key algorithm for this key factory
70 */
71 protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider,
72 String algorithm)
73 {
74 this.keyFacSpi = keyFacSpi;
75 this.provider = provider;
76 this.algorithm = algorithm;
77 }
78
79 /**
80 Gets an instance of the KeyFactory class representing
81 the specified key factory. If the algorithm is not
82 found then, it throws NoSuchAlgorithmException.
83
84 @param algorithm the name of algorithm to choose
85 @return a KeyFactory repesenting the desired algorithm
86
87 @throws NoSuchAlgorithmException if the algorithm is not implemented by providers
88 */
89 public static KeyFactory getInstance(String algorithm)
90 throws NoSuchAlgorithmException
91 {
92 Provider[] p = Security.getProviders();
93
94 for (int i = 0; i < p.length; i++)
95 {
96 String classname = p[i].getProperty("KeyFactory." + algorithm);
97 if (classname != null)
98 return getInstance(classname, algorithm, p[i]);
99 }
100
101 throw new NoSuchAlgorithmException(algorithm);
102 }
103
104 /**
105 Gets an instance of the KeyFactory class representing
106 the specified key factory from the specified provider.
107 If the algorithm is not found then, it throws
108 NoSuchAlgorithmException. If the provider is not found, then
109 it throws NoSuchProviderException.
110
111 @param algorithm the name of algorithm to choose
112 @param provider the name of the provider to find the algorithm in
113 @return a KeyFactory repesenting the desired algorithm
114
115 @throws NoSuchAlgorithmException if the algorithm is not implemented by the provider
116 @throws NoSuchProviderException if the provider is not found
117 */
118 public static KeyFactory getInstance(String algorithm, String provider)
119 throws NoSuchAlgorithmException, NoSuchProviderException
120 {
121 Provider p = Security.getProvider(provider);
122 if (p == null)
123 throw new NoSuchProviderException();
124
125 return getInstance(p.getProperty("KeyFactory." + algorithm),
126 algorithm, p);
127 }
128
129 private static KeyFactory getInstance(String classname,
130 String algorithm,
131 Provider provider)
132 throws NoSuchAlgorithmException
133 {
134
135 try
136 {
137 return new KeyFactory((KeyFactorySpi) Class.forName(classname).
138 newInstance(), provider, algorithm);
139 }
140 catch (ClassNotFoundException cnfe)
141 {
142 throw new NoSuchAlgorithmException("Class not found");
143 }
144 catch (InstantiationException ie)
145 {
146 throw new NoSuchAlgorithmException("Class instantiation failed");
147 }
148 catch (IllegalAccessException iae)
149 {
150 throw new NoSuchAlgorithmException("Illegal Access");
151 }
152 }
153
154 /**
155 Gets the provider that the class is from.
156
157 @return the provider of this class
158 */
159 public final Provider getProvider()
160 {
161 return provider;
162 }
163
164 /**
165 Returns the name of the algorithm used
166
167 @return A string with the name of the algorithm
168 */
169 public final String getAlgorithm()
170 {
171 return algorithm;
172 }
173
174 /**
175 Generates a public key from the provided key specification.
176
177 @param keySpec key specification
178
179 @return the public key
180
181 @throws InvalidKeySpecException invalid key specification for
182 this key factory to produce a public key
183 */
184 public final PublicKey generatePublic(KeySpec keySpec) throws
185 InvalidKeySpecException
186 {
187 return keyFacSpi.engineGeneratePublic(keySpec);
188 }
189
190 /**
191 Generates a private key from the provided key specification.
192
193 @param keySpec key specification
194
195 @return the private key
196
197 @throws InvalidKeySpecException invalid key specification for
198 this key factory to produce a private key
199 */
200 public final PrivateKey generatePrivate(KeySpec keySpec) throws
201 InvalidKeySpecException
202 {
203 return keyFacSpi.engineGeneratePrivate(keySpec);
204 }
205
206 /**
207 Returns a key specification for the given key. keySpec
208 identifies the specification class to return the key
209 material in.
210
211 @param key the key
212 @param keySpec the specification class to return the
213 key material in.
214
215 @return the key specification in an instance of the requested
216 specification class
217
218 @throws InvalidKeySpecException the requested key specification
219 is inappropriate for this key or the key is
220 unrecognized.
221 */
222 public final KeySpec getKeySpec(Key key, Class keySpec)
223 throws InvalidKeySpecException
224 {
225 return keyFacSpi.engineGetKeySpec(key, keySpec);
226 }
227
228 /**
229 Translates the key from an unknown or untrusted provider
230 into a key for this key factory.
231
232 @param the key from an unknown or untrusted provider
233
234 @return the translated key
235
236 @throws InvalidKeySpecException if the key cannot be
237 processed by this key factory
238 */
239 public final Key translateKey(Key key) throws InvalidKeyException
240 {
241 return keyFacSpi.engineTranslateKey(key);
242 }
243}
Note: See TracBrowser for help on using the repository browser.