Skip to content

Commit 50f0ef7

Browse files
committed
use only one SecureRandom instance
1 parent de3b253 commit 50f0ef7

File tree

5 files changed

+23
-40
lines changed

5 files changed

+23
-40
lines changed

src/main/java/org/kopi/ebics/certificate/KeyUtil.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.commons.codec.binary.Base64;
3232
import org.apache.commons.codec.binary.Hex;
3333
import org.kopi.ebics.exception.EbicsException;
34+
import org.kopi.ebics.utils.Utils;
3435

3536
/**
3637
* Some key utilities
@@ -50,15 +51,13 @@ private KeyUtil() {
5051
* @return KeyPair the key pair
5152
* @throws NoSuchAlgorithmException
5253
*/
53-
public static KeyPair makeKeyPair(int keyLen) throws NoSuchAlgorithmException{
54+
public static KeyPair makeKeyPair(int keyLen) throws NoSuchAlgorithmException {
5455
KeyPairGenerator keyGen;
5556

5657
keyGen = KeyPairGenerator.getInstance("RSA");
57-
keyGen.initialize(keyLen, new SecureRandom());
58+
keyGen.initialize(keyLen, Utils.secureRandom);
5859

59-
KeyPair keypair = keyGen.generateKeyPair();
60-
61-
return keypair;
60+
return keyGen.generateKeyPair();
6261

6362
}
6463

@@ -68,16 +67,8 @@ public static KeyPair makeKeyPair(int keyLen) throws NoSuchAlgorithmException{
6867
* @return the password
6968
*/
7069
public static String generatePassword() {
71-
SecureRandom random;
72-
73-
try {
74-
random = SecureRandom.getInstance("SHA1PRNG");
75-
String pwd = Base64.encodeBase64String(random.generateSeed(5));
76-
70+
String pwd = Base64.encodeBase64String(Utils.secureRandom.generateSeed(5));
7771
return pwd.substring(0, pwd.length() - 2);
78-
} catch (NoSuchAlgorithmException e) {
79-
throw new RuntimeException(e);
80-
}
8172
}
8273

8374
/**

src/main/java/org/kopi/ebics/certificate/X509Generator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.security.GeneralSecurityException;
2727
import java.security.KeyPair;
2828
import java.security.PublicKey;
29-
import java.security.SecureRandom;
3029
import java.security.cert.X509Certificate;
3130
import java.text.SimpleDateFormat;
3231
import java.util.Date;
@@ -49,6 +48,7 @@
4948
import org.bouncycastle.asn1.x509.X509Name;
5049
import org.bouncycastle.jce.X509Principal;
5150
import org.bouncycastle.x509.X509V3CertificateGenerator;
51+
import org.kopi.ebics.utils.Utils;
5252

5353
/**
5454
* An X509 certificate generator for EBICS protocol.
@@ -194,7 +194,7 @@ public X509Certificate generate(KeyPair keypair,
194194
break;
195195
}
196196

197-
certificate = generator.generate(keypair.getPrivate(), "BC", new SecureRandom());
197+
certificate = generator.generate(keypair.getPrivate(), "BC", Utils.secureRandom);
198198
certificate.checkValidity(new Date());
199199
certificate.verify(keypair.getPublic());
200200

src/main/java/org/kopi/ebics/security/EbicsSocketFactory.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@
2626
import java.net.UnknownHostException;
2727
import java.security.GeneralSecurityException;
2828
import java.security.KeyStore;
29-
import java.security.SecureRandom;
3029

3130
import javax.net.ssl.KeyManagerFactory;
3231
import javax.net.ssl.SSLContext;
3332
import javax.net.ssl.SSLSocketFactory;
3433
import javax.net.ssl.TrustManagerFactory;
3534

35+
import org.kopi.ebics.utils.Utils;
36+
3637
/**
3738
* A simple SSL socket factory for EBICS client.
3839
*
@@ -81,7 +82,7 @@ public EbicsSocketFactory(byte[] keystore,
8182
* Returns the <code>SSLContext</code> from key store information.
8283
* @param keystore the key store
8384
* @param keystoreType the key store type
84-
* @param keystrorePass the key store password
85+
* @param keystorePass the key store password
8586
* @param truststore the trust store
8687
* @param truststoreType the trust store type
8788
* @param truststorePass the trust store password
@@ -91,7 +92,7 @@ public EbicsSocketFactory(byte[] keystore,
9192
*/
9293
public SSLContext getSSLContext(byte[] keystore,
9394
String keystoreType,
94-
char[] keystrorePass,
95+
char[] keystorePass,
9596
byte[] truststore,
9697
String truststoreType,
9798
char[] truststorePass)
@@ -103,15 +104,15 @@ public SSLContext getSSLContext(byte[] keystore,
103104
TrustManagerFactory tmf;
104105
SSLContext context;
105106

106-
kstore = initKeyStore(keystore, keystrorePass, keystoreType);
107+
kstore = initKeyStore(keystore, keystorePass, keystoreType);
107108
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
108-
kmf.init(kstore, keystrorePass);
109+
kmf.init(kstore, keystorePass);
109110

110111
tstore = initKeyStore(truststore, truststorePass, truststoreType);
111112
tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
112113
tmf.init(tstore);
113114
context = SSLContext.getInstance("TLS");
114-
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());
115+
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), Utils.secureRandom);
115116

