home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- class SeedGenerator {
- private static int sleepTime;
- private static final int TARGET_SPIN_COUNT = 55000;
- private static final int MIN_SPIN_COUNT = 33000;
- private static final int MAX_SPIN_COUNT = 110000;
- private static final int MAX_SLEEP_TIME = 30000;
- private static final int MAX_ATTEMPTS = 5;
-
- private static void setSleepTime() {
- sleepTime = 55000000 / genSeed(1000);
- if (sleepTime > 30000) {
- sleepTime = 30000;
- }
-
- Security.debug("Resetting sleep time for seed generation: " + sleepTime + " ms.");
- }
-
- public static synchronized int genSeed() {
- int var0 = genSeed(sleepTime);
-
- int var1;
- for(var1 = 0; var0 < 33000 && var1 < 5; ++var1) {
- Security.debug("Candidate seed too low: " + var0 + " ms.");
- setSleepTime();
- var0 = genSeed(sleepTime);
- }
-
- if (var1 > 5) {
- throw new SecurityException("unable to generate a quality seed");
- } else {
- if (var0 > 110000) {
- Security.debug("Candidate seed too high: " + var0 + " ms.");
- setSleepTime();
- }
-
- return var0;
- }
- }
-
- private static int genSeed(int var0) {
- int var1 = 0;
- Sleeper var2 = new Sleeper(var0);
- ((Thread)var2).start();
-
- while(((Thread)var2).isAlive()) {
- ++var1;
- Thread.yield();
- }
-
- return var1;
- }
-
- static {
- setSleepTime();
- }
- }
-