classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Patch: SecureRandom


From: Anthony Green
Subject: Patch: SecureRandom
Date: Tue, 10 Jul 2001 19:39:18 -0700

The Random constructor calls setSeed() at a time when SecureRandom has
not yet initilialized secureRandomSpi, resulting in a
NullPointerException.   This tweak fixes..

Ok to commit?


2001-07-09  Anthony Green  <address@hidden>

        * java/security/SecureRandom.java: Store the seed array until
        we're ready to use it.


Index: java/security/SecureRandom.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/security/SecureRandom.java,v
retrieving revision 1.2
diff -u -p -r1.2 SecureRandom.java
--- SecureRandom.java   2001/04/25 15:45:12     1.2
+++ SecureRandom.java   2001/07/11 02:32:56
@@ -1,5 +1,5 @@
 /* SecureRandom.java --- Secure Random class implmentation
-   Copyright (C) 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -36,7 +36,8 @@ import java.util.Enumeration;
 
    @author Mark Benvenuto <address@hidden>
  */
-public class SecureRandom extends Random
+public class SecureRandom
+ extends Random
 {
   //Serialized Field
   long counter = 0;            //Serialized
@@ -87,6 +88,10 @@ public class SecureRandom extends Random
 
     try
       {
+       Class c = Class.forName (classname);
+
+       SecureRandomSpi srspi = (SecureRandomSpi) c.newInstance ();
+
        this.secureRandomSpi =
          (SecureRandomSpi) Class.forName(classname).newInstance();
 
@@ -105,6 +110,12 @@ public class SecureRandom extends Random
       {
        //throw new NoSuchAlgorithmException("Illegal Access");
       }
+
+    if (state != null)
+      {
+       setSeed (state);
+       state = null;
+      }
   }
 
   /**
@@ -172,6 +183,10 @@ public class SecureRandom extends Random
 
     try
       {
+       Class c = Class.forName (classname);
+
+       SecureRandomSpi srspi = (SecureRandomSpi) c.newInstance ();
+
        return new SecureRandom((SecureRandomSpi) Class.forName(classname).
                                newInstance(), p[i]);
       }
@@ -187,7 +202,6 @@ public class SecureRandom extends Random
       {
        throw new NoSuchAlgorithmException("Illegal Access");
       }
-
   }
 
   /**
@@ -267,12 +281,18 @@ public class SecureRandom extends Random
    */
   public void setSeed(long seed)
   {
-    byte tmp[] = { (byte) (0xff & (seed >> 56)), (byte) (0xff & (seed >> 48)),
-      (byte) (0xff & (seed >> 40)), (byte) (0xff & (seed >> 32)),
-      (byte) (0xff & (seed >> 24)), (byte) (0xff & (seed >> 16)),
-      (byte) (0xff & (seed >> 8)), (byte) (0xff & seed)
-    };
-    secureRandomSpi.engineSetSeed(tmp);
+    state = new byte[8];
+    state[0] = (byte) (0xff & (seed >> 56));
+    state[1] = (byte) (0xff & (seed >> 48));
+    state[2] = (byte) (0xff & (seed >> 40));
+    state[3] = (byte) (0xff & (seed >> 32));
+    state[4] = (byte) (0xff & (seed >> 24));
+    state[5] = (byte) (0xff & (seed >> 16));
+    state[6] = (byte) (0xff & (seed >> 8));
+    state[7] = (byte) (0xff & seed);
+
+    if (secureRandomSpi != null)
+      secureRandomSpi.engineSetSeed(state);
   }
 
   /**



reply via email to

[Prev in Thread] Current Thread [Next in Thread]