Author: toad
Date: 2006-04-06 18:59:16 +0000 (Thu, 06 Apr 2006)
New Revision: 8484

Modified:
   trunk/freenet/src/freenet/crypt/Yarrow.java
   trunk/freenet/src/freenet/node/Version.java
Log:
622:
Random number generator blocking on startup fix:
Don't block on SecureRandom.generateSeed on *nix. This should be the last 
remaining blocking call in Yarrow's constructor.


Modified: trunk/freenet/src/freenet/crypt/Yarrow.java
===================================================================
--- trunk/freenet/src/freenet/crypt/Yarrow.java 2006-04-06 18:09:20 UTC (rev 
8483)
+++ trunk/freenet/src/freenet/crypt/Yarrow.java 2006-04-06 18:59:16 UTC (rev 
8484)
@@ -99,11 +99,7 @@
        }

        public void seedFromExternalStuff(boolean canBlock) {
-           // SecureRandom hopefully acts as a proxy for CAPI on Windows
-           byte[] buf = sr.generateSeed(20);
-           consumeBytes(buf);
-           buf = sr.generateSeed(20);
-           consumeBytes(buf);
+               byte[] buf = new byte[32];
            if(File.separatorChar == '/') {
                FileInputStream fis = null;
                File hwrng = new File("/dev/hwrng");
@@ -162,7 +158,18 @@
                    }
                }
                fis = null;
+           } else {
+               // Force generateSeed(), since we can't read random data from 
anywhere else.
+               // Anyway, Windows's CAPI won't block.
+               canBlock = true;
            }
+           if(canBlock) {
+                   // SecureRandom hopefully acts as a proxy for CAPI on 
Windows
+                   buf = sr.generateSeed(32);
+                   consumeBytes(buf);
+                   buf = sr.generateSeed(32);
+                   consumeBytes(buf);
+           }
            // A few more bits
            consumeString(Long.toHexString(Runtime.getRuntime().freeMemory()));
            consumeString(Long.toHexString(Runtime.getRuntime().totalMemory()));

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-06 18:09:20 UTC (rev 
8483)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-06 18:59:16 UTC (rev 
8484)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 621;
+       private static final int buildNumber = 622;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 591;


Reply via email to