|
DES1KeySecretKeyGeneratorEngine |
|
1 /* $RCSfile: DES1KeySecretKeyGeneratorEngine.java,v $
2 * $Revision: 1.10 $
3 * $Date: 2003/10/04 19:18:38 $
4 * $Author: uwe_guenther $
5 * $State: Exp $
6 *
7 * Created on August 13, 2001 2:51 PM
8 *
9 * Copyright (C) 2001 Uwe Guenther <uwe@cscc.de>
10 *
11 * This file is part of the jhbci JCE-ServiceProvider. The jhbci JCE-
12 * ServiceProvider is a library, written in JavaTM, that should be
13 * used in HBCI banking applications (clients and may be servers),
14 * to do cryptographic operations.
15 *
16 * The jhbci library is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU Lesser General Public
18 * License as published by the Free Software Foundation; either
19 * version 2.1 of the License, or (at your option) any later version.
20 *
21 * The jhbci library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 *
30 */
31
32 package de.cscc.crypto.provider;
33
34 import java.security.InvalidAlgorithmParameterException;
35 import java.security.InvalidParameterException;
36 import java.security.SecureRandom;
37 import java.security.spec.AlgorithmParameterSpec;
38
39 import javax.crypto.KeyGeneratorSpi;
40 import javax.crypto.SecretKey;
41
42 /**
43 * DES1KeySecretKeyGeneratorEngine Class provides the functionality
44 * of a DESede key generator for two keys (means 56 or 64 bit key length).
45 * This key generator generates only keys for the "DES1Key" algorithm in
46 * the JHBCI crypto provider.
47 *
48 * This KeyGenerator Object is re-useable, i.e., after a key has been generated,
49 * the same KeyGenerator Object can be re-used to generate further keys.
50 *
51 * <pre>
52 *
53 * Use the DES1KeySecretKeyGeneratorEngine through the JCE in the following way:
54 *
55 * import javax.crypto.KeyGenerator;
56 * import javax.crypto.SecretKey;
57 * import java.security.SecureRandom;
58 *
59 * KeyGenerator kg = new KeyGenerator.getInstance("DES1Key", "JHBCI");
60 * kg.init(new SecureRandom());
61 * SecretKey key = kg.generateKey();
62 *
63 * //Use key further in a DES1Key Cipher from the JHBCI provider.
64 * //Or do some other useful things with this nicely generated SecretKey.
65 *
66 * </pre>
67 *
68 *
69 * In this case you does not explicitly initialize the KeyGenerator Object
70 * (in our example code that means <code>kg.init(new SecureRandom());</code>)
71 * we initialize the KeyGenerator Object with <code>new SecureRandom()</code>.
72 * So you can omit the line <code>kg.init(new SecureRandom());</code>.
73 * With this code we will get a SecureRandom implementation of the
74 * highest-priority installed provider. If no one of the installed
75 * providers supply an implementation of SecureRandom, a system provided
76 * source of randomness will be used.
77 * <pre>
78 *
79 * See the changed example:
80 *
81 * import javax.crypto.KeyGenerator;
82 * import javax.crypto.SecretKey;
83 * import java.security.SecureRandom;
84 *
85 * KeyGenerator kg = new KeyGenerator.getInstance("DES1Key", "JHBCI");
86 * SecretKey key = kg.generateKey();
87 *
88 * //Use key further in a DES1Key Cipher from the JHBCI provider.
89 * //Or do some other useful things with this nicely generated SecretKey.
90 *
91 * </pre>
92 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a>
93 * @version $Revision: 1.10 $
94 */
95 public final class DES1KeySecretKeyGeneratorEngine extends KeyGeneratorSpi {
96
97 /** The delegate for this wrapper object */
98 private DES1KeySecretKeyGeneratorImpl generator =
99 new DES1KeySecretKeyGeneratorImpl();
100
101 /**
102 * Creates new DES1KeySecretKeyGeneratorEngine.
103 * Mostly used of the static function
104 * <code>KeyGenerator.getInstance(...)</code>.
105 *
106 * @throws SecurityException if the provider self integrity check fails.
107 */
108 public DES1KeySecretKeyGeneratorEngine() {
109 if (JHBCI.selfIntegrityChecking() == false) {
110 throw new SecurityException("JHBCI-Provider is tampered.");
111 }
112 }
113
114 /**
115 * Returns a string representation of the object.
116 *
117 * @return a string representation of the object.
118 */
119 public String toString() {
120 return this.generator.toString();
121 }
122
123 /**
124 * Initializes the key generator.
125 *
126 * @param random the source of randomness for this generator
127 */
128 protected void engineInit(SecureRandom random) {
129 this.generator.init(random);
130 }
131
132 /**
133 * Initializes this key generator for a certain keysize, using the given
134 * source of randomness. We support only 56 bit and 64 bit keysize,
135 * which means the refers to the same result.
136 *
137 * @param keysize the keysize. This is an algorithm-specific metric,
138 * specified in number of bits.
139 * @param random the source of randomness for this key generator.
140 * @throws InvalidParameterException if keysize is wrong or not supported.
141 */
142 protected void engineInit(int keysize, SecureRandom random)
143 throws InvalidParameterException {
144 this.generator.init(keysize, random);
145 }
146
147 /**
148 * Initializes the key generator with the specified parameter
149 * set and a user-provided source of randomness. The JHBCI
150 * key generator implementation don't use any AlgorithmParameterSpec's.
151 * This means if you want to init the KeyGenerator Object with this
152 * method <code>params</code> have to be null or
153 * InvalidAlgorithmParameterException will be thrown.
154 *
155 * @param params the key generation parameters
156 * @param random the source of randomness for this key generator.
157 * @exception InvalidAlgorithmParameterException if <code>params</code> is
158 * inappropriate for this key generator. We only support
159 * <CODE>null</CODE> as parameter for <CODE>params</CODE>.
160 */
161 protected void engineInit(AlgorithmParameterSpec params, SecureRandom random)
162 throws InvalidAlgorithmParameterException {
163 this.generator.init(params, random);
164 }
165
166 /**
167 * Generates a secret key. This method can re-used more than once
168 * for the KeyGenerator Object to generate a lot of SecretKey's.
169 *
170 * @return the new key.
171 */
172 protected SecretKey engineGenerateKey() {
173 return this.generator.generateKey();
174 }
175
176 }
177
|
DES1KeySecretKeyGeneratorEngine |
|