2006-05-11 jrandom
* PRNG bugfix (thanks cervantes and Complication!)
This commit is contained in:
@ -76,15 +76,33 @@ public class FortunaRandomSource extends RandomSource implements EntropyHarveste
|
|||||||
if (n<=0)
|
if (n<=0)
|
||||||
throw new IllegalArgumentException("n must be positive");
|
throw new IllegalArgumentException("n must be positive");
|
||||||
|
|
||||||
if ((n & -n) == n) // i.e., n is a power of 2
|
////
|
||||||
return (int)((n * (long)nextBits(31)) >> 31);
|
// this shortcut from sun's docs neither works nor is necessary.
|
||||||
|
//
|
||||||
|
//if ((n & -n) == n) {
|
||||||
|
// // i.e., n is a power of 2
|
||||||
|
// return (int)((n * (long)nextBits(31)) >> 31);
|
||||||
|
//}
|
||||||
|
|
||||||
int bits, val;
|
int numBits = 0;
|
||||||
do {
|
int remaining = n;
|
||||||
bits = nextBits(31);
|
int rv = 0;
|
||||||
val = bits % n;
|
while (remaining > 0) {
|
||||||
} while(bits - val + (n-1) < 0);
|
remaining >>= 1;
|
||||||
return val;
|
rv += nextBits(8) << numBits*8;
|
||||||
|
numBits++;
|
||||||
|
}
|
||||||
|
if (rv < 0)
|
||||||
|
rv += n;
|
||||||
|
return rv % n;
|
||||||
|
|
||||||
|
//int bits, val;
|
||||||
|
//do {
|
||||||
|
// bits = nextBits(31);
|
||||||
|
// val = bits % n;
|
||||||
|
//} while(bits - val + (n-1) < 0);
|
||||||
|
//
|
||||||
|
//return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -180,4 +198,19 @@ public class FortunaRandomSource extends RandomSource implements EntropyHarveste
|
|||||||
public synchronized void feedEntropy(String source, byte[] data, int offset, int len) {
|
public synchronized void feedEntropy(String source, byte[] data, int offset, int len) {
|
||||||
_fortuna.addRandomBytes(data, offset, len);
|
_fortuna.addRandomBytes(data, offset, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
try {
|
||||||
|
RandomSource rand = I2PAppContext.getGlobalContext().random();
|
||||||
|
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
|
||||||
|
java.util.zip.GZIPOutputStream gos = new java.util.zip.GZIPOutputStream(baos);
|
||||||
|
for (int i = 0; i < 1024*1024; i++) {
|
||||||
|
int c = rand.nextInt(256);
|
||||||
|
gos.write((byte)c);
|
||||||
|
}
|
||||||
|
gos.finish();
|
||||||
|
byte compressed[] = baos.toByteArray();
|
||||||
|
System.out.println("Compressed size of 1MB: " + compressed.length);
|
||||||
|
} catch (Exception e) { e.printStackTrace(); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
$Id: history.txt,v 1.471 2006/05/07 22:19:46 complication Exp $
|
$Id: history.txt,v 1.472 2006/05/09 16:17:17 jrandom Exp $
|
||||||
|
|
||||||
|
2006-05-11 jrandom
|
||||||
|
* PRNG bugfix (thanks cervantes and Complication!)
|
||||||
|
|
||||||
* 2006-05-09 0.6.1.18 released
|
* 2006-05-09 0.6.1.18 released
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.411 $ $Date: 2006/05/07 22:19:47 $";
|
public final static String ID = "$Revision: 1.412 $ $Date: 2006/05/09 16:17:22 $";
|
||||||
public final static String VERSION = "0.6.1.18";
|
public final static String VERSION = "0.6.1.18";
|
||||||
public final static long BUILD = 0;
|
public final static long BUILD = 1;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
Reference in New Issue
Block a user