FSF GCC merge 02/23/03
[official-gcc.git] / libjava / java / security / KeyFactory.java
blob667c2fb4df31951c9044680dcf39cdd20838e98a
1 /* KeyFactory.java --- Key Factory Class
2 Copyright (C) 1999 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA.
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
38 package java.security;
39 import java.security.spec.KeySpec;
40 import java.security.spec.InvalidKeySpecException;
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).
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.
51 For example DSA public keys can be specified as
52 DSAPublicKeySpec or X509EncodedKeySpec. The key factory
53 translate these key specifications.
55 @since JDK 1.2
56 @author Mark Benvenuto
58 public class KeyFactory
60 private KeyFactorySpi keyFacSpi;
61 private Provider provider;
62 private String algorithm;
64 /**
65 Constructs a new keyFactory with the specified parameters.
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
71 protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider,
72 String algorithm)
74 this.keyFacSpi = keyFacSpi;
75 this.provider = provider;
76 this.algorithm = algorithm;
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.
84 @param algorithm the name of algorithm to choose
85 @return a KeyFactory repesenting the desired algorithm
87 @throws NoSuchAlgorithmException if the algorithm is not implemented by providers
89 public static KeyFactory getInstance(String algorithm)
90 throws NoSuchAlgorithmException
92 Provider[] p = Security.getProviders();
94 for (int i = 0; i < p.length; i++)
96 String classname = p[i].getProperty("KeyFactory." + algorithm);
97 if (classname != null)
98 return getInstance(classname, algorithm, p[i]);
101 throw new NoSuchAlgorithmException(algorithm);
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.
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
115 @throws NoSuchAlgorithmException if the algorithm is not implemented by the provider
116 @throws NoSuchProviderException if the provider is not found
118 public static KeyFactory getInstance(String algorithm, String provider)
119 throws NoSuchAlgorithmException, NoSuchProviderException
121 Provider p = Security.getProvider(provider);
122 if (p == null)
123 throw new NoSuchProviderException();
125 return getInstance(p.getProperty("KeyFactory." + algorithm),
126 algorithm, p);
129 private static KeyFactory getInstance(String classname,
130 String algorithm,
131 Provider provider)
132 throws NoSuchAlgorithmException
137 return new KeyFactory((KeyFactorySpi) Class.forName(classname).
138 newInstance(), provider, algorithm);
140 catch (ClassNotFoundException cnfe)
142 throw new NoSuchAlgorithmException("Class not found");
144 catch (InstantiationException ie)
146 throw new NoSuchAlgorithmException("Class instantiation failed");
148 catch (IllegalAccessException iae)
150 throw new NoSuchAlgorithmException("Illegal Access");
155 Gets the provider that the class is from.
157 @return the provider of this class
159 public final Provider getProvider()
161 return provider;
165 Returns the name of the algorithm used
167 @return A string with the name of the algorithm
169 public final String getAlgorithm()
171 return algorithm;
175 Generates a public key from the provided key specification.
177 @param keySpec key specification
179 @return the public key
181 @throws InvalidKeySpecException invalid key specification for
182 this key factory to produce a public key
184 public final PublicKey generatePublic(KeySpec keySpec) throws
185 InvalidKeySpecException
187 return keyFacSpi.engineGeneratePublic(keySpec);
191 Generates a private key from the provided key specification.
193 @param keySpec key specification
195 @return the private key
197 @throws InvalidKeySpecException invalid key specification for
198 this key factory to produce a private key
200 public final PrivateKey generatePrivate(KeySpec keySpec) throws
201 InvalidKeySpecException
203 return keyFacSpi.engineGeneratePrivate(keySpec);
207 Returns a key specification for the given key. keySpec
208 identifies the specification class to return the key
209 material in.
211 @param key the key
212 @param keySpec the specification class to return the
213 key material in.
215 @return the key specification in an instance of the requested
216 specification class
218 @throws InvalidKeySpecException the requested key specification
219 is inappropriate for this key or the key is
220 unrecognized.
222 public final KeySpec getKeySpec(Key key, Class keySpec)
223 throws InvalidKeySpecException
225 return keyFacSpi.engineGetKeySpec(key, keySpec);
229 Translates the key from an unknown or untrusted provider
230 into a key for this key factory.
232 @param the key from an unknown or untrusted provider
234 @return the translated key
236 @throws InvalidKeySpecException if the key cannot be
237 processed by this key factory
239 public final Key translateKey(Key key) throws InvalidKeyException
241 return keyFacSpi.engineTranslateKey(key);