PatchSet 4356 
Date: 2004/01/20 23:23:59
Author: stack
Branch: HEAD
Tag: (none) 
Log:
Fixes for SHA1PRNG and a bug in the test suite Makefile.

Members: 
        ChangeLog:1.1941->1.1942 
        libraries/javalib/Makefile.am:1.162->1.163 
        libraries/javalib/Makefile.in:1.218->1.219 
        libraries/javalib/kaffe/security/LameRandomness.java:INITIAL->1.1 
        libraries/javalib/kaffe/security/Randomness.java:INITIAL->1.1 
        libraries/javalib/kaffe/security/UnixRandomness.java:INITIAL->1.1 
        libraries/javalib/kaffe/security/provider/SHA1PRNG.java:1.6->1.7 
        libraries/javalib/profiles/allatonce/all.files:1.35->1.36 
        libraries/javalib/profiles/default/core.files:1.23->1.24 
        test/regression/Makefile.am:1.85->1.86 
        test/regression/Makefile.in:1.155->1.156 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1941 kaffe/ChangeLog:1.1942
--- kaffe/ChangeLog:1.1941      Mon Jan 19 17:47:59 2004
+++ kaffe/ChangeLog     Tue Jan 20 23:23:59 2004
@@ -1,3 +1,26 @@
+2004-01-20  Timothy S. Stack <[EMAIL PROTECTED]>
+
+       * test/regression/Makefile.am:
+       Fix JASMIN_TESTS/BCEL_TESTS variables since they were being set to
+       FOO_TESTS_DIST and not $(FOO_TESTS_DIST).
+
+       * libraries/javalib/kaffe/security/LameRandomness.java,
+       libraries/javalib/kaffe/security/Randomness.java,
+       libraries/javalib/kaffe/security/UnixRandomness.java:
+       New files.  Used to break out the initial source of randomness for
+       SHA1PRNG.
+
+       * libraries/javalib/kaffe/security/provider/SHA1PRNG.java:
+       Make setSeed and nextBytes methods synchronized (Reported by:
+       "jrandom").  Allow for the initial source of randomness to be
+       determined at run-time so we can take advantage of "/dev/random",
+       if it is available.
+
+       * libraries/javalib/Makefile.am,
+       libraries/javalib/profiles/allatonce/all.files,
+       libraries/javalib/profiles/default/core.files:
+       Add kaffe/security/*Randomness.java.
+
 2004-01-19  Dalibor Topic <[EMAIL PROTECTED]>
 
        * config/arm/jit.h
Index: kaffe/libraries/javalib/Makefile.am
diff -u kaffe/libraries/javalib/Makefile.am:1.162 
kaffe/libraries/javalib/Makefile.am:1.163
--- kaffe/libraries/javalib/Makefile.am:1.162   Sat Jan 17 18:00:40 2004
+++ kaffe/libraries/javalib/Makefile.am Tue Jan 20 23:24:01 2004
@@ -160,6 +160,7 @@
        $(kaffe_jar_SRCS) \
        $(kaffe_lang_SRCS) \
        $(kaffe_management_SRCS) \
+       $(kaffe_security_SRCS) \
        $(kaffe_security_provider_SRCS) \
        $(kaffe_tools_jar_SRCS) \
        $(kaffe_tools_native2ascii_SRCS) \
@@ -2083,6 +2084,10 @@
        kaffe/management/Debug.java \
        kaffe/management/JIT.java \
        kaffe/management/XProfiler.java
+kaffe_security_SRCS = \
+       kaffe/security/LameRandomness.java \
+       kaffe/security/Randomness.java \
+       kaffe/security/UnixRandomness.java
 kaffe_security_provider_SRCS = \
        kaffe/security/provider/Kaffe.java \
        kaffe/security/provider/MD2.java \
Index: kaffe/libraries/javalib/Makefile.in
diff -u kaffe/libraries/javalib/Makefile.in:1.218 
kaffe/libraries/javalib/Makefile.in:1.219
--- kaffe/libraries/javalib/Makefile.in:1.218   Sat Jan 17 18:00:40 2004
+++ kaffe/libraries/javalib/Makefile.in Tue Jan 20 23:24:01 2004
@@ -441,6 +441,7 @@
        $(kaffe_jar_SRCS) \
        $(kaffe_lang_SRCS) \
        $(kaffe_management_SRCS) \
+       $(kaffe_security_SRCS) \
        $(kaffe_security_provider_SRCS) \
        $(kaffe_tools_jar_SRCS) \
        $(kaffe_tools_native2ascii_SRCS) \
@@ -2478,6 +2479,11 @@
        kaffe/management/Debug.java \
        kaffe/management/JIT.java \
        kaffe/management/XProfiler.java
+
+kaffe_security_SRCS = \
+       kaffe/security/LameRandomness.java \
+       kaffe/security/Randomness.java \
+       kaffe/security/UnixRandomness.java
 
 kaffe_security_provider_SRCS = \
        kaffe/security/provider/Kaffe.java \
===================================================================
Checking out kaffe/libraries/javalib/kaffe/security/LameRandomness.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/kaffe/security/LameRandomness.java,v
VERS: 1.1
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/kaffe/security/LameRandomness.java  Tue Jan 20 23:26:50 
2004
@@ -0,0 +1,52 @@
+/*
+ * LameRandomness.java
+ *
+ * Copyright (c) 2004 The University of Utah and the Flux Group.
+ * All rights reserved.
+ *
+ * This file is licensed under the terms of the GNU Public License.
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * Contributed by the Flux Research Group, Department of Computer Science,
+ * University of Utah, http://www.cs.utah.edu/flux/
+ */
+
+package kaffe.security;
+
+import java.util.Random;
+
+/**
+ * Lame implementation of kaffe.security.Randomness, just uses a value from
+ * java.util.Random.
+ */
+public class LameRandomness
+    extends Randomness
+{
+       /**
+        * Construct an empty LameRandomness object.
+        */
+       public LameRandomness()
+       {
+       }
+       
+       /**
+        * Fill the bits array using java.util.Random#nextBytes().
+        *
+        * @see kaffe.security.Randomness#fill()
+        */
+       public void fill(byte bits[])
+       {
+               new Random().nextBytes(bits);
+       }
+       
+       /**
+        * @see java.lang.Object#toString()
+        */
+       public String toString()
+       {
+               return "LameRandomness["
+                       + super.toString()
+                       + "]";
+       }
+}
===================================================================
Checking out kaffe/libraries/javalib/kaffe/security/Randomness.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/kaffe/security/Randomness.java,v
VERS: 1.1
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/kaffe/security/Randomness.java      Tue Jan 20 23:26:51 
2004
@@ -0,0 +1,44 @@
+/*
+ * Randomness.java
+ *
+ * Copyright (c) 2004 The University of Utah and the Flux Group.
+ * All rights reserved.
+ *
+ * This file is licensed under the terms of the GNU Public License.
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * Contributed by the Flux Research Group, Department of Computer Science,
+ * University of Utah, http://www.cs.utah.edu/flux/
+ */
+
+package kaffe.security;
+
+/**
+ * Base class for implementations of initial sources of randomness.
+ */
+public abstract class Randomness
+{
+       /**
+        * Construct an empty Randomness object.
+        */
+       public Randomness()
+       {
+       }
+       
+       /**
+        * Fill the given array with some random bits.
+        *
+        * @param bits The array to fill with random bits.
+        */
+       public abstract void fill(byte bits[]);
+
+       /**
+        * @see java.lang.Object#toString()
+        */
+       public String toString()
+       {
+               return "Randomness["
+                       + "]";
+       }
+}
===================================================================
Checking out kaffe/libraries/javalib/kaffe/security/UnixRandomness.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/kaffe/security/UnixRandomness.java,v
VERS: 1.1
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/kaffe/security/UnixRandomness.java  Tue Jan 20 23:26:51 
2004
@@ -0,0 +1,79 @@
+/*
+ * UnixRandomness.java
+ *
+ * Copyright (c) 2004 The University of Utah and the Flux Group.
+ * All rights reserved.
+ *
+ * This file is licensed under the terms of the GNU Public License.
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * Contributed by the Flux Research Group, Department of Computer Science,
+ * University of Utah, http://www.cs.utah.edu/flux/
+ */
+
+package kaffe.security;
+
+import java.io.IOException;
+import java.io.DataInputStream;
+import java.io.FileInputStream;
+
+import java.util.Random;
+
+/**
+ * Unix implementation of kaffe.security.Randomness, reads from "/dev/urandom".
+ */
+public class UnixRandomness
+    extends Randomness
+{
+       /**
+        * The file name of the random device.
+        *
+        * XXX Use a property.
+        */
+       private static final String FILE_NAME = "/dev/urandom";
+
+       /**
+        * The input stream bound to the random device.
+        */
+       private final DataInputStream dis;
+
+       /**
+        * Construct a UnixRandomness object.
+        *
+        * @exception IOException if the random device cannot be opened.
+        */
+       public UnixRandomness()
+               throws IOException
+       {
+               this.dis = new DataInputStream(new FileInputStream(FILE_NAME));
+       }
+
+       /**
+        * Fill the bits array with data from the random device.
+        *
+        * @see kaffe.security.Randomness#fill()
+        */
+       public synchronized void fill(byte bits[])
+       {
+               try
+               {
+                       this.dis.readFully(bits);
+               }
+               catch(IOException e)
+               {
+                       /* XXX Better way to fall back? */
+                       new Random().nextBytes(bits);
+               }
+       }
+
+       /**
+        * @see java.lang.Object#toString()
+        */
+       public String toString()
+       {
+               return "UnixRandomness["
+                       + super.toString()
+                       + "]";
+       }
+}
Index: kaffe/libraries/javalib/kaffe/security/provider/SHA1PRNG.java
diff -u kaffe/libraries/javalib/kaffe/security/provider/SHA1PRNG.java:1.6 
kaffe/libraries/javalib/kaffe/security/provider/SHA1PRNG.java:1.7
--- kaffe/libraries/javalib/kaffe/security/provider/SHA1PRNG.java:1.6   Thu Feb 20 
13:52:10 2003
+++ kaffe/libraries/javalib/kaffe/security/provider/SHA1PRNG.java       Tue Jan 20 
23:24:03 2004
@@ -4,7 +4,7 @@
  * SHA1PRNG.java
  * SHA-1 based pseudo-random number generator.
  *