116117
return context;
117118
}

src/main/java/org/kopi/ebics/utils/Utils.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public final class Utils {
6060
org.apache.xml.security.Init.init();
6161
}
6262

63+
public static final SecureRandom secureRandom = new SecureRandom();
64+
6365
private Utils() {
6466
}
6567

@@ -119,24 +121,13 @@ public static byte[] zip(byte[] toZip) throws EbicsException {
119121
* be at least 100 bits.
120122
*
121123
* @return a random nonce.
122-
* @throws EbicsException nonce generation fails.
123124
*/
124-
public static byte[] generateNonce() throws EbicsException {
125-
try {
126-
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
127-
return secureRandom.generateSeed(16);
128-
} catch (NoSuchAlgorithmException e) {
129-
throw new EbicsException(e.getMessage());
130-
}
125+
public static byte[] generateNonce() {
126+
return secureRandom.generateSeed(16);
131127
}
132128

133-
public static byte[] generateKey() throws EbicsException {
134-
try {
135-
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
136-
return secureRandom.generateSeed(16);
137-
} catch (NoSuchAlgorithmException e) {
138-
throw new EbicsException(e.getMessage());
139-
}
129+
public static byte[] generateKey() {
130+
return secureRandom.generateSeed(16);
140131
}
141132

142133
/**

src/main/java/org/kopi/ebics/xml/DefaultEbicsRootElement.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.io.OutputStream;
2727
import java.io.PrintStream;
2828
import java.math.BigInteger;
29-
import java.security.SecureRandom;
3029
import java.util.ArrayList;
3130
import java.util.HashMap;
3231
import java.util.Iterator;
@@ -47,6 +46,7 @@
4746
import org.kopi.ebics.interfaces.EbicsOrderType;
4847
import org.kopi.ebics.interfaces.EbicsRootElement;
4948
import org.kopi.ebics.session.EbicsSession;
49+
import org.kopi.ebics.utils.Utils;
5050

5151
public abstract class DefaultEbicsRootElement implements EbicsRootElement {
5252

@@ -134,7 +134,7 @@ public void insertSchemaLocation(String namespaceURI,
134134
* @return the generated file name.
135135
*/
136136
public static String generateName(EbicsOrderType type) {
137-
return type.getCode() + new BigInteger(130, new SecureRandom()).toString(32);
137+
return type.getCode() + new BigInteger(130, Utils.secureRandom).toString(32);
138138
}
139139

140140
/**
@@ -143,7 +143,7 @@ public static String generateName(EbicsOrderType type) {
143143
* @return the generated file name.
144144
*/
145145
public static String generateName(String prefix) {
146-
return prefix + new BigInteger(130, new SecureRandom()).toString(32);
146+
return prefix + new BigInteger(130, Utils.secureRandom).toString(32);
147147
}
148148

149149
@Override

0 commit comments

Comments
 (0)