re PR libgcj/9271 (Severe bias in java.security.SecureRandom)
authorCasey Marshall <rsdio@metastatic.org>
Thu, 13 Feb 2003 17:00:22 +0000 (17:00 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 13 Feb 2003 17:00:22 +0000 (17:00 +0000)
2003-02-13  Casey Marshall  <rsdio@metastatic.org>

PR libgcj/9271:
* java/security/SecureRandom.java (next): Avoid bias in results.

From-SVN: r62851

libjava/ChangeLog
libjava/java/security/SecureRandom.java

index 15391fc68f3dd1f076ff14de60810397677912d4..2f796255bf210fefa9aec93e2a3cdf52ef3b228c 100644 (file)
@@ -1,3 +1,8 @@
+2003-02-13  Casey Marshall  <rsdio@metastatic.org>
+
+       PR libgcj/9271:
+       * java/security/SecureRandom.java (next): Avoid bias in results.
+
 2003-02-13  Michael  <konqueror@gmx.de>
 
        * gnu/java/nio/FileChannelImpl.java
index a0b7f95f397a0d6de9033ac6b8a5f6e5c66d15ee..d9ac153da2b9ce8226bdc30dca36d34e8e9ad666 100644 (file)
@@ -1,5 +1,5 @@
 /* SecureRandom.java --- Secure Random class implmentation
-   Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -36,6 +36,7 @@ obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version. */
 
 package java.security;
+
 import java.io.Serializable;
 import java.util.Random;
 import java.util.Enumeration;
@@ -358,9 +359,10 @@ public class SecureRandom extends Random
     int ret = 0;
 
     for (int i = 0; i < tmp.length; i++)
-      ret |= tmp[i] << (8 * i);
+      ret |= (tmp[i] & 0xFF) << (8 * i);
 
-    return ret;
+    long mask = (1L << numBits) - 1;
+    return (int) (ret & mask);
   }
 
   /**