Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-12-30 11:25:11 +0000
committerEike Stepper2008-12-30 11:25:11 +0000
commit4a034618a8dbf8539d39e6b82e547877d842c166 (patch)
tree57768e9090bbe34aa245c4027fde3eef5b87d437
parent2883339d83529419d16af4f19dd26e063542e909 (diff)
downloadcdo-4a034618a8dbf8539d39e6b82e547877d842c166.tar.gz
cdo-4a034618a8dbf8539d39e6b82e547877d842c166.tar.xz
cdo-4a034618a8dbf8539d39e6b82e547877d842c166.zip
[259783] Support setting seed on Randomizer before Activation
https://bugs.eclipse.org/bugs/show_bug.cgi?id=259783
-rw-r--r--plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SecurityTest.java6
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/security/Randomizer.java82
2 files changed, 62 insertions, 26 deletions
diff --git a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SecurityTest.java b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SecurityTest.java
index fea4aea713..09ee38bd23 100644
--- a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SecurityTest.java
+++ b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SecurityTest.java
@@ -43,6 +43,12 @@ public class SecurityTest extends AbstractOMTest
private IPasswordCredentialsProvider credentialsProvider = new PasswordCredentialsProvider(CREDENTIALS);
+ public void testRandomizerAcceptsSeedsBeforeActivation()
+ {
+ Randomizer randomizer = new Randomizer();
+ randomizer.setSeed(2l);
+ }
+
public void testSuccess() throws Exception
{
// Prepare randomizer
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/security/Randomizer.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/security/Randomizer.java
index 19f590703c..d6de58794b 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/security/Randomizer.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/security/Randomizer.java
@@ -10,6 +10,7 @@
**************************************************************************/
package org.eclipse.net4j.util.security;
+import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
import org.eclipse.net4j.util.lifecycle.Lifecycle;
import java.security.SecureRandom;
@@ -27,80 +28,113 @@ public class Randomizer extends Lifecycle implements IRandomizer
private String providerName;
+ @ExcludeFromDump
+ private byte[] seed;
+
+ @ExcludeFromDump
private transient SecureRandom secureRandom;
- public String getAlgorithmName()
+ public Randomizer()
+ {
+ }
+
+ public synchronized String getAlgorithmName()
{
return algorithmName;
}
- public void setAlgorithmName(String algorithmName)
+ public synchronized void setAlgorithmName(String algorithmName)
{
this.algorithmName = algorithmName;
}
- public String getProviderName()
+ public synchronized String getProviderName()
{
return providerName;
}
- public void setProviderName(String providerName)
+ public synchronized void setProviderName(String providerName)
{
this.providerName = providerName;
}
- public boolean nextBoolean()
+ public synchronized void setSeed(byte[] seed)
+ {
+ this.seed = seed;
+ if (isActive())
+ {
+ setSeed();
+ }
+ }
+
+ public synchronized void setSeed(long seed)
+ {
+ setSeed(String.valueOf(seed).getBytes());
+ }
+
+ public synchronized boolean nextBoolean()
{
+ checkActive();
return secureRandom.nextBoolean();
}
- public double nextDouble()
+ public synchronized double nextDouble()
{
+ checkActive();
return secureRandom.nextDouble();
}
- public float nextFloat()
+ public synchronized float nextFloat()
{
+ checkActive();
return secureRandom.nextFloat();
}
public synchronized double nextGaussian()
{
+ checkActive();
return secureRandom.nextGaussian();
}
- public int nextInt()
+ public synchronized int nextInt()
{
+ checkActive();
return secureRandom.nextInt();
}
- public int nextInt(int n)
+ public synchronized int nextInt(int n)
{
+ checkActive();
return secureRandom.nextInt(n);
}
- public long nextLong()
+ public synchronized long nextLong()
{
+ checkActive();
return secureRandom.nextLong();
}
- public byte[] generateSeed(int numBytes)
+ public synchronized byte[] generateSeed(int numBytes)
{
+ checkActive();
return secureRandom.generateSeed(numBytes);
}
- public String getAlgorithm()
+ public synchronized String getAlgorithm()
{
+ checkActive();
return secureRandom.getAlgorithm();
}
public synchronized void nextBytes(byte[] bytes)
{
+ checkActive();
secureRandom.nextBytes(bytes);
}
- public String nextString(int length, String alphabet)
+ public synchronized String nextString(int length, String alphabet)
{
+ checkActive();
int n = alphabet.length();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++)
@@ -113,23 +147,14 @@ public class Randomizer extends Lifecycle implements IRandomizer
return builder.toString();
}
- public synchronized void setSeed(byte[] seed)
- {
- secureRandom.setSeed(seed);
- }
-
- public void setSeed(long seed)
- {
- secureRandom.setSeed(seed);
- }
-
@Override
protected void doBeforeActivate() throws Exception
{
super.doBeforeActivate();
- if (algorithmName == null)
+ checkState(algorithmName, "algorithmName");
+ if (seed == null)
{
- throw new IllegalStateException("algorithmName == null");
+ setSeed(System.currentTimeMillis());
}
}
@@ -146,7 +171,7 @@ public class Randomizer extends Lifecycle implements IRandomizer
secureRandom = SecureRandom.getInstance(algorithmName, providerName);
}
- secureRandom.setSeed(System.currentTimeMillis());
+ setSeed();
}
@Override
@@ -155,4 +180,9 @@ public class Randomizer extends Lifecycle implements IRandomizer
secureRandom = null;
super.doDeactivate();
}
+
+ private void setSeed()
+ {
+ secureRandom.setSeed(seed);
+ }
}

Back to the top