- * Copyright (c) 2002 The University of Utah and the Flux Group.
+ * Copyright (c) 2002, 2004 The University of Utah and the Flux Group.
  * All rights reserved.
  *
  * This file is licensed under the terms of the GNU Public License.
@@ -17,7 +17,7 @@
 
 package kaffe.security.provider;
 
-import java.util.Random;
+import kaffe.security.Randomness;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -30,6 +30,72 @@
        extends SecureRandomSpi
 {
        /**
+        * The list of randomness implmentation classes, ordered from most to
+        * least desirable.
+        */
+       private static final String RANDOMNESS_IMPLS[] = {
+               "kaffe.security.UnixRandomness",
+               "kaffe.security.LameRandomness"
+       };
+
+       /**
+        * The root source of randomness.
+        */
+       private static final Randomness impl;
+       
+       static {
+               Randomness rand = null;
+               int lpc;
+
+               /* Walk the list of implementations. */
+               for( lpc = 0;
+                    (lpc < RANDOMNESS_IMPLS.length) && (rand == null);
+                    lpc++ )
+               {
+                       try
+                       {
+                               ClassLoader cl;
+                               Class rclass;
+
+                               cl = ClassLoader.getSystemClassLoader();
+                               /* Try to load and */
+                               rclass = cl.loadClass(RANDOMNESS_IMPLS[lpc]);
+                               /* ... instantiate an object. */
+                               rand = (Randomness)rclass.newInstance();
+                               /*
+                                * Success!
+                                * Set a property to inform the user.
+                                */
+                               System.setProperty("org.kaffe.randomness",
+                                                  rclass.getName());
+                       }
+                       catch(IllegalAccessException e)
+                       {
+                               /* Really should not happen. */
+                               throw new InternalError(e.toString());
+                       }
+                       catch(ExceptionInInitializerError e)
+                       {
+                       }
+                       catch(InstantiationException e)
+                       {
+                       }
+                       catch(NoClassDefFoundError e)
+                       {
+                       }
+                       catch(ClassNotFoundException e)
+                       {
+                       }
+               }
+               if( rand == null )
+               {
+                       throw new UnsatisfiedLinkError(
+                               "Cannot find working Randomness");
+               }
+               impl = rand;
+       }
+       
+       /**
         * The "true" random seed size.
         */
        private static final int SEED_SIZE = 8;
@@ -74,14 +140,17 @@
         */
        public SHA1PRNG()
        {
+               /*
+                * Fill the seed using the implementation specific source of
+                * randomness.
+                */
+               impl.fill(this.seed);
+               
                try
                {
                        byte digest[];
                        
                        this.md = MessageDigest.getInstance("SHA-1");
-
-                       /* XXX This is a lame source of randomness. */
-                       new Random().nextBytes(this.seed);
                        digest = this.md.digest(this.seed);
                        System.arraycopy(digest, 0, this.data, 0, SEED_SIZE);
                }
@@ -95,7 +164,7 @@
                }
        }
        
-       protected void engineSetSeed(byte[] otherSeed)
+       protected synchronized void engineSetSeed(byte[] otherSeed)
        {
                try
                {
@@ -114,7 +183,7 @@
                }
        }
        
-       protected void engineNextBytes(byte[] bytes)
+       protected synchronized void engineNextBytes(byte[] bytes)
        {
                if( bytes.length < (SEED_SIZE - this.dataPos) )
                {
Index: kaffe/libraries/javalib/profiles/allatonce/all.files
diff -u kaffe/libraries/javalib/profiles/allatonce/all.files:1.35 
kaffe/libraries/javalib/profiles/allatonce/all.files:1.36
--- kaffe/libraries/javalib/profiles/allatonce/all.files:1.35   Mon Jan 12 06:28:40 
2004
+++ kaffe/libraries/javalib/profiles/allatonce/all.files        Tue Jan 20 23:24:03 
2004
@@ -1337,6 +1337,9 @@
 kaffe/management/Debug.java
 kaffe/management/JIT.java
 kaffe/management/XProfiler.java
+kaffe/security/LameRandomness.java
+kaffe/security/Randomness.java
+kaffe/security/UnixRandomness.java
 kaffe/security/provider/Kaffe.java
 kaffe/security/provider/MD2.java
 kaffe/security/provider/MD4.java
Index: kaffe/libraries/javalib/profiles/default/core.files
diff -u kaffe/libraries/javalib/profiles/default/core.files:1.23 
kaffe/libraries/javalib/profiles/default/core.files:1.24
--- kaffe/libraries/javalib/profiles/default/core.files:1.23    Tue Jan  6 16:27:55 
2004
+++ kaffe/libraries/javalib/profiles/default/core.files Tue Jan 20 23:24:03 2004
@@ -270,6 +270,9 @@
 kaffe/management/Debug.java
 kaffe/management/JIT.java
 kaffe/management/XProfiler.java
+kaffe/security/LameRandomness.java
+kaffe/security/Randomness.java
+kaffe/security/UnixRandomness.java
 kaffe/security/provider/Kaffe.java
 kaffe/security/provider/MD2.java
 kaffe/security/provider/MD4.java
Index: kaffe/test/regression/Makefile.am
diff -u kaffe/test/regression/Makefile.am:1.85 kaffe/test/regression/Makefile.am:1.86
--- kaffe/test/regression/Makefile.am:1.85      Mon Dec  8 02:46:43 2003
+++ kaffe/test/regression/Makefile.am   Tue Jan 20 23:24:04 2004
@@ -258,8 +258,9 @@
        MethodSignature7.j \
        MethodSignature8.j \
        MethodSignature9.j
+
 if HAVE_JASMIN
-JASMIN_TESTS = JASMIN_TESTS_DIST
+JASMIN_TESTS = $(JASMIN_TESTS_DIST)
 else
 JASMIN_TESTS =
 endif
@@ -267,8 +268,9 @@
 BCEL_TESTS_DIST = \
        BadClassFileCode.java \
        BadClassFileConstants.java
+
 if HAVE_BCEL
-BCEL_TESTS = BCEL_TESTS_DIST
+BCEL_TESTS = $(BCEL_TESTS_DIST)
 else
 BCEL_TESTS =
 endif
Index: kaffe/test/regression/Makefile.in
diff -u kaffe/test/regression/Makefile.in:1.155 kaffe/test/regression/Makefile.in:1.156
--- kaffe/test/regression/Makefile.in:1.155     Sat Jan 17 18:00:45 2004
+++ kaffe/test/regression/Makefile.in   Tue Jan 20 23:24:04 2004
@@ -539,13 +539,13 @@
        MethodSignature9.j
 
 @[EMAIL PROTECTED] = 
[EMAIL PROTECTED]@JASMIN_TESTS = JASMIN_TESTS_DIST
[EMAIL PROTECTED]@JASMIN_TESTS = $(JASMIN_TESTS_DIST)
 BCEL_TESTS_DIST = \
        BadClassFileCode.java \
        BadClassFileConstants.java
 
 @[EMAIL PROTECTED] = 
[EMAIL PROTECTED]@BCEL_TESTS = BCEL_TESTS_DIST
[EMAIL PROTECTED]@BCEL_TESTS = $(BCEL_TESTS_DIST)
 @[EMAIL PROTECTED] = 
 @[EMAIL PROTECTED] = \
 @USER_WANT_GNU_CRYPTO_TRUE@    TestGnuCrypto.java

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to