All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.crypto.prng.ThreadedSeedGenerator Maven / Gradle / Ivy

Go to download

The Bouncy Castle Java APIs for CMS, PKCS, EAC, TSP, CMP, CRMF, OCSP, and certificate generation. This jar contains APIs for JDK 1.5 and up. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs.

There is a newer version: 1.2.2.1-jre17
Show newest version
package org.bouncycastle.crypto.prng;

/**
 * A thread based seed generator - one source of randomness.
 * 

* Based on an idea from Marcus Lippert. *

*/ public class ThreadedSeedGenerator { private class SeedGenerator implements Runnable { private volatile int counter = 0; private volatile boolean stop = false; public void run() { while (!this.stop) { this.counter++; } } public byte[] generateSeed( int numbytes, boolean fast) { Thread t = new Thread(this); byte[] result = new byte[numbytes]; this.counter = 0; this.stop = false; int last = 0; int end; t.start(); if(fast) { end = numbytes; } else { end = numbytes * 8; } for (int i = 0; i < end; i++) { while (this.counter == last) { try { Thread.sleep(1); } catch (InterruptedException e) { // ignore } } last = this.counter; if (fast) { result[i] = (byte) (last & 0xff); } else { int bytepos = i/8; result[bytepos] = (byte) ((result[bytepos] << 1) | (last & 1)); } } stop = true; return result; } } /** * Generate seed bytes. Set fast to false for best quality. *

* If fast is set to true, the code should be round about 8 times faster when * generating a long sequence of random bytes. 20 bytes of random values using * the fast mode take less than half a second on a Nokia e70. If fast is set to false, * it takes round about 2500 ms. *

* @param numBytes the number of bytes to generate * @param fast true if fast mode should be used */ public byte[] generateSeed( int numBytes, boolean fast) { SeedGenerator gen = new SeedGenerator(); return gen.generateSeed(numBytes, fast); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